@nm-lang/cli 0.7.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -3
- package/bin/nm.mjs +14 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/python/README.md +12 -0
- package/python/pyproject.toml +2 -1
package/README.md
CHANGED
|
@@ -3,7 +3,23 @@
|
|
|
3
3
|
N/M 0.2.0 Preview command-line tools for running, formatting, linting, testing,
|
|
4
4
|
exporting and managing local N/M workspaces.
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
CLI package **0.7.1** retains Core **0.7.0** and the N/M **0.2.0** language contract.
|
|
7
|
+
|
|
8
|
+
## 0.7.1 Python build security / Python üretim güvenliği
|
|
9
|
+
|
|
10
|
+
This CLI patch ships the Python source build-backend correction to setuptools
|
|
11
|
+
84.1.0. The repository's isolated wheel tooling uses wheel 0.46.2. Python 3.10+,
|
|
12
|
+
runtime dependencies, permissions, scientific limits and licenses are unchanged.
|
|
13
|
+
`nm --version --json` reports `cliPackageVersion` separately; `packageVersion`
|
|
14
|
+
and `corePackageVersion` retain the Core runtime identity. `nm doctor` accepts
|
|
15
|
+
a same-train CLI patch while still rejecting Core/language/protocol drift.
|
|
16
|
+
|
|
17
|
+
Bu CLI yaması Python kaynak build backend'ini setuptools 84.1.0'a günceller;
|
|
18
|
+
deponun izole wheel araçları wheel 0.46.2 kullanır. Python 3.10+, çalışma zamanı
|
|
19
|
+
bağımlılıkları, izinler, bilimsel sınırlar ve lisanslar korunur. JSON sürüm
|
|
20
|
+
çıktısında `cliPackageVersion` CLI'yi; `packageVersion` ve `corePackageVersion`
|
|
21
|
+
Core'u gösterir. Doctor, aynı seride CLI yamasını kabul eder; Core/dil/protokol
|
|
22
|
+
uyuşmazlıklarını reddetmeye devam eder.
|
|
7
23
|
|
|
8
24
|
## 0.7.0 training numerics / Eğitim sayısal işlemleri
|
|
9
25
|
|
|
@@ -29,12 +45,12 @@ npx --package=@nm-lang/cli nm --version
|
|
|
29
45
|
```
|
|
30
46
|
|
|
31
47
|
An untagged install selects npm's `latest` channel. To pin this version,
|
|
32
|
-
append `@0.7.
|
|
48
|
+
append `@0.7.1` to the package name. The N/M language remains
|
|
33
49
|
Preview independently of the npm channel. npm installs the matching Core dependency.
|
|
34
50
|
No repository checkout or TypeScript build is needed to use a published package.
|
|
35
51
|
|
|
36
52
|
Türkçe: Etiketsiz kurulum npm'in `latest` kanalını seçer.
|
|
37
|
-
`@0.7.
|
|
53
|
+
`@0.7.1` ile sürümü sabitleyebilirsiniz. N/M dili, npm kanalından bağımsız
|
|
38
54
|
olarak Önizleme durumundadır. Core bağımlılığı otomatik kurulur; depoyu
|
|
39
55
|
indirmeniz gerekmez.
|
|
40
56
|
|
package/bin/nm.mjs
CHANGED
|
@@ -32,7 +32,7 @@ if (cliArgs[0] === "bridge") {
|
|
|
32
32
|
const { nmVersionManifest } = await import("../dist/version.js");
|
|
33
33
|
process.stdout.write(
|
|
34
34
|
cliArgs.includes("--json")
|
|
35
|
-
? `${JSON.stringify(nmVersionManifest, null, 2)}\n`
|
|
35
|
+
? `${JSON.stringify(cliVersionReport(nmVersionManifest), null, 2)}\n`
|
|
36
36
|
: `N/M ${nmVersionManifest.languageVersion} (${nmVersionManifest.stability})\n`,
|
|
37
37
|
);
|
|
38
38
|
} else {
|
|
@@ -130,12 +130,25 @@ if (cliArgs[0] === "bridge") {
|
|
|
130
130
|
});
|
|
131
131
|
} else {
|
|
132
132
|
const result = runNMCLI(cliArgs, runOptions);
|
|
133
|
+
if ((cliArgs[0] === "--version" || cliArgs[0] === "version") && cliArgs.includes("--json") && result.exitCode === 0) {
|
|
134
|
+
result.stdout = [JSON.stringify(cliVersionReport(JSON.parse(result.stdout.join("\n"))), null, 2)];
|
|
135
|
+
}
|
|
133
136
|
if (result.stdout.length > 0) process.stdout.write(`${result.stdout.join("\n")}\n`);
|
|
134
137
|
if (result.stderr.length > 0) process.stderr.write(`${result.stderr.join("\n")}\n`);
|
|
135
138
|
process.exitCode = result.exitCode;
|
|
136
139
|
}
|
|
137
140
|
}
|
|
138
141
|
|
|
142
|
+
// Core's packageVersion keeps its existing meaning. Read this executable's own
|
|
143
|
+
// distribution metadata, never a package.json supplied by the working directory.
|
|
144
|
+
function cliVersionReport(manifest) {
|
|
145
|
+
const cli = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8"));
|
|
146
|
+
if (cli.name !== "@nm-lang/cli" || typeof cli.version !== "string" || !/^\d+\.\d+\.\d+(?:-[\da-zA-Z.-]+)?$/.test(cli.version)) {
|
|
147
|
+
throw new Error("Invalid N/M CLI distribution metadata.");
|
|
148
|
+
}
|
|
149
|
+
return { ...manifest, cliPackageVersion: cli.version, corePackageVersion: manifest.packageVersion };
|
|
150
|
+
}
|
|
151
|
+
|
|
139
152
|
function getWorkspaceIndex(entryPath) {
|
|
140
153
|
const cacheKey = path.resolve(entryPath);
|
|
141
154
|
const cached = workspaceCache.get(cacheKey);
|
package/dist/index.js
CHANGED
|
@@ -1512,7 +1512,7 @@ ${item.code}`;item.requiresSidecar=true;item.sidecar=createClassicalFunctionFram
|
|
|
1512
1512
|
${NM_COMPUTE_APPLY_QASM3_NOTICE}`);return{...emitted,qasm,sidecar,sidecarJson:`${JSON.stringify(sidecar)}
|
|
1513
1513
|
`}}catch{return failure12()}}function validateNMComputeApplyQASM3Sidecar(value){const invalid10=()=>({valid:false,issues:[{code:"NM-QASM3-SIDECAR-INTEGRITY-001",path:"$",keyword:"integrity",message:"Compute/apply QASM3 source, projection, options or execution semantics are inconsistent."}]});try{const candidate=copyNMComputeApplyCarrierData(value);if(candidate?.version!=="0.5"||candidate.ir?.version!=="0.4"||!candidate.computeApply||!["preview","strict"].includes(candidate.computeApply.conformance))return invalid10();const options=candidate.ir.module.computeApply.parseOptions;const original=readNMComputeApplyIR(JSON.stringify(candidate.ir),options);if(!original.success)return invalid10();const projection=projectNMComputeApplyExport(original.source,options??{});if(!projection||!classicalFunctionDataEqual(candidate,createSidecar(original.ir,projection,candidate.computeApply.conformance)))return invalid10();return{valid:true,sidecar:candidate,issues:[]}}catch{return invalid10()}}var NM_CLASSICAL_FUNCTION_IR_MAX_BYTES=2097152;function readNMClassicalFunctionIR(json,options={}){const failure12={success:false,error:"invalid-classical-function-ir"};if(options.experimental?.classicalFunctions!==true||typeof json!=="string"||json.length>NM_CLASSICAL_FUNCTION_IR_MAX_BYTES||new TextEncoder().encode(json).length>NM_CLASSICAL_FUNCTION_IR_MAX_BYTES)return failure12;try{const candidate=JSON.parse(json);if(candidate?.format!=="nm-json-ir"||candidate.version!=="0.2"||candidate.execution!=="lowered-classical-functions")return failure12;const source=candidate.module?.classicalFunctions?.originalSource;if(typeof source!=="string")return failure12;const snapshot2=classicalFunctionWorkspaceSnapshot(source,candidate.module.classicalFunctions.parseOptions?.workspaceModules);if(!snapshot2)return failure12;const rebuilt=exportToNMIR(source,{...options,...snapshot2});if(!rebuilt.success||rebuilt.ir?.version!=="0.2"||!classicalFunctionDataEqual(candidate,rebuilt.ir))return failure12;return{success:true,source,ir:rebuilt.ir,...snapshot2}}catch{return failure12}}var NM_QASM3_CLASSICAL_FUNCTION_SIDECAR_VERSION="0.4";var nmQasm3ClassicalFunctionSemantics=Object.freeze({preservation:"original-source-and-lowered-ir",qasmExecution:"quantum-operations-only",classicalExecution:"requires-nm-runtime"});var flags3={hamiltonianEvolution:true,measurementGrouping:true,computeApply:true,moduleVisibility:true,exactImports:true,propertyAssertions:true,qmlTrainingControls:true,typedClassicalValues:true,targetCapabilityConstraints:true,functionResults:true,classicalFunctions:true,genericOracles:true,feedForward:true,typedCollection:true,comptimeConst:true,genericCircuits:true,qecExperiments:true,composedNoise:true,parameterGroups:true};var record3=value=>value!==null&&typeof value==="object"&&!Array.isArray(value);function validateClassicalFunctionQASM3Sidecar(value,validateLegacy){const invalid10=()=>({valid:false,issues:[{code:"NM-QASM3-SIDECAR-INTEGRITY-001",path:"$",keyword:"integrity",message:"Classical-function sidecar source, IR, options or execution semantics are inconsistent."}]});try{if(!record3(value.ir)||!record3(value.ir.module)||!record3(value.module))return invalid10();const provenance=value.ir.module.classicalFunctions;if(!record3(provenance)||!record3(provenance.parseOptions))return invalid10();const options=provenance.parseOptions;if(Object.keys(options).some(key5=>key5!=="experimental"&&key5!=="workspaceModules")||!record3(options.experimental)||Object.entries(options.experimental).some(([key5,flag])=>!Object.prototype.hasOwnProperty.call(flags3,key5)||typeof flag!=="boolean"))return invalid10();const rebuilt=readNMClassicalFunctionIR(JSON.stringify(value.ir),options);if(!rebuilt.success||!classicalFunctionDataEqual(value.module,rebuilt.ir.module)||!classicalFunctionDataEqual(value.classicalFunctionSemantics,nmQasm3ClassicalFunctionSemantics))return invalid10();const moduleMetadata={...value.module};delete moduleMetadata.classicalFunctions;const statements=rebuilt.ir.statements.map(statement=>{if(statement.kind!=="gate")return statement;const legacyGate={...statement};delete legacyGate.classicalAngles;return legacyGate});const ir={...value.ir,version:"0.1",module:moduleMetadata,statements};Reflect.deleteProperty(ir,"execution");const legacy={...value,version:"0.3",module:moduleMetadata,ir};Reflect.deleteProperty(legacy,"classicalFunctionSemantics");const validation=validateLegacy(legacy);return validation.valid?{valid:true,sidecar:value,issues:[]}:validation}catch{return invalid10()}}var NM_QASM3_SIDECAR_FORMAT="nm-qasm3-sidecar";var NM_QASM3_SIDECAR_LEGACY_VERSION="0.1";var NM_QASM3_SIDECAR_PREVIOUS_VERSION="0.2";var NM_QASM3_SIDECAR_VERSION="0.3";var NM_QASM3_SIDECAR_MAX_JSON_BYTES=40*1024*1024;var NM_QASM3_SIDECAR_MAX_STATEMENTS=1e5;var nmQasm3SidecarCompatibilityPolicy={writerVersion:NM_QASM3_SIDECAR_VERSION,conditionalWriterVersions:{classicalFunctions:NM_QASM3_CLASSICAL_FUNCTION_SIDECAR_VERSION,computeApply:NM_QASM3_COMPUTE_APPLY_SIDECAR_VERSION},permanentReaderVersions:[NM_QASM3_SIDECAR_LEGACY_VERSION,NM_QASM3_SIDECAR_PREVIOUS_VERSION,NM_QASM3_SIDECAR_VERSION,NM_QASM3_CLASSICAL_FUNCTION_SIDECAR_VERSION,NM_QASM3_COMPUTE_APPLY_SIDECAR_VERSION],unknownVersion:"reject-with-stable-diagnostic",unknownFields:"reject",unknownStatementKinds:"reject",migration:"lossless-explicit-only"};var nmQasm3SidecarDiagnosticCodes={parse:"NM-QASM3-SIDECAR-PARSE-001",type:"NM-QASM3-SIDECAR-TYPE-001",format:"NM-QASM3-SIDECAR-FORMAT-001",version:"NM-QASM3-SIDECAR-VERSION-001",unknown:"NM-QASM3-SIDECAR-UNKNOWN-001",limit:"NM-QASM3-SIDECAR-LIMIT-001",integrity:"NM-QASM3-SIDECAR-INTEGRITY-001"};var nmQasm3ExportDiagnosticCodes={source:"NM-QASM3-EXPORT-001",training:"NM-QASM3-EXPORT-002",empty:"NM-QASM3-EXPORT-003",lowering:"NM-QASM3-EXPORT-004",invariant:"NM-QASM3-EXPORT-005"};var sidecarRootKeys=new Set(["format","version","carrier","module","nativeStatementKinds","nativeStatements","ir","execution"]);var irRootKeys=new Set(["format","version","module","qubits","constants","params","resources","diagnostics","statements"]);var irStatementKinds=new Set(["qreg","const","param","explain","gate","measurement","measurement-binding","assertBranchInvariant","bitAssign","classicalDecl","syndrome","assertProbability","assertExpectation","assertExpectationRange","assertEntangled","assertFidelity","assertEquivalent","assertResource","expectation","metric","gradient","encode","train","observe","test","property","snapshot","show","if","until","match","reset","barrier","return"]);var irModuleKeysV01=new Set(["name","target","constraints","sampleShots","typedCollection","expectationShots","propertyAssertions","typedClassicalValues","functionResults","targetCapabilityConstraints","feedForward","genericOracles","comptimeConstants","noise","mitigation","seed","optimize","estimate","goals","outcomes","rubrics","misconceptions","quizzes","labs","challenges","datasets","checkpoints","hints","concepts","level","prerequisites"]);var irModuleKeysV02=new Set([...irModuleKeysV01,"comptimeStructures"]);var irModuleKeys=new Set([...irModuleKeysV02,"genericCircuits"]);var irStatementKeys=Object.fromEntries(Object.entries({qreg:["name","size","declaredSize","sizeSource","declaredSizeSource"],const:["name","value","valueType"],param:["name","value"],explain:["text"],gate:["gate","targets","theta","thetaName","angles","angleNames"],measurement:["target","basis","binding","bindingType"],"measurement-binding":["name","operand","width","declaredWidth"],assertBranchInvariant:["target"],bitAssign:["name","expression"],classicalDecl:["name","valueType","expression"],syndrome:["binding","factors"],assertProbability:["state","operator","expected","tolerance"],assertExpectation:["terms","operator","expected","tolerance"],assertExpectationRange:["terms","minimum","maximum"],assertEntangled:["targets"],assertFidelity:["target","operator","expected"],assertEquivalent:["target","phasePolicy"],assertResource:["metric","operator","expected"],expectation:["terms","binding"],metric:["name","expression"],gradient:["binding","target","parameter"],encode:["row","register","method"],train:["objective","optimizer","steps","loss","datasetId"],observe:["name","body"],test:["name","body"],property:["name","parameter","cases"],snapshot:["name","body"],show:["subject"],if:["binding","operator","value","predicate","body","elseBody"],until:["binding","operator","value","maxIterations","body"],match:["bindings","cases"],reset:["target"],barrier:[],return:["expression","functionResult"]}).map(([kind,keys4])=>[kind,new Set(["kind","line",...keys4])]));var nativeStatementKindSet=new Set(["bitAssign","classicalDecl","syndrome","assertBranchInvariant","assertProbability","assertExpectation","assertExpectationRange","assertEntangled","assertFidelity","assertEquivalent","assertResource","expectation","metric","gradient","encode","train","observe","test","property","snapshot","show","until","explain","return"]);var utf8Encoder3=new TextEncoder;function isRecord11(value){return typeof value==="object"&&value!==null&&!Array.isArray(value)}function sidecarIssue(code,path,keyword,message){return{code,path,keyword,message}}var GATE_TO_QASM3={H:"h",X:"x",Y:"y",Z:"z",S:"s",T:"t",Sdg:"sdg",Tdg:"tdg",CNOT:"cx",CZ:"cz",SWAP:"swap",iSWAP:"iswap",CCNOT:"ccx",CSWAP:"cswap",CY:"cy",CH:"ch"};var qasm3ReservedIdentifiers=new Set(["OPENQASM","include","input","output","const","readonly","mutable","qreg","qubit","creg","bool","bit","int","uint","float","angle","complex","array","void","duration","stretch","gphase","inv","pow","ctrl","negctrl","durationof","delay","reset","measure","barrier","gate","def","extern","box","let","break","continue","end","return","for","while","if","else","switch","case","default","true","false","cal","defcal","defcalgrammar",...Object.values(GATE_TO_QASM3),"U"]);function formatAngle4(theta){return formatNMSourceNumber(theta)}function formatMetadataNumber2(value){return Number.parseFloat(value.toPrecision(12)).toString()}function qubit2(ref2){return`q[${ref2.resolvedIndex??0}]`}function sanitizeIdent2(name2){const cleaned=name2.replace(/[^A-Za-z0-9_]/g,"_");if(!cleaned){return"bit_value"}const candidate=/^[A-Za-z_]/.test(cleaned)?cleaned:`b_${cleaned}`;return qasm3ReservedIdentifiers.has(candidate)?`nm_${candidate}`:candidate}function flattenStatements5(statements){const flat=[];for(const statement of statements){flat.push(statement);if(statement.kind==="if"){flat.push(...flattenStatements5(statement.body));if(statement.elseBody){flat.push(...flattenStatements5(statement.elseBody))}}else if(statement.kind==="until"){flat.push(...flattenStatements5(statement.body))}else if(statement.kind==="match"){for(const matchCase of statement.cases){flat.push(...flattenStatements5(matchCase.body))}}else if(statement.kind==="observe"||statement.kind==="test"){flat.push(...flattenStatements5(statement.body))}else if(statement.kind==="property"){for(const propertyCase of statement.cases){flat.push(...flattenStatements5(propertyCase.body))}}else if(statement.kind==="snapshot"){flat.push(...flattenStatements5(statement.body))}}return flat}function stripCarrierTargetAnnotations(source){return source.split(/\r\n|\r|\n/u).filter(line=>!/^\s*@target(?:_capabilities)?\s*\(/u.test(line)).join("\n")}function formatFactor2(factor){return`${factor.observable}(${qubit2(factor.target)})`}function formatEntanglementAssertion2(statement){return`entangled(${qubit2(statement.targets[0])}, ${qubit2(statement.targets[1])})`}function formatTerm2(term){const paulis=term.factors.length>0?term.factors.map(formatFactor2).join(" "):"I";return`${formatAngle4(term.coeff)} * ${paulis}`}function formatTerms2(terms){return terms.map(formatTerm2).join(" + ")}function formatBitExpression2(expression){switch(expression.kind){case"literal":return String(expression.value);case"ref":return expression.name;case"not":return`not ${formatBitExpression2(expression.expression)}`;case"binary":return`${formatBitExpression2(expression.left)} ${expression.operator} ${formatBitExpression2(expression.right)}`;default:expression;return""}}function gateToQASM3(gate){const fixed=GATE_TO_QASM3[gate.gate];if(fixed){return`${fixed} ${gate.targets.map(qubit2).join(", ")};`}const thetaValue=gate.theta??0;const theta=formatAngle4(thetaValue);switch(gate.gate){case"GPhase":return`gphase(${theta});`;case"Rx":return`rx(${theta}) ${qubit2(gate.targets[0])};`;case"Ry":return`ry(${theta}) ${qubit2(gate.targets[0])};`;case"Rz":return`rz(${theta}) ${qubit2(gate.targets[0])};`;case"P":return`p(${theta}) ${qubit2(gate.targets[0])};`;case"U":{const[uTheta,phi,lambda]=gate.angles??[thetaValue,0,0];return`u3(${formatAngle4(uTheta)}, ${formatAngle4(phi)}, ${formatAngle4(lambda)}) ${qubit2(gate.targets[0])};`}case"RXX":return`rxx(${theta}) ${qubit2(gate.targets[0])}, ${qubit2(gate.targets[1])};`;case"RYY":return`ryy(${theta}) ${qubit2(gate.targets[0])}, ${qubit2(gate.targets[1])};`;case"RZZ":return`rzz(${theta}) ${qubit2(gate.targets[0])}, ${qubit2(gate.targets[1])};`;case"CRy":return`cry(${theta}) ${qubit2(gate.targets[0])}, ${qubit2(gate.targets[1])};`;case"CRz":return`crz(${theta}) ${qubit2(gate.targets[0])}, ${qubit2(gate.targets[1])};`;case"CP":return`cp(${theta}) ${qubit2(gate.targets[0])}, ${qubit2(gate.targets[1])};`;default:return void 0}}function validateFunctionResultModule(value,path,issues){if(!isRecord11(value)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected typed function result module metadata."));return}const allowed=new Set(["experimental","contractVersion","resultType","errorType"]);for(const key5 of Object.keys(value)){if(!allowed.has(key5))issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.unknown,`${path}.${key5}`,"additionalProperties","Unknown typed function result metadata property."))}if(value.experimental!==true||value.contractVersion!==NM_FUNCTION_RESULTS_CONTRACT_VERSION||value.errorType!=="Error"){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.format,path,"const","Expected the NM-RFC-0007 runtime-experimental metadata contract."))}if(!isRecord11(value.resultType)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${path}.resultType`,"type","Expected a typed function result value type."));return}const resultType=value.resultType;const typeKeys=new Set(resultType.kind==="scalar"?["kind","name"]:resultType.kind==="array"?["kind","elementType","length"]:["kind"]);for(const key5 of Object.keys(resultType)){if(!typeKeys.has(key5))issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.unknown,`${path}.resultType.${key5}`,"additionalProperties","Unknown typed function result type property."))}if(resultType.kind==="scalar"){if(resultType.name!=="Bit"&&resultType.name!=="Int"&&resultType.name!=="Float"&&resultType.name!=="Bool"){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${path}.resultType.name`,"type","Expected Bit, Int, Float, or Bool result type."))}}else if(resultType.kind==="array"){if(resultType.elementType!=="Bit"&&resultType.elementType!=="Int"&&resultType.elementType!=="Float"||!Number.isInteger(resultType.length)||resultType.length<1||resultType.length>256){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${path}.resultType`,"type","Expected a bounded Array<Bit|Int|Float, 1..256> result type."))}}else{issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.unknown,`${path}.resultType.kind`,"const","Unknown typed function result type kind."))}}function validateExactObjectKeys(value,allowed,path,issues,subject){const allowedSet=new Set(allowed);for(const key5 of Object.keys(value)){if(!allowedSet.has(key5)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.unknown,`${path}.${key5}`,"additionalProperties",`Unknown ${subject} property.`))}}}var nmComptimePositions=new Set(["qreg-type","qreg-allocation","vector-param-size","repeat-count","for-start","for-end","sample-count","collect-count","bitvec-width","slice-start","slice-end"]);function validateComptimeSourceMetadata(value,path,issues,bindings3){if(typeof value.sourceExpression!=="string"||value.sourceExpression.length===0||utf8Encoder3.encode(value.sourceExpression).byteLength>4096||!Number.isSafeInteger(value.foldedValue)||!Array.isArray(value.referencedConstants)||value.referencedConstants.length>4096||value.referencedConstants.some(entry=>typeof entry!=="string"||!/^[A-Za-z_]\w*$/u.test(entry))){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected bounded compile-time source metadata with a safe-integer folded value."));return void 0}const evaluation=evaluateNMComptimeExpression(value.sourceExpression,bindings3);if(!evaluation.success){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.integrity,`${path}.sourceExpression`,"integrity","Compile-time source expression cannot be reproduced from earlier const Int declarations."));return evaluation}if(value.sourceExpression!==evaluation.sourceExpression||value.foldedValue!==evaluation.foldedValue||JSON.stringify(value.referencedConstants)!==JSON.stringify(evaluation.referencedConstants)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.integrity,path,"integrity","Compile-time source, folded value, and referenced constants must agree exactly."))}return evaluation}function validateComptimeModule(value,path,issues){if(!isRecord11(value)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected compile-time constant module metadata."));return}validateExactObjectKeys(value,["experimental","contractVersion","declarations","uses"],path,issues,"compile-time constant module metadata");if(value.experimental!==true||value.contractVersion!==NM_COMPTIME_CONSTANTS_CONTRACT_VERSION){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.format,path,"const","Expected the NM-RFC-0014 experimental metadata contract."))}if(!Array.isArray(value.declarations)||value.declarations.length>NM_QASM3_SIDECAR_MAX_STATEMENTS){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${path}.declarations`,"type","Expected a bounded compile-time declaration array."));return}if(!Array.isArray(value.uses)||value.uses.length>NM_QASM3_SIDECAR_MAX_STATEMENTS){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${path}.uses`,"type","Expected a bounded compile-time structural-use array."));return}const bindings3={};for(let index=0;index<value.declarations.length;index+=1){const declaration=value.declarations[index];const declarationPath=`${path}.declarations[${index}]`;if(!isRecord11(declaration)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,declarationPath,"type","Expected a compile-time const Int declaration."));continue}validateExactObjectKeys(declaration,["name","line","sourceExpression","foldedValue","referencedConstants"],declarationPath,issues,"compile-time declaration");if(typeof declaration.name!=="string"||!/^[A-Za-z_]\w*$/u.test(declaration.name)||!Number.isSafeInteger(declaration.line)||declaration.line<1){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,declarationPath,"type","Expected a named compile-time declaration with a positive source line."));continue}if(bindings3[declaration.name]){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.integrity,`${declarationPath}.name`,"integrity","Compile-time declaration names must be unique and encounter ordered."));continue}const evaluation=validateComptimeSourceMetadata(declaration,declarationPath,issues,bindings3);if(evaluation?.success){bindings3[declaration.name]={kind:"const",value:evaluation.foldedValue,valueType:"Int"}}}const rangeUses=new Map;for(let index=0;index<value.uses.length;index+=1){const use=value.uses[index];const usePath=`${path}.uses[${index}]`;if(!isRecord11(use)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,usePath,"type","Expected a compile-time structural use."));continue}validateExactObjectKeys(use,["position","line","sourceExpression","foldedValue","referencedConstants"],usePath,issues,"compile-time structural use");if(typeof use.position!=="string"||!nmComptimePositions.has(use.position)||!Number.isSafeInteger(use.line)||use.line<1){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,usePath,"type","Expected a known compile-time structural position with a positive source line."));continue}const evaluation=validateComptimeSourceMetadata(use,usePath,issues,bindings3);if(!evaluation?.success)continue;const position=use.position;const bounds=position==="vector-param-size"?{minimum:1,maximum:NM_COMPTIME_MAX_VECTOR_PARAMETERS}:position==="collect-count"?{minimum:1,maximum:playgroundRuntimeLimits.maxSampleShots}:position==="bitvec-width"?{minimum:1,maximum:NM_FEED_FORWARD_MAX_RESULT_WIDTH}:position==="for-start"||position==="for-end"||position==="slice-start"||position==="slice-end"?{minimum:0}:{minimum:1};const bounded=validateNMComptimeValue(evaluation,{...bounds,position});if(!bounded.success){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.integrity,`${usePath}.foldedValue`,"integrity","Compile-time folded value violates the structural-position budget."))}if(position==="for-start"||position==="for-end"){const line=use.line;const pair=rangeUses.get(line)??{};if(position==="for-start")pair.start=evaluation.foldedValue;else pair.end=evaluation.foldedValue;rangeUses.set(line,pair)}}for(const[line,range2]of rangeUses){if(range2.start==null||range2.end==null||range2.end<range2.start){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.integrity,`${path}.uses`,"integrity",`Compile-time for range on source line ${line} must contain an ordered start/end pair.`))}}}function validateComptimeIRSource(value,expectedValue,path,issues){if(!isRecord11(value)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected compile-time source metadata."));return}validateExactObjectKeys(value,["sourceExpression","foldedValue","referencedConstants"],path,issues,"compile-time IR source");if(typeof value.sourceExpression!=="string"||value.sourceExpression.length===0||!Number.isSafeInteger(value.foldedValue)||value.foldedValue!==expectedValue||!Array.isArray(value.referencedConstants)||value.referencedConstants.some(entry=>typeof entry!=="string")){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.integrity,path,"integrity","Compile-time IR source must agree with the folded structural value."))}}function collectComptimeQRegUses(statements){const uses=[];for(const statement of statements){if(statement.kind==="qreg"){if(statement.declaredSizeSource){uses.push({...statement.declaredSizeSource,position:"qreg-type",line:statement.line})}if(statement.sizeSource){uses.push({...statement.sizeSource,position:"qreg-allocation",line:statement.line})}}if(statement.kind==="observe"||statement.kind==="test"||statement.kind==="snapshot"||statement.kind==="until"){uses.push(...collectComptimeQRegUses(statement.body))}else if(statement.kind==="if"){uses.push(...collectComptimeQRegUses(statement.body));if(statement.elseBody){uses.push(...collectComptimeQRegUses(statement.elseBody))}}else if(statement.kind==="match"||statement.kind==="property"){for(const entry of statement.cases){uses.push(...collectComptimeQRegUses(entry.body))}}}return uses}function collectComptimeMeasurementExpectations(statements){const expectations=[];for(const statement of statements){if(statement.kind==="measurement-binding"){expectations.push({line:statement.line,width:statement.declaredWidth??statement.width,start:statement.operand.start,end:statement.operand.endInclusive})}if(statement.kind==="observe"||statement.kind==="test"||statement.kind==="snapshot"||statement.kind==="until"){expectations.push(...collectComptimeMeasurementExpectations(statement.body))}else if(statement.kind==="if"){expectations.push(...collectComptimeMeasurementExpectations(statement.body));if(statement.elseBody){expectations.push(...collectComptimeMeasurementExpectations(statement.elseBody))}}else if(statement.kind==="match"||statement.kind==="property"){for(const entry of statement.cases){expectations.push(...collectComptimeMeasurementExpectations(entry.body))}}}return expectations}function validateGenericTypeReference(value,path,issues){if(!isRecord11(value)||typeof value.kind!=="string"){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected a generic type reference."));return}const allowed=value.kind==="xor-oracle"?["kind","inputWidth","outputWidth"]:["kind","width"];validateExactObjectKeys(value,allowed,path,issues,"generic type reference");if(value.kind==="xor-oracle"){if(typeof value.inputWidth!=="string"||typeof value.outputWidth!=="string"){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected string XOR oracle widths."))}}else if(!["qreg","bitvec","clean-ancilla","phase-oracle"].includes(value.kind)||typeof value.width!=="string"){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.unknown,`${path}.kind`,"const","Unknown generic type reference."))}}function validateConstGenericParameter(value,path,issues){if(!isRecord11(value)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected a const generic parameter."));return}validateExactObjectKeys(value,["name","valueType","line"],path,issues,"const generic parameter");if(typeof value.name!=="string"||value.valueType!=="Int"||!Number.isInteger(value.line)||value.line<1){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected a named Int const parameter with a valid source line."))}}function validateGenericParameter(value,path,issues){if(!isRecord11(value)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected a generic parameter."));return}validateExactObjectKeys(value,["name","role","valueType","line"],path,issues,"generic parameter");if(typeof value.name!=="string"||value.role!=="value"&&value.role!=="oracle"||!Number.isInteger(value.line)||value.line<1){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected a valid named generic parameter."))}validateGenericTypeReference(value.valueType,`${path}.valueType`,issues)}function validateGenericOperation(value,path,issues){if(!isRecord11(value)||typeof value.kind!=="string"){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected a generic operation."));return}if(value.kind==="generic-source"){validateExactObjectKeys(value,["kind","source","line"],path,issues,"generic source operation");if(typeof value.source!=="string"||!Number.isInteger(value.line)||value.line<1){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected bounded generic source text and a valid source line."))}return}if(value.kind!=="quantum-modifier"){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.unknown,`${path}.kind`,"const","Unknown generic operation kind."));return}validateExactObjectKeys(value,["kind","modifier","controls","power","powerExpression","operation","line"],path,issues,"quantum modifier");if(!["controlled","adjoint","power"].includes(String(value.modifier))||!Number.isInteger(value.line)||value.line<1){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected a valid bounded quantum modifier."))}if(value.controls!==void 0&&(!Array.isArray(value.controls)||value.controls.length>2||value.controls.some(entry=>typeof entry!=="string"))){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${path}.controls`,"type","Expected at most two explicit control references."))}if(value.power!==void 0&&(!Number.isInteger(value.power)||value.power<1)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${path}.power`,"type","Expected a positive integer modifier power."))}const operation=value.operation;if(!isRecord11(operation)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${path}.operation`,"type","Expected a unitary call."))}else{validateExactObjectKeys(operation,["kind","name","arguments","line"],`${path}.operation`,issues,"unitary call");if(operation.kind!=="unitary-call"||typeof operation.name!=="string"||!Array.isArray(operation.arguments)||operation.arguments.some(entry=>typeof entry!=="string")||!Number.isInteger(operation.line)||operation.line<1){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${path}.operation`,"type","Expected a valid unitary call."))}}}function validateGenericDeclaration(value,path,issues,expectedKind){if(!isRecord11(value)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected a generic declaration."));return}const allowed=expectedKind==="oracle-declaration"?["kind","oracleKind","name","constParameters","parameters","body","line"]:["kind","name","constParameters","parameters","resultType","precondition","body","line"];validateExactObjectKeys(value,allowed,path,issues,"generic declaration");if(value.kind!==expectedKind||typeof value.name!=="string"||!Number.isInteger(value.line)||value.line<1){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type",`Expected a valid ${expectedKind}.`))}if(expectedKind==="oracle-declaration"&&value.oracleKind!=="xor"&&value.oracleKind!=="phase"){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.unknown,`${path}.oracleKind`,"const","Unknown oracle declaration kind."))}if(expectedKind==="algorithm-declaration"&&value.precondition!==void 0&&value.precondition!=="affine"&&value.precondition!=="constant-or-balanced"){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.unknown,`${path}.precondition`,"const","Unknown generic algorithm precondition."))}if(expectedKind==="algorithm-declaration"&&value.resultType!==void 0){validateGenericTypeReference(value.resultType,`${path}.resultType`,issues)}for(const[field,validator]of[["constParameters",validateConstGenericParameter],["parameters",validateGenericParameter],["body",validateGenericOperation]]){const entries=value[field];if(!Array.isArray(entries)||entries.length>NM_QASM3_SIDECAR_MAX_STATEMENTS){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${path}.${field}`,"type",`Expected a bounded ${field} array.`))}else{entries.forEach((entry,index)=>validator(entry,`${path}.${field}[${index}]`,issues))}}}function validateGenericVerification(value,path,issues){if(!isRecord11(value)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected oracle verification metadata."));return}validateExactObjectKeys(value,["declaration","oracleKind","tier","concreteWidths","artifact","artifactHash","tolerance"],path,issues,"oracle verification");if(typeof value.declaration!=="string"||value.oracleKind!=="xor"&&value.oracleKind!=="phase"||value.tier!=="structural"&&value.tier!=="exhaustive"||!Array.isArray(value.concreteWidths)||value.concreteWidths.some(entry=>!Number.isInteger(entry)||entry<1)||typeof value.artifactHash!=="string"||value.tolerance!==void 0&&(typeof value.tolerance!=="number"||!Number.isFinite(value.tolerance))){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected valid oracle verification identity and widths."))}const artifact=value.artifact;if(!isRecord11(artifact)||!["anf","truth-table","sign-vector"].includes(String(artifact.kind))){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${path}.artifact`,"type","Expected a known discrete oracle artifact."));return}const artifactField=artifact.kind==="anf"?"outputs":"values";validateExactObjectKeys(artifact,["kind",artifactField],`${path}.artifact`,issues,"oracle artifact");if(!Array.isArray(artifact[artifactField])){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${path}.artifact.${artifactField}`,"type","Expected a discrete oracle artifact array."))}}function validateGenericInstantiation(value,path,issues){if(!isRecord11(value)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected generic instantiation metadata."));return}validateExactObjectKeys(value,["algorithm","constArguments","oracleArguments","expandedGateCount","verification","sourceMap","standardLibrarySelections","line"],path,issues,"generic instantiation");if(typeof value.algorithm!=="string"||!Array.isArray(value.constArguments)||value.constArguments.some(entry=>!Number.isInteger(entry)||entry<1)||!Array.isArray(value.oracleArguments)||value.oracleArguments.some(entry=>typeof entry!=="string")||!Number.isInteger(value.expandedGateCount)||value.expandedGateCount<0||!Number.isInteger(value.line)||value.line<1){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected a valid bounded generic instantiation."))}if(!Array.isArray(value.verification)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${path}.verification`,"type","Expected oracle verification entries."))}else{value.verification.forEach((entry,index)=>validateGenericVerification(entry,`${path}.verification[${index}]`,issues))}if(!Array.isArray(value.sourceMap)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${path}.sourceMap`,"type","Expected generic source-map entries."))}else{value.sourceMap.forEach((entry,index)=>{const entryPath=`${path}.sourceMap[${index}]`;if(!isRecord11(entry)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,entryPath,"type","Expected a generic source-map entry."));return}validateExactObjectKeys(entry,["generatedLine","sourceLine","declaration"],entryPath,issues,"generic source-map entry");if(!Number.isInteger(entry.generatedLine)||!Number.isInteger(entry.sourceLine)||typeof entry.declaration!=="string"){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,entryPath,"type","Expected valid source-map coordinates."))}})}if(!Array.isArray(value.standardLibrarySelections)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${path}.standardLibrarySelections`,"type","Expected standard-library selections."))}else{value.standardLibrarySelections.forEach((entry,index)=>{const entryPath=`${path}.standardLibrarySelections[${index}]`;if(!isRecord11(entry)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,entryPath,"type","Expected a standard-library selection."));return}validateExactObjectKeys(entry,["packageId","facade","constArguments","concreteExport"],entryPath,issues,"standard-library selection");if(typeof entry.packageId!=="string"||typeof entry.facade!=="string"||!Array.isArray(entry.constArguments)||entry.constArguments.some(item=>!Number.isInteger(item)||item<1)||typeof entry.concreteExport!=="string"){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,entryPath,"type","Expected a valid exact-version standard-library selection."))}})}}function validateGenericOracleModule(value,path,issues){if(!isRecord11(value)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected generic-oracle module metadata."));return}validateExactObjectKeys(value,["experimental","contractVersion","rfc","declarations","algorithms","instantiations"],path,issues,"generic-oracle module metadata");if(value.experimental!==true||value.contractVersion!==NM_GENERIC_ORACLES_CONTRACT_VERSION||value.rfc!==NM_GENERIC_ORACLES_RFC){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.format,path,"const","Expected the NM-RFC-0010 experimental metadata contract."))}for(const[field,kind]of[["declarations","oracle-declaration"],["algorithms","algorithm-declaration"]]){const entries=value[field];if(!Array.isArray(entries)||entries.length>NM_QASM3_SIDECAR_MAX_STATEMENTS){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${path}.${field}`,"type",`Expected a bounded ${field} array.`))}else{entries.forEach((entry,index)=>validateGenericDeclaration(entry,`${path}.${field}[${index}]`,issues,kind))}}if(!Array.isArray(value.instantiations)||value.instantiations.length>NM_QASM3_SIDECAR_MAX_STATEMENTS){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${path}.instantiations`,"type","Expected a bounded generic instantiation array."))}else{value.instantiations.forEach((entry,index)=>validateGenericInstantiation(entry,`${path}.instantiations[${index}]`,issues))}}function validateGenericCircuitDeclaration(value,path,issues){if(!isRecord11(value)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected generic-circuit declaration metadata."));return}validateExactObjectKeys(value,["kind","name","constParameters","parameters","body","line"],path,issues,"generic-circuit declaration");if(value.kind!=="generic-circuit-declaration"||typeof value.name!=="string"||!Number.isInteger(value.line)||value.line<1){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected a named generic-circuit declaration with a valid source line."))}if(!Array.isArray(value.constParameters)||value.constParameters.length>NM_QASM3_SIDECAR_MAX_STATEMENTS){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${path}.constParameters`,"type","Expected bounded const parameters."))}else{value.constParameters.forEach((entry,index)=>validateConstGenericParameter(entry,`${path}.constParameters[${index}]`,issues))}if(!Array.isArray(value.parameters)||value.parameters.length>NM_QASM3_SIDECAR_MAX_STATEMENTS){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${path}.parameters`,"type","Expected bounded generic-circuit parameters."))}else{value.parameters.forEach((entry,index)=>{const entryPath=`${path}.parameters[${index}]`;if(!isRecord11(entry)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,entryPath,"type","Expected a generic-circuit parameter."));return}const register=entry.kind==="register";validateExactObjectKeys(entry,register?["name","kind","widthExpression","line"]:["name","kind","line"],entryPath,issues,"generic-circuit parameter");if(typeof entry.name!=="string"||entry.kind!=="register"&&entry.kind!=="angle"||register&&typeof entry.widthExpression!=="string"||!Number.isInteger(entry.line)||entry.line<1){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,entryPath,"type","Expected a valid QReg width or Angle parameter."))}})}if(!Array.isArray(value.body)||value.body.length>NM_QASM3_SIDECAR_MAX_STATEMENTS){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${path}.body`,"type","Expected a bounded generic-circuit body."))}else{value.body.forEach((entry,index)=>validateGenericOperation(entry,`${path}.body[${index}]`,issues))}}function validateGenericCircuitInstantiation(value,path,issues){if(!isRecord11(value)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected generic-circuit instantiation metadata."));return}validateExactObjectKeys(value,["circuit","constArguments","registerBindings","angleArguments","expandedGateCount","sourceMap","standardLibrarySelections","modifier","line"],path,issues,"generic-circuit instantiation");if(typeof value.circuit!=="string"||!Array.isArray(value.constArguments)||value.constArguments.some(entry=>!Number.isInteger(entry)||entry<0)||!Array.isArray(value.angleArguments)||value.angleArguments.some(entry=>typeof entry!=="string")||!Number.isInteger(value.expandedGateCount)||value.expandedGateCount<0||!Number.isInteger(value.line)||value.line<1){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected a valid bounded generic-circuit instantiation."))}if(!Array.isArray(value.registerBindings)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${path}.registerBindings`,"type","Expected exact register bindings."))}else{value.registerBindings.forEach((entry,index)=>{const entryPath=`${path}.registerBindings[${index}]`;if(!isRecord11(entry)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,entryPath,"type","Expected a register binding."));return}validateExactObjectKeys(entry,["parameter","register","indices"],entryPath,issues,"generic-circuit register binding");if(typeof entry.parameter!=="string"||typeof entry.register!=="string"||!Array.isArray(entry.indices)||entry.indices.some(item=>!Number.isInteger(item)||item<0)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,entryPath,"type","Expected a named register and static non-negative indices."))}})}if(!Array.isArray(value.sourceMap)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${path}.sourceMap`,"type","Expected generic-circuit source-map entries."))}else{value.sourceMap.forEach((entry,index)=>{const entryPath=`${path}.sourceMap[${index}]`;if(!isRecord11(entry)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,entryPath,"type","Expected a source-map entry."));return}validateExactObjectKeys(entry,["generatedLine","sourceLine","declaration"],entryPath,issues,"generic-circuit source-map entry");if(!Number.isInteger(entry.generatedLine)||!Number.isInteger(entry.sourceLine)||typeof entry.declaration!=="string"){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,entryPath,"type","Expected valid source-map coordinates."))}})}if(!Array.isArray(value.standardLibrarySelections)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${path}.standardLibrarySelections`,"type","Expected exact-version standard-library selections."))}else{value.standardLibrarySelections.forEach((entry,index)=>{const entryPath=`${path}.standardLibrarySelections[${index}]`;if(!isRecord11(entry)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,entryPath,"type","Expected a standard-library selection."));return}validateExactObjectKeys(entry,["packageId","facade","constArguments","concreteExport"],entryPath,issues,"generic-circuit standard-library selection");if(typeof entry.packageId!=="string"||entry.facade!=="qft"&&entry.facade!=="iqft"||!Array.isArray(entry.constArguments)||entry.constArguments.some(item=>!Number.isInteger(item)||item<1)||typeof entry.concreteExport!=="string"){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,entryPath,"type","Expected a frozen QFT/IQFT selection."))}})}if(value.modifier!==void 0){validateGenericOperation(value.modifier,`${path}.modifier`,issues)}}function validateGenericCircuitModule(value,path,issues){if(!isRecord11(value)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected generic-circuit module metadata."));return}validateExactObjectKeys(value,["experimental","contractVersion","rfc","declarations","instantiations"],path,issues,"generic-circuit module metadata");if(value.experimental!==true||value.contractVersion!==NM_GENERIC_CIRCUITS_CONTRACT_VERSION||value.rfc!==NM_GENERIC_CIRCUITS_RFC){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.format,path,"const","Expected the NM-RFC-0015 experimental metadata contract."))}if(!Array.isArray(value.declarations)||value.declarations.length>NM_QASM3_SIDECAR_MAX_STATEMENTS){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${path}.declarations`,"type","Expected bounded generic-circuit declarations."))}else{value.declarations.forEach((entry,index)=>validateGenericCircuitDeclaration(entry,`${path}.declarations[${index}]`,issues))}if(!Array.isArray(value.instantiations)||value.instantiations.length>NM_QASM3_SIDECAR_MAX_STATEMENTS){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${path}.instantiations`,"type","Expected bounded generic-circuit instantiations."))}else{value.instantiations.forEach((entry,index)=>validateGenericCircuitInstantiation(entry,`${path}.instantiations[${index}]`,issues))}}function validateIRStatementTree(value,path,issues,state2,nativeOnly=false){if(!Array.isArray(value)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected an IR statement array."));return}for(let index=0;index<value.length;index+=1){state2.count+=1;if(state2.count>NM_QASM3_SIDECAR_MAX_STATEMENTS){if(!issues.some(entry=>entry.code===nmQasm3SidecarDiagnosticCodes.limit)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.limit,path,"maxItems",`Sidecar exceeds the ${NM_QASM3_SIDECAR_MAX_STATEMENTS}-statement limit.`))}return}const statement=value[index];const statementPath=`${path}[${index}]`;if(!isRecord11(statement)||typeof statement.kind!=="string"){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,statementPath,"type","Expected a typed IR statement object."));continue}if(!irStatementKinds.has(statement.kind)||nativeOnly&&!nativeStatementKindSet.has(statement.kind)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.unknown,`${statementPath}.kind`,"const",`Unknown ${nativeOnly?"native ":""}IR statement kind.`));continue}for(const key5 of Object.keys(statement)){if(!irStatementKeys[statement.kind].has(key5)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.unknown,`${statementPath}.${key5}`,"additionalProperties","Unknown IR statement property."))}}if(statement.kind==="qreg"){if(statement.sizeSource!==void 0){validateComptimeIRSource(statement.sizeSource,statement.size,`${statementPath}.sizeSource`,issues)}if(statement.declaredSizeSource!==void 0){validateComptimeIRSource(statement.declaredSizeSource,statement.declaredSize,`${statementPath}.declaredSizeSource`,issues)}}if(statement.kind==="return"&&statement.functionResult!==void 0){if(!isRecord11(statement.functionResult)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${statementPath}.functionResult`,"type","Expected a typed function result object."))}else{const kind=statement.functionResult.kind;const allowed=new Set(kind==="ok"?["kind","expression"]:kind==="error"?["kind","code"]:["kind"]);for(const key5 of Object.keys(statement.functionResult)){if(!allowed.has(key5))issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.unknown,`${statementPath}.functionResult.${key5}`,"additionalProperties","Unknown typed function result property."))}if(kind==="ok"&&!isRecord11(statement.functionResult.expression)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${statementPath}.functionResult.expression`,"type","Expected a typed classical result expression."))}else if(kind==="error"){const code=statement.functionResult.code;if(typeof code!=="string"||!/^[A-Z][A-Z0-9_]*$/u.test(code)||utf8Encoder3.encode(code).byteLength>nmFunctionResultLimits.maximumErrorCodeBytes){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${statementPath}.functionResult.code`,"type","Expected a bounded upper-snake program error code."))}}else if(kind!=="ok"){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.unknown,`${statementPath}.functionResult.kind`,"const","Unknown typed function result kind."))}}}if(statement.kind==="measurement-binding"){if(typeof statement.name!=="string"||!Number.isInteger(statement.width)||statement.width<1||statement.width>NM_FEED_FORWARD_MAX_RESULT_WIDTH||statement.declaredWidth!==void 0&&statement.declaredWidth!==statement.width||!isRecord11(statement.operand)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,statementPath,"type","Expected a bounded measure_all/BitVec measurement binding."))}else{validateExactObjectKeys(statement.operand,["register","start","endInclusive","resolvedIndices"],`${statementPath}.operand`,issues,"measurement slice");const{register,start,endInclusive,resolvedIndices:resolvedIndices2}=statement.operand;if(typeof register!=="string"||!Number.isInteger(start)||!Number.isInteger(endInclusive)||start<0||endInclusive<start||endInclusive-start+1!==statement.width||resolvedIndices2!==void 0&&(!Array.isArray(resolvedIndices2)||resolvedIndices2.length!==statement.width||resolvedIndices2.some(entry=>!Number.isInteger(entry)||entry<0))){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.integrity,`${statementPath}.operand`,"integrity","Measurement slice and declared BitVec width do not agree."))}}}if(statement.kind==="assertBranchInvariant"){if(!isRecord11(statement.target)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${statementPath}.target`,"type","Expected a branch invariant target."))}else{validateExactObjectKeys(statement.target,["register","index","resolvedIndices"],`${statementPath}.target`,issues,"branch invariant target");if(typeof statement.target.register!=="string"||statement.target.index!==void 0&&(!Number.isInteger(statement.target.index)||statement.target.index<0)||!Array.isArray(statement.target.resolvedIndices)||statement.target.resolvedIndices.length<1||statement.target.resolvedIndices.some(entry=>!Number.isInteger(entry)||entry<0)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.integrity,`${statementPath}.target`,"integrity","Branch invariant target must name one or more resolved qubits."))}}}if(statement.kind==="if"){const hasPredicate=statement.predicate!==void 0;const hasLegacyCondition=typeof statement.binding==="string"&&(statement.operator==="=="||statement.operator==="!=")&&Number.isInteger(statement.value);if(hasPredicate===hasLegacyCondition){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,statementPath,"type","Expected exactly one simple condition or one extended predicate."))}if(hasPredicate){validateFeedForwardPredicate(statement.predicate,`${statementPath}.predicate`,issues,{count:0,terms:0},0)}}if(["observe","test","snapshot","until"].includes(statement.kind)){validateIRStatementTree(statement.body,`${statementPath}.body`,issues,state2)}else if(statement.kind==="if"){validateIRStatementTree(statement.body,`${statementPath}.body`,issues,state2);if(statement.elseBody!==void 0)validateIRStatementTree(statement.elseBody,`${statementPath}.elseBody`,issues,state2)}else if(statement.kind==="match"||statement.kind==="property"){if(!Array.isArray(statement.cases)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${statementPath}.cases`,"type","Expected an IR case array."))}else{statement.cases.forEach((entry,caseIndex)=>{if(!isRecord11(entry)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${statementPath}.cases[${caseIndex}]`,"type","Expected an IR case object."))}else{const caseKeys=new Set(statement.kind==="match"?["pattern","body","line"]:["value","body","line"]);for(const key5 of Object.keys(entry)){if(!caseKeys.has(key5))issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.unknown,`${statementPath}.cases[${caseIndex}].${key5}`,"additionalProperties","Unknown IR case property."))}validateIRStatementTree(entry.body,`${statementPath}.cases[${caseIndex}].body`,issues,state2)}})}}}}function hasFeedForwardIRCarrier(value,allowTypedCollectionMeasurement=false){if(!Array.isArray(value))return false;for(const statement of value){if(!isRecord11(statement))continue;if(statement.kind==="measurement-binding"&&!allowTypedCollectionMeasurement||statement.kind==="assertBranchInvariant"||statement.kind==="if"&&statement.predicate!==void 0){return true}if(hasFeedForwardIRCarrier(statement.body,allowTypedCollectionMeasurement)||hasFeedForwardIRCarrier(statement.elseBody,allowTypedCollectionMeasurement)){return true}if(Array.isArray(statement.cases)){for(const entry of statement.cases){if(isRecord11(entry)&&hasFeedForwardIRCarrier(entry.body,allowTypedCollectionMeasurement)){return true}}}}return false}function validateTypedCollectionModule(value,path,issues){if(!isRecord11(value)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected typed-collection module metadata."));return}validateExactObjectKeys(value,["experimental","contractVersion","shots","result"],path,issues,"typed-collection module");if(value.experimental!==true||value.contractVersion!==NM_TYPED_COLLECTION_CONTRACT_VERSION||!Number.isInteger(value.shots)||value.shots<1||value.shots>playgroundRuntimeLimits.maxSampleShots){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected a supported bounded typed-collection contract."))}if(!isRecord11(value.result)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${path}.result`,"type","Expected typed-collection result metadata."));return}validateExactObjectKeys(value.result,["binding","width","resolvedIndices"],`${path}.result`,issues,"typed-collection result");if(typeof value.result.binding!=="string"||!Number.isInteger(value.result.width)||value.result.width<1||!Array.isArray(value.result.resolvedIndices)||value.result.resolvedIndices.length!==value.result.width||value.result.resolvedIndices.some(index=>!Number.isInteger(index)||index<0)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`${path}.result`,"type","Expected one resolved fixed-width BitVec result."))}}function validateFeedForwardModule(value,path,issues){if(!isRecord11(value)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected feed-forward module metadata."));return}for(const key5 of Object.keys(value)){if(!new Set(["experimental","contractVersion"]).has(key5)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.unknown,`${path}.${key5}`,"additionalProperties","Unknown feed-forward module property."))}}if(value.experimental!==true||value.contractVersion!==NM_FEED_FORWARD_CONTRACT_VERSION){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"const",`Expected experimental feed-forward contract ${NM_FEED_FORWARD_CONTRACT_VERSION}.`))}}function validateFeedForwardPredicate(value,path,issues,state2,depth3){state2.count+=1;if(state2.count>NM_FEED_FORWARD_MAX_PREDICATE_TOKENS||depth3>NM_FEED_FORWARD_MAX_PREDICATE_DEPTH){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.limit,path,"maxItems","Feed-forward predicate exceeds its node or nesting budget."));return}if(!isRecord11(value)||typeof value.kind!=="string"){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected a typed feed-forward predicate."));return}if(value.kind==="compare"){state2.terms+=1;if(state2.terms>NM_FEED_FORWARD_MAX_PREDICATE_TERMS){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.limit,path,"maxItems","Feed-forward predicate exceeds its comparison-term budget."));return}}const allowed=value.kind==="compare"?new Set(["kind","result","bit","operator","literal"]):value.kind==="not"?new Set(["kind","operand"]):value.kind==="and"||value.kind==="or"?new Set(["kind","left","right"]):void 0;if(!allowed){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.unknown,`${path}.kind`,"const","Unknown feed-forward predicate kind."));return}for(const key5 of Object.keys(value)){if(!allowed.has(key5)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.unknown,`${path}.${key5}`,"additionalProperties","Unknown feed-forward predicate property."))}}if(value.kind==="not"){validateFeedForwardPredicate(value.operand,`${path}.operand`,issues,state2,depth3+1);return}if(value.kind==="and"||value.kind==="or"){validateFeedForwardPredicate(value.left,`${path}.left`,issues,state2,depth3+1);validateFeedForwardPredicate(value.right,`${path}.right`,issues,state2,depth3+1);return}if(typeof value.result!=="string"||!/^[\p{L}_][\p{L}\p{N}_]*$/u.test(value.result)||value.bit!==void 0&&(!Number.isInteger(value.bit)||value.bit<0)||value.operator!=="=="&&value.operator!=="!="||!isRecord11(value.literal)||typeof value.literal.bits!=="string"||!/^[01]+$/u.test(value.literal.bits)||value.literal.bits.length>NM_FEED_FORWARD_MAX_RESULT_WIDTH||typeof value.literal.source!=="string"){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,path,"type","Expected a bounded comparison over a lossless bit literal."));return}const reparsed=parseNMClassicalPredicate(`${value.result} ${value.operator} ${value.literal.source}`);if(!reparsed.success||reparsed.predicate.kind!=="compare"||reparsed.predicate.literal.bits!==value.literal.bits){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.integrity,`${path}.literal`,"integrity","Feed-forward literal source and canonical bits disagree."))}}function validateComptimeStructureModule(moduleValue,statementsValue,path,issues){const comptimeConstants=moduleValue.comptimeConstants;const requiresCarrier=isRecord11(comptimeConstants)&&Array.isArray(comptimeConstants.uses)&&comptimeConstants.uses.some(use=>isRecord11(use)&&(use.position==="vector-param-size"||use.position==="repeat-count"||use.position==="for-start"||use.position==="for-end"));if(moduleValue.comptimeStructures===void 0){if(requiresCarrier){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.format,path,"required","Expanded compile-time structures require closed provenance in sidecar 0.2 or newer."))}return}const program={functions:[],statements:Array.isArray(statementsValue)?statementsValue:[],...moduleValue.comptimeConstants!==void 0?{comptimeConstants:moduleValue.comptimeConstants}:{},comptimeStructures:moduleValue.comptimeStructures};for(const carrierIssue of validateNMComptimeStructureProvenance(program)){const unknownField=carrierIssue.code==="schema"&&carrierIssue.message==="is an unknown field";const requiredField=carrierIssue.code==="schema"&&carrierIssue.message==="is required";issues.push(sidecarIssue(unknownField?nmQasm3SidecarDiagnosticCodes.unknown:carrierIssue.code==="schema"?nmQasm3SidecarDiagnosticCodes.type:nmQasm3SidecarDiagnosticCodes.integrity,`${path}${carrierIssue.path==="$"?"":carrierIssue.path.slice(1)}`,unknownField?"additionalProperties":requiredField?"required":carrierIssue.code==="schema"?"type":"integrity",`Invalid compile-time structure provenance: ${carrierIssue.message}.`))}}function validateQASM3Sidecar(value){if(!isRecord11(value)){return{valid:false,issues:[sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,"$","type","Expected a QASM3 sidecar object.")]}}const versionDescriptor=Object.getOwnPropertyDescriptor(value,"version");if(!versionDescriptor||!("value"in versionDescriptor))return{valid:false,issues:[sidecarIssue(nmQasm3SidecarDiagnosticCodes.version,"$.version","const","Expected an own data property for the sidecar version.")]};if(value.version===NM_QASM3_CLASSICAL_FUNCTION_SIDECAR_VERSION)return validateClassicalFunctionQASM3Sidecar(value,validateQASM3Sidecar);if(value.version===NM_QASM3_COMPUTE_APPLY_SIDECAR_VERSION)return validateNMComputeApplyQASM3Sidecar(value);const issues=[];const supportedVersion=value.version===NM_QASM3_SIDECAR_LEGACY_VERSION||value.version===NM_QASM3_SIDECAR_PREVIOUS_VERSION||value.version===NM_QASM3_SIDECAR_VERSION;const allowedModuleKeys=value.version===NM_QASM3_SIDECAR_LEGACY_VERSION?irModuleKeysV01:value.version===NM_QASM3_SIDECAR_PREVIOUS_VERSION?irModuleKeysV02:irModuleKeys;for(const key5 of Object.keys(value)){if(!sidecarRootKeys.has(key5))issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.unknown,`$.${key5}`,"additionalProperties","Unknown QASM3 sidecar property."))}if(value.format!==NM_QASM3_SIDECAR_FORMAT)issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.format,"$.format","const",`Expected "${NM_QASM3_SIDECAR_FORMAT}".`));if(!supportedVersion)issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.version,"$.version","const",`Expected a supported sidecar version (${nmQasm3SidecarCompatibilityPolicy.permanentReaderVersions.join(", ")}).`));if(value.carrier!=="openqasm-3-preview")issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.format,"$.carrier","const","Expected the openqasm-3-preview carrier."));if(!isRecord11(value.module))issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,"$.module","required","Expected module metadata."));else for(const key5 of Object.keys(value.module))if(!allowedModuleKeys.has(key5))issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.unknown,`$.module.${key5}`,"additionalProperties","Unknown sidecar module property."));if(isRecord11(value.module)&&value.module.functionResults!==void 0){validateFunctionResultModule(value.module.functionResults,"$.module.functionResults",issues)}if(isRecord11(value.module)&&value.module.feedForward!==void 0){validateFeedForwardModule(value.module.feedForward,"$.module.feedForward",issues)}if(isRecord11(value.module)&&value.module.typedCollection!==void 0){validateTypedCollectionModule(value.module.typedCollection,"$.module.typedCollection",issues)}if(isRecord11(value.module)&&value.module.genericOracles!==void 0){validateGenericOracleModule(value.module.genericOracles,"$.module.genericOracles",issues)}if(isRecord11(value.module)&&value.module.genericCircuits!==void 0){validateGenericCircuitModule(value.module.genericCircuits,"$.module.genericCircuits",issues)}if(isRecord11(value.module)&&value.module.comptimeConstants!==void 0){validateComptimeModule(value.module.comptimeConstants,"$.module.comptimeConstants",issues)}if(isRecord11(value.module)&&value.version!==NM_QASM3_SIDECAR_LEGACY_VERSION){validateComptimeStructureModule(value.module,isRecord11(value.ir)?value.ir.statements:void 0,"$.module.comptimeStructures",issues)}if(!Array.isArray(value.nativeStatementKinds)||value.nativeStatementKinds.some(entry=>typeof entry!=="string"||!nativeStatementKindSet.has(entry))){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.unknown,"$.nativeStatementKinds","type","Expected known native N/M statement kinds."))}else if(new Set(value.nativeStatementKinds).size!==value.nativeStatementKinds.length){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.integrity,"$.nativeStatementKinds","integrity","Native statement kinds must be unique and encounter ordered."))}if(value.execution!==void 0){if(!isRecord11(value.execution)||Object.keys(value.execution).length!==1||!Object.prototype.hasOwnProperty.call(value.execution,"feedForwardBranchRecord")||value.execution.feedForwardBranchRecord===void 0){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,"$.execution","type","Expected exact feed-forward execution evidence."))}else{const branchValidation=validateNMFeedForwardBranchRecord(value.execution.feedForwardBranchRecord);if(!branchValidation.valid){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`$.execution.feedForwardBranchRecord${branchValidation.path==="$"?"":branchValidation.path.slice(1)}`,"type",branchValidation.reason))}else if(!isRecord11(value.module)||value.module.feedForward===void 0||(!isRecord11(value.ir)||!isRecord11(value.ir.module)||value.ir.module.feedForward===void 0)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.format,"$.execution.feedForwardBranchRecord","required","Execution evidence requires NM-RFC-0011 negotiation metadata."))}else if(isRecord11(value.ir)&&isRecord11(value.ir.module)&&value.ir.module.seed!=null&&value.ir.module.seed!==Number(branchValidation.record.seed)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.integrity,"$.execution.feedForwardBranchRecord.seed","integrity","Execution seed does not match embedded source metadata."))}}}validateIRStatementTree(value.nativeStatements,"$.nativeStatements",issues,{count:0},true);if(!isRecord11(value.ir)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,"$.ir","required","Expected the complete N/M IR document."))}else{for(const key5 of Object.keys(value.ir)){if(!irRootKeys.has(key5))issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.unknown,`$.ir.${key5}`,"additionalProperties","Unknown N/M IR root property."))}if(value.ir.format!=="nm-json-ir"||value.ir.version!=="0.1"){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.format,"$.ir","const","Expected nm-json-ir@0.1."))}if(!isRecord11(value.ir.module)||!Number.isInteger(value.ir.qubits)||value.ir.qubits<0){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,"$.ir","type","Expected valid IR module and qubit metadata."))}if(isRecord11(value.ir.module)){for(const key5 of Object.keys(value.ir.module))if(!allowedModuleKeys.has(key5))issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.unknown,`$.ir.module.${key5}`,"additionalProperties","Unknown IR module property."))}if(isRecord11(value.ir.module)&&value.ir.module.functionResults!==void 0){validateFunctionResultModule(value.ir.module.functionResults,"$.ir.module.functionResults",issues)}if(isRecord11(value.ir.module)&&value.ir.module.feedForward!==void 0){validateFeedForwardModule(value.ir.module.feedForward,"$.ir.module.feedForward",issues)}if(isRecord11(value.ir.module)&&value.ir.module.typedCollection!==void 0){validateTypedCollectionModule(value.ir.module.typedCollection,"$.ir.module.typedCollection",issues)}if(isRecord11(value.ir.module)&&value.ir.module.genericOracles!==void 0){validateGenericOracleModule(value.ir.module.genericOracles,"$.ir.module.genericOracles",issues)}if(isRecord11(value.ir.module)&&value.ir.module.genericCircuits!==void 0){validateGenericCircuitModule(value.ir.module.genericCircuits,"$.ir.module.genericCircuits",issues)}if(isRecord11(value.ir.module)&&value.ir.module.comptimeConstants!==void 0){validateComptimeModule(value.ir.module.comptimeConstants,"$.ir.module.comptimeConstants",issues)}if(isRecord11(value.ir.module)&&value.version!==NM_QASM3_SIDECAR_LEGACY_VERSION){validateComptimeStructureModule(value.ir.module,value.ir.statements,"$.ir.module.comptimeStructures",issues)}for(const field of["constants","params","resources"]){if(!isRecord11(value.ir[field]))issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,`$.ir.${field}`,"type",`Expected IR ${field} object.`))}if(!Array.isArray(value.ir.diagnostics))issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.type,"$.ir.diagnostics","type","Expected IR diagnostics array."));validateIRStatementTree(value.ir.statements,"$.ir.statements",issues,{count:0});if(hasFeedForwardIRCarrier(value.ir.statements,isRecord11(value.ir.module)&&value.ir.module.typedCollection!==void 0)&&(!isRecord11(value.ir.module)||value.ir.module.feedForward===void 0)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.format,"$.ir.module.feedForward","required","Feed-forward IR carriers require explicit NM-RFC-0011 module negotiation metadata."))}}if(issues.length>0||!isRecord11(value.ir)||!Array.isArray(value.nativeStatements)||!Array.isArray(value.nativeStatementKinds)){return{valid:false,issues}}const sidecar=value;const derivedNative=collectNativeStatements(sidecar.ir.statements);const derivedKinds=[...new Set(derivedNative.map(statement=>statement.kind))];if(JSON.stringify(sidecar.module)!==JSON.stringify(sidecar.ir.module)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.integrity,"$.module","integrity","Sidecar module metadata must equal the embedded IR module."))}if(JSON.stringify(sidecar.nativeStatements)!==JSON.stringify(derivedNative)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.integrity,"$.nativeStatements","integrity","Native statements must equal the projection derived from embedded IR."))}if(JSON.stringify(sidecar.nativeStatementKinds)!==JSON.stringify(derivedKinds)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.integrity,"$.nativeStatementKinds","integrity","Native statement kinds must match the embedded IR projection."))}const derivedComptimeQRegUses=collectComptimeQRegUses(sidecar.ir.statements);const carriedComptimeQRegUses=sidecar.ir.module.comptimeConstants?.uses.filter(({position})=>position==="qreg-type"||position==="qreg-allocation");if(derivedComptimeQRegUses.length>0&&carriedComptimeQRegUses===void 0){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.format,"$.ir.module.comptimeConstants","required","Compile-time IR sources require explicit NM-RFC-0014 module metadata."))}else if(carriedComptimeQRegUses!==void 0&&JSON.stringify(carriedComptimeQRegUses)!==JSON.stringify(derivedComptimeQRegUses)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.integrity,"$.ir.module.comptimeConstants.uses","integrity","Compile-time qreg use metadata must equal the embedded IR source projection."))}const comptimeMetadata=sidecar.ir.module.comptimeConstants;if(comptimeMetadata){const validateModuleCount=(position,expected,effectiveValue=requested=>requested)=>{const matches=comptimeMetadata.uses.filter(entry=>entry.position===position);if(expected==null&&matches.length!==0||expected!=null&&(matches.length!==1||effectiveValue(matches[0].foldedValue)!==expected)){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.integrity,"$.ir.module.comptimeConstants.uses","integrity",`Compile-time ${position} metadata must agree with embedded IR module execution metadata.`))}};validateModuleCount("sample-count",sidecar.ir.module.sampleShots,requested=>Math.min(requested,playgroundRuntimeLimits.maxSampleShots));validateModuleCount("collect-count",sidecar.ir.module.typedCollection?.shots);for(const expectation of collectComptimeMeasurementExpectations(sidecar.ir.statements)){for(const[position,expected]of[["bitvec-width",expectation.width],["slice-start",expectation.start],["slice-end",expectation.end]]){const matches=comptimeMetadata.uses.filter(entry=>entry.position===position&&entry.line===expectation.line);if(matches.length!==1||matches[0].foldedValue!==expected){issues.push(sidecarIssue(nmQasm3SidecarDiagnosticCodes.integrity,"$.ir.module.comptimeConstants.uses","integrity",`Compile-time ${position} metadata on source line ${expectation.line} must agree with the measurement IR.`))}}}}return issues.length>0?{valid:false,issues}:{valid:true,sidecar,issues:[]}}function serializeQASM3Sidecar(sidecar){const validation=validateQASM3Sidecar(sidecar);if(!validation.valid)throw new Error(validation.issues.map(entry=>`${entry.code} ${entry.path}: ${entry.message}`).join(" "));return`${JSON.stringify(validation.sidecar,null,2)}
|
|
1514
1514
|
`}function collectNativeStatements(statements){const native=[];for(const statement of statements){if(nativeStatementKindSet.has(statement.kind)){native.push(statement)}if(statement.kind==="if"){native.push(...collectNativeStatements(statement.body));if(statement.elseBody){native.push(...collectNativeStatements(statement.elseBody))}}else if(statement.kind==="match"){statement.cases.forEach(matchCase=>native.push(...collectNativeStatements(matchCase.body)))}else if(statement.kind==="property"){statement.cases.forEach(propertyCase=>native.push(...collectNativeStatements(propertyCase.body)))}else if(statement.kind==="snapshot"){native.push(...collectNativeStatements(statement.body))}}return native}function createSidecar2(ir,feedForwardBranchRecord){const nativeStatements=collectNativeStatements(ir.statements);return{format:NM_QASM3_SIDECAR_FORMAT,version:ir.version==="0.2"?NM_QASM3_CLASSICAL_FUNCTION_SIDECAR_VERSION:NM_QASM3_SIDECAR_VERSION,carrier:"openqasm-3-preview",module:ir.module,nativeStatementKinds:[...new Set(nativeStatements.map(statement=>statement.kind))],nativeStatements,ir,...ir.version==="0.2"?{classicalFunctionSemantics:nmQasm3ClassicalFunctionSemantics}:{},...feedForwardBranchRecord?{execution:{feedForwardBranchRecord:cloneNMFeedForwardBranchRecord(feedForwardBranchRecord)}}:{}}}function exportToQASM3(code,options={}){const{conformance="preview",trainedParams,feedForwardBranchRecord,...parseOptions}=options;const sourceParsed=parseNMCode(code,parseOptions);if(sourceParsed.program.measurementGrouping||sourceParsed.program.hamiltonianEvolution){const diagnostic6=getBlockingDiagnostic(sourceParsed.diagnostics)??hamiltonianCarrierDiagnostic(sourceParsed.program),error=formatDiagnostic(diagnostic6);return{success:false,error,diagnostic:diagnostic6,issues:[{code:nmQasm3ExportDiagnosticCodes.source,message:error}]}}if(!getBlockingDiagnostic(sourceParsed.diagnostics)&&sourceParsed.program.computeApply)return exportNMComputeApplyQASM3(code,options);const sourceDiagnostic=getBlockingDiagnostic(sourceParsed.diagnostics)??(sourceParsed.program.parameterGroups?parameterGroupDiagnostic("unsupportedCarrier"):void 0);if(sourceDiagnostic){const error=formatDiagnostic(sourceDiagnostic);if(sourceDiagnostic.code==="NM-TYPE-004"){return{success:false,error,diagnostic:sourceDiagnostic,issues:[{code:nmQasm3ExportDiagnosticCodes.empty,message:error}]}}return{success:false,error,diagnostic:sourceDiagnostic,issues:[{code:nmQasm3ExportDiagnosticCodes.source,message:error}]}}if(sourceParsed.program.statements.some(statement=>statement.kind==="train"&&statement.customLoss)){return{success:false,error:NM_CUSTOM_LOSS_EXPORT_UNSUPPORTED,issues:[{code:nmQasm3ExportDiagnosticCodes.training,message:NM_CUSTOM_LOSS_EXPORT_UNSUPPORTED}]}}const mainResult=findNMMainResultStatement(sourceParsed.program.statements);const dynamicIndex=findNMMainDynamicAccessStatement(sourceParsed.program.statements);const imperative=findNMMainImperativeStatement(sourceParsed.program.statements)??dynamicIndex??mainResult;if(imperative){const diagnostic6=createDiagnostic({code:"NM-CFN-011",severity:"error",message:mainResult?NM_MAIN_RESULT_UNSUPPORTED:dynamicIndex?NM_MAIN_DYNAMIC_INDEX_UNSUPPORTED:NM_MAIN_IMPERATIVE_TRANSFORM_UNSUPPORTED,line:imperative.line});const error=formatDiagnostic(diagnostic6);return{success:false,error,diagnostic:diagnostic6,issues:[{code:nmQasm3ExportDiagnosticCodes.invariant,message:error}]}}const typedConditional=flattenStatements5(sourceParsed.program.statements).find(statement=>statement.kind==="if"&&statement.condition);if(typedConditional){const diagnostic6=createDiagnostic({code:"NM-CFN-011",severity:"error",line:typedConditional.line,message:"OpenQASM 3 export cannot preserve typed Bool conditional execution.",hint:"Keep the N/M source or JSON IR carrier."});const error=formatDiagnostic(diagnostic6);return{success:false,error,diagnostic:diagnostic6,issues:[{code:nmQasm3ExportDiagnosticCodes.invariant,message:error}]}}if(sourceParsed.program.qecExperiments?.experiments.length){const qecDiagnostic=createDiagnostic({code:nmQECExperimentDiagnosticCodes.integrity,severity:"error",message:"OpenQASM 3 export cannot preserve NM-RFC-0016 QEC experiment traces.",hint:"Keep the exact JSON IR carrier; a versioned OpenQASM sidecar projection is not published yet.",line:sourceParsed.program.qecExperiments.experiments[0].line});const error=formatDiagnostic(qecDiagnostic);return{success:false,error,diagnostic:qecDiagnostic,issues:[{code:nmQasm3ExportDiagnosticCodes.invariant,message:error}]}}if(sourceParsed.program.composedNoise){const noiseDiagnostic=createDiagnostic({code:nmComposedNoiseDiagnosticCodes.integrity,severity:"error",message:"OpenQASM 3 export cannot preserve NM-RFC-0017 ordered scoped-noise profiles.",hint:"Keep the exact JSON IR carrier; a versioned OpenQASM sidecar projection is not published yet.",line:sourceParsed.program.composedNoise.profiles[0]?.line});const error=formatDiagnostic(noiseDiagnostic);return{success:false,error,diagnostic:noiseDiagnostic,issues:[{code:nmQasm3ExportDiagnosticCodes.invariant,message:error}]}}if(feedForwardBranchRecord){const branchValidation=validateNMFeedForwardBranchRecord(feedForwardBranchRecord);if(!branchValidation.valid){const error=`Invalid feed-forward branch record at ${branchValidation.path}: ${branchValidation.reason}`;return{success:false,error,issues:[{code:nmQasm3ExportDiagnosticCodes.invariant,message:error}]}}if(!sourceParsed.program.feedForward){const error="Feed-forward execution evidence requires explicit NM-RFC-0011 source negotiation.";return{success:false,error,issues:[{code:nmQasm3ExportDiagnosticCodes.invariant,message:error}]}}if(sourceParsed.program.seed!=null&&sourceParsed.program.seed!==Number(branchValidation.record.seed)){const error="Feed-forward execution seed does not match source @seed metadata.";return{success:false,error,issues:[{code:nmQasm3ExportDiagnosticCodes.invariant,message:error}]}}}const hasTrainBlock=sourceParsed.program.statements.some(statement=>statement.kind==="train");const hasClassicalFunctions=Boolean(sourceParsed.program.classicalFunctions);const hasTraining=hasTrainBlock||Boolean(sourceParsed.program.optimize);if(hasClassicalFunctions&&hasTraining)return{success:false,error:NM_HELPER_TRAINING_EXPORT_UNSUPPORTED,issues:[{code:nmQasm3ExportDiagnosticCodes.training,message:NM_HELPER_TRAINING_EXPORT_UNSUPPORTED}]};let carrierCode=hasClassicalFunctions?lowerNMSourceFunctions(code,parseOptions).source:code;if(hasClassicalFunctions){const angles=projectFunctionGateAngles(sourceParsed.program.statements);const projected=angles&&projectFunctionAngleSource(carrierCode,angles.bindings);if(projected===void 0)return{success:false,error:"NM-CFN-011: The quantum carrier requires gate angles and Result propagation resolvable without measurement or runtime errors.",issues:[{code:nmQasm3ExportDiagnosticCodes.invariant,message:"NM-CFN-011: The quantum carrier requires gate angles and Result propagation resolvable without measurement or runtime errors."}]};carrierCode=projected}const carrierParseOptions=hasClassicalFunctions?classicalFunctionCarrierOptions(parseOptions):parseOptions;if(hasTraining){if(!hasCompleteNMTrainedExportParams(trainedParams,Object.keys(sourceParsed.params))){const error=NM_TRAINING_EXPORT_REQUIRED;return{success:false,error,issues:[{code:nmQasm3ExportDiagnosticCodes.training,message:error}]}}carrierCode=prepareNMTrainedExportSource(code,trainedParams);const trained=parseNMCode(carrierCode,carrierParseOptions);if(getBlockingDiagnostic(trained.diagnostics)||Object.entries(trainedParams).some(([name2,value])=>trained.params[name2]!==value))return{success:false,error:NM_TRAINING_EXPORT_REQUIRED,issues:[{code:nmQasm3ExportDiagnosticCodes.training,message:NM_TRAINING_EXPORT_REQUIRED}]}}let loweringTrace=[];if(conformance==="strict"){const lowered=transpileNMSource(stripCarrierTargetAnnotations(carrierCode),{target:"openqasm3-stdgates",parseOptions:carrierParseOptions});if(!lowered.success){const detail=lowered.unsupportedGates.map(gate=>`${gate.gate} at line ${gate.line}`).join(", ");const message=detail?`Strict OpenQASM 3 lowering failed: ${detail}.`:lowered.verification.status==="failed"?lowered.verification.reason:"Strict OpenQASM 3 lowering failed.";const diagnostic6=sourceParsed.program.genericOracles?createDiagnostic({code:nmGenericOracleDiagnosticCodes.lowering,severity:"error",message,hint:"Choose a target that can carry every expanded gate or reduce the concrete generic width.",line:sourceParsed.program.genericOracles.instantiations[0]?.line}):sourceParsed.program.genericCircuits?createDiagnostic({code:nmGenericCircuitDiagnosticCodes.integrity,severity:"error",message,hint:"Choose a target that can carry every expanded gate or reduce the concrete generic width.",line:sourceParsed.program.genericCircuits.instantiations[0]?.line}):void 0;return{success:false,error:diagnostic6?formatDiagnostic(diagnostic6):message,...diagnostic6?{diagnostic:diagnostic6}:{},issues:[{code:nmQasm3ExportDiagnosticCodes.lowering,message}]}}carrierCode=lowered.source;loweringTrace=lowered.trace}const parsed=parseNMCode(carrierCode,carrierParseOptions);const diagnostic5=getBlockingDiagnostic(parsed.diagnostics);if(diagnostic5){const error=formatDiagnostic(diagnostic5);return{success:false,error,diagnostic:diagnostic5,issues:[{code:nmQasm3ExportDiagnosticCodes.invariant,message:error}]}}if(parsed.numQubits===0){const error="No qubits to export.";return{success:false,error,issues:[{code:nmQasm3ExportDiagnosticCodes.empty,message:error}]}}const irExport=exportToNMIR(code,parseOptions);if(!irExport.success){const error=irExport.error??"Could not preserve source IR in the QASM3 sidecar.";return{success:false,error,diagnostic:irExport.diagnostic,issues:[{code:nmQasm3ExportDiagnosticCodes.invariant,message:error}]}}const sidecar=irExport.ir?createSidecar2(irExport.ir,feedForwardBranchRecord):void 0;if(sidecar){const sidecarValidation=validateQASM3Sidecar(sidecar);if(!sidecarValidation.valid){const first=sidecarValidation.issues[0];const error=`${first.code} ${first.path}: ${first.message}`;return{success:false,error,issues:[{code:nmQasm3ExportDiagnosticCodes.invariant,message:error}]}}}const bitByBinding=new Map;const bitWidthByBinding=new Map;const usedBits=new Set;let unboundCount=0;const addBinding=(name2,width=1)=>{const existing=bitByBinding.get(name2);if(existing){bitWidthByBinding.set(name2,Math.max(bitWidthByBinding.get(name2)??1,width));return existing}const base2=sanitizeIdent2(name2);let candidate=base2;let suffix=2;while(usedBits.has(candidate)){candidate=`${base2}_${suffix++}`}bitByBinding.set(name2,candidate);bitWidthByBinding.set(name2,width);usedBits.add(candidate);return candidate};for(const statement of flattenStatements5(parsed.program.statements)){if(statement.kind==="measurement"&&statement.binding){addBinding(statement.binding)}else if(statement.kind==="measurement-binding"){addBinding(statement.name,statement.width)}else if(statement.kind==="syndrome"){addBinding(statement.binding)}else if(statement.kind==="bitAssign"){addBinding(statement.name)}else if(statement.kind==="if"&&statement.predicate){getNMClassicalPredicateResults(statement.predicate).forEach(addBinding)}else if(statement.kind==="measurement"){unboundCount+=1}}const lines=["OPENQASM 3.0;",'include "stdgates.inc";'];if(hasClassicalFunctions){lines.push("// N/M classical functions and results require the v0.4 sidecar and N/M runtime; this QASM executes quantum operations only.")}if(sidecar&&sidecar.nativeStatements.length>0){lines.push(`// nm sidecar: ${sidecar.format}@${sidecar.version}`)}if(hasTrainBlock){lines.push("// nm train block (stripped; preserved in sidecar); circuit uses applied final parameters")}if(parsed.program.target){lines.push(`// target: ${parsed.program.target}`)}if(parsed.program.constraints){lines.push(`// constraints: ${JSON.stringify(parsed.program.constraints)}`)}const targetCapabilityEvidence=sourceParsed.program.targetCapabilityConstraints?.evidence??parsed.program.targetCapabilityConstraints?.evidence;if(targetCapabilityEvidence){lines.push(`// target capabilities: ${JSON.stringify(targetCapabilityEvidence)}`)}if(sourceParsed.program.functionResults){lines.push(`// function result: ${JSON.stringify(sourceParsed.program.functionResults)}`)}if(sourceParsed.program.genericOracles){lines.push(`// generic oracles: ${JSON.stringify({contractVersion:sourceParsed.program.genericOracles.contractVersion,instantiations:sourceParsed.program.genericOracles.instantiations.map(instantiation=>({algorithm:instantiation.algorithm,constArguments:instantiation.constArguments,oracleArguments:instantiation.oracleArguments,verification:instantiation.verification.map(verification=>({declaration:verification.declaration,tier:verification.tier,artifactHash:verification.artifactHash}))}))})}`)}if(parsed.program.noise){lines.push(`// noise: ${parsed.program.noise.model} p=${parsed.program.noise.probability}`)}if(parsed.program.mitigation){lines.push(`// mitigation: ${parsed.program.mitigation.model}`)}if(parsed.program.seed!=null){lines.push(`// seed: ${parsed.program.seed}`)}if(parsed.program.expectationShots!=null){lines.push(`// expectation_shots: ${parsed.program.expectationShots}`)}if(sourceParsed.program.optimize){lines.push(`// optimize: method=${sourceParsed.program.optimize.optimizer} steps=${sourceParsed.program.optimize.steps} learningRate=${sourceParsed.program.optimize.learningRate} objective=${sourceParsed.program.optimize.objective}`)}if(parsed.program.estimate){const estimateFields=[`code=${parsed.program.estimate.code}`,`distance=${parsed.program.estimate.distance}`,parsed.program.estimate.targetError!=null?`target_error=${formatMetadataNumber2(parsed.program.estimate.targetError)}`:void 0,parsed.program.estimate.physicalGateTimeNs!=null?`physical_gate_time_ns=${formatMetadataNumber2(parsed.program.estimate.physicalGateTimeNs)}`:void 0].filter(field=>Boolean(field));lines.push(`// estimate: ${estimateFields.join(" ")}`)}for(const goal of parsed.program.goals??[]){lines.push(`// goal: ${goal.text}`)}for(const outcome of parsed.program.outcomes??[]){lines.push(`// outcome: ${outcome.text}`)}for(const rubric of parsed.program.rubrics??[]){lines.push(`// rubric: ${rubric.text}${rubric.weight!=null?` (weight: ${rubric.weight})`:""}`)}for(const misconception of parsed.program.misconceptions??[]){lines.push(`// misconception: ${misconception.text}`)}for(const quiz of parsed.program.quizzes??[]){lines.push(`// quiz: ${quiz.question}${quiz.answer?` (answer: ${quiz.answer})`:""}`)}for(const lab of parsed.program.labs??[]){lines.push(`// lab: ${lab.id}${lab.minutes!=null?` (${lab.minutes} min)`:""}`)}for(const challenge of parsed.program.challenges??[]){lines.push(`// challenge: ${challenge.id}${challenge.difficulty?` (${challenge.difficulty})`:""}`)}for(const dataset of parsed.program.datasets??[]){lines.push(`// dataset: ${dataset.id}${dataset.split?` (${dataset.split})`:""}`)}for(const checkpoint of parsed.program.checkpoints??[]){lines.push(`// checkpoint: ${checkpoint.text}${checkpoint.kind?` (${checkpoint.kind})`:""}`)}for(const hint of parsed.program.hints??[]){lines.push(`// hint: ${hint.text}`)}for(const concept of parsed.program.concepts??[]){lines.push(`// concept: ${concept.name}`)}if(parsed.program.level){lines.push(`// level: ${parsed.program.level.value}`)}for(const prereq of parsed.program.prerequisites??[]){lines.push(`// prereq: ${prereq.name}`)}if(parsed.program.sampleShots!=null){lines.push(`// sample_shots: ${parsed.program.sampleShots}`)}if(parsed.program.typedCollection){lines.push(`// typed_collection: Array<BitVec<${parsed.program.typedCollection.result.width}>,${parsed.program.typedCollection.shots}> binding=${parsed.program.typedCollection.result.binding}`)}lines.push("",`qubit[${parsed.numQubits}] q;`);for(const bit of bitByBinding.values()){const sourceName=[...bitByBinding.entries()].find(([,emitted])=>emitted===bit)?.[0];const width=sourceName?bitWidthByBinding.get(sourceName)??1:1;lines.push(width===1?`bit ${bit};`:`bit[${width}] ${bit};`)}if(unboundCount>0){lines.push(`bit[${unboundCount}] meas;`)}lines.push("");let unboundIndex=0;const emitMeasure=(statement,indent="")=>{const dest=statement.binding?addBinding(statement.binding):`meas[${unboundIndex++}]`;const target2=qubit2(statement.target);const basis=statement.basis??"Z";if(basis==="X"){lines.push(`${indent}h ${target2};`)}else if(basis==="Y"){lines.push(`${indent}sdg ${target2};`);lines.push(`${indent}h ${target2};`)}lines.push(`${indent}${dest} = measure ${target2};`);if(basis==="X"){lines.push(`${indent}h ${target2};`)}else if(basis==="Y"){lines.push(`${indent}h ${target2};`);lines.push(`${indent}s ${target2};`)}};const emitMeasurementBinding=(statement,indent="")=>{const dest=addBinding(statement.name,statement.width);const resolved=statement.operand.resolvedIndices;for(let offset=0;offset<statement.width;offset+=1){const sourceIndex2=statement.operand.start+offset;const target2=resolved?.[offset]!=null?`q[${resolved[offset]}]`:`${statement.operand.register}[${sourceIndex2}]`;lines.push(`${indent}${dest}[${offset}] = measure ${target2};`)}};const emitExpectationComment=(statement,indent="")=>{const prefix2=statement.binding?`expect ${statement.binding} =`:"expect";lines.push(`${indent}// nm ${prefix2} ${formatTerms2(statement.terms)}`)};const emitExpectationAssertionComment=(statement,indent="")=>{lines.push(`${indent}// nm assert expectation ${formatTerms2(statement.terms)} ${statement.operator} ${formatAngle4(statement.expected)}${statement.tolerance!=null?` tolerance ${formatAngle4(statement.tolerance)}`:""}`)};const emit=(statements,indent="")=>{for(const statement of statements){if(statement.kind==="explain"){lines.push(`${indent}// nm explain ${statement.text}`);continue}if(statement.kind==="gate"){const text=gateToQASM3(statement);if(text){lines.push(`${indent}${text}`)}continue}if(statement.kind==="measurement"){emitMeasure(statement,indent);continue}if(statement.kind==="measurement-binding"){emitMeasurementBinding(statement,indent);continue}if(statement.kind==="assertBranchInvariant"){lines.push(`${indent}// nm assert_branch_invariant(${statement.target.register}${statement.target.index!=null?`[${statement.target.index}]`:""})`);continue}if(statement.kind==="bitAssign"){lines.push(`${indent}// nm bit ${statement.name} = ${formatBitExpression2(statement.expression)}`);continue}if(statement.kind==="classicalDecl"){lines.push(`${indent}// nm classical ${statement.name}: ${declaredTypeLabel(statement.valueType)} = ${formatNMTypedClassicalExpression(statement.expression)}`);continue}if(statement.kind==="syndrome"){lines.push(`${indent}// nm syndrome ${statement.binding} = ${statement.factors.map(formatFactor2).join(" ")}`);continue}if(statement.kind==="assertExpectation"){emitExpectationAssertionComment(statement,indent);continue}if(statement.kind==="assertExpectationRange"){lines.push(`${indent}// nm assert expectation ${formatTerms2(statement.terms)} in [${formatAngle4(statement.minimum)}, ${formatAngle4(statement.maximum)}]`);continue}if(statement.kind==="assertProbability"){lines.push(`${indent}// nm assert probability(|${statement.state}>) ${statement.operator} ${formatAngle4(statement.expected)}${statement.tolerance!=null?` tolerance ${formatAngle4(statement.tolerance)}`:""}`);continue}if(statement.kind==="assertEntangled"){lines.push(`${indent}// nm assert ${formatEntanglementAssertion2(statement)}`);continue}if(statement.kind==="assertFidelity"){lines.push(`${indent}// nm assert fidelity("${statement.target}") ${statement.operator} ${formatAngle4(statement.expected)}`);continue}if(statement.kind==="assertEquivalent"){lines.push(`${indent}// nm assert equivalent("${statement.target}")${statement.phasePolicy==="global"?" up_to_phase":""}`);continue}if(statement.kind==="assertResource"){lines.push(`${indent}// nm assert ${statement.metric} ${statement.operator} ${formatAngle4(statement.expected)}`);continue}if(statement.kind==="expectation"){emitExpectationComment(statement,indent);continue}if(statement.kind==="metric"){if(statement.expression.kind==="probability"){lines.push(`${indent}// nm metric ${statement.name} = probability(|${statement.expression.state}>)`)}else{lines.push(`${indent}// nm metric ${statement.name} = expect ${formatTerms2(statement.expression.terms)}`)}continue}if(statement.kind==="gradient"){lines.push(`${indent}// nm gradient ${statement.binding} = d ${statement.target} / d ${statement.parameter}`);continue}if(statement.kind==="encode"){lines.push(`${indent}// nm encode sample_row(${statement.row}) -> ${statement.register} method=${statement.method}`);continue}if(statement.kind==="train"){lines.push(`${indent}// nm train block (stripped; preserved in sidecar)`);continue}if(statement.kind==="observe"){lines.push(`${indent}// nm observe ${statement.name} {`);emit(statement.body,`${indent}// `);lines.push(`${indent}// nm }`);continue}if(statement.kind==="test"){lines.push(`${indent}// nm test "${statement.name}" {`);emit(statement.body,indent);lines.push(`${indent}// nm }`);continue}if(statement.kind==="property"){const values2=statement.cases.map(propertyCase=>formatAngle4(propertyCase.value)).join(", ");lines.push(`${indent}// nm property "${statement.name}" forall ${statement.parameter} in [${values2}] {`);for(const propertyCase of statement.cases){lines.push(`${indent}// case ${statement.parameter}=${formatAngle4(propertyCase.value)}`);emit(propertyCase.body,`${indent}// `)}lines.push(`${indent}// nm }`);continue}if(statement.kind==="snapshot"){lines.push(`${indent}// nm snapshot "${statement.name}" {`);emit(statement.body,`${indent}// `);lines.push(`${indent}// nm }`);continue}if(statement.kind==="show"){lines.push(`${indent}// nm show ${statement.subject}`);continue}if(statement.kind==="reset"){lines.push(`${indent}reset ${qubit2(statement.target)};`);continue}if(statement.kind==="barrier"){lines.push(`${indent}barrier q;`);continue}if(statement.kind==="if"){if(statement.condition)throw new Error("Typed Bool condition escaped OpenQASM export validation.");const condition=statement.predicate?formatNMClassicalPredicateForQASM3(statement.predicate,addBinding,name2=>bitWidthByBinding.get(name2)??1):`${addBinding(statement.binding)} ${statement.operator} ${statement.value}`;lines.push(`${indent}if (${condition}) {`);emit(statement.body,`${indent} `);if(statement.elseBody&&statement.elseBody.length>0){lines.push(`${indent}} else {`);emit(statement.elseBody,`${indent} `)}lines.push(`${indent}}`);continue}if(statement.kind==="until"){lines.push(`${indent}// nm until (${statement.binding} ${statement.operator} ${statement.value}) max ${statement.maxIterations} {`);emit(statement.body,`${indent}// `);lines.push(`${indent}// nm }`);continue}if(statement.kind==="match"){for(const matchCase of statement.cases){const condition=statement.bindings.map((binding,index)=>`${addBinding(binding)} == ${matchCase.pattern[index]}`).join(" && ");lines.push(`${indent}if (${condition}) {`);emit(matchCase.body,`${indent} `);lines.push(`${indent}}`)}continue}if(statement.kind==="return"){lines.push(`${indent}// nm return ${statement.expression}`)}}};emit(parsed.program.statements);return{success:true,qasm:`${lines.join("\n")}
|
|
1515
|
-
`,sidecar,...sidecar?{sidecarJson:serializeQASM3Sidecar(sidecar)}:{},conformance:{standard:"OpenQASM 3.0",mode:conformance,syntax:conformance==="strict"?"strict":"extended",extensionGates:conformance==="strict"?[]:[...new Set(flattenStatements5(parsed.program.statements).filter(statement=>statement.kind==="gate").map(gate=>gate.gate).filter(gate=>["iSWAP","RXX","RYY","RZZ"].includes(gate)))].sort(),loweringTrace},issues:[]}}var NM_MCP_PROTOCOL_VERSION="2025-06-18";var NM_MCP_CONTRACT_VERSION="2026-07-26";var NM_MCP_TOOL_SCHEMA_VERSION="0.1";var NM_MCP_MAX_CODE_BYTES=2e5;var NM_MCP_MAX_SOURCE_URI_BYTES=2048;var NM_MCP_MAX_QUERY_BYTES=256;var NM_MCP_MAX_TOOL_DATA_BYTES=4e5;var experimentalArguments={experimentalHamiltonianEvolution:"hamiltonianEvolution",experimentalMeasurementGrouping:"measurementGrouping",experimentalComputeApply:"computeApply",experimentalModuleVisibility:"moduleVisibility",experimentalExactImports:"exactImports",experimentalPropertyAssertions:"propertyAssertions",experimentalQmlTrainingControls:"qmlTrainingControls",experimentalTypedClassicalValues:"typedClassicalValues",experimentalTargetCapabilityConstraints:"targetCapabilityConstraints",experimentalClassicalFunctions:"classicalFunctions",experimentalFunctionResults:"functionResults",experimentalGenericOracles:"genericOracles",experimentalFeedForward:"feedForward",experimentalTypedCollection:"typedCollection",experimentalComptimeConst:"comptimeConst",experimentalGenericCircuits:"genericCircuits",experimentalQecExperiments:"qecExperiments",experimentalComposedNoise:"composedNoise",experimentalParameterGroups:"parameterGroups"};var experimentalOptInSchema={...Object.fromEntries(Object.entries(experimentalArguments).map(([key5,capability])=>[key5,{...booleanSchema(),default:readNMFeatureDefault(capability,void 0)}])),locale:enumSchema(["en","tr"])};var workspaceSchema={workspaceModules:{type:"object",maxProperties:NM_FUNCTION_WORKSPACE_MAX_MODULES,propertyNames:{pattern:"^[A-Za-z_]\\w{0,127}$"},additionalProperties:stringSchema(0,32768)}};var stepBudgetSchema={stepBudget:{...numberSchema(1,NM_CLASSICAL_STEP_BUDGET_HOST_CAP),description:"Deterministic classical step budget for this run (host option, not language syntax)."}};var measurementAllocationSchema={measurementAllocation:{oneOf:[objectSchema({method:enumSchema(["fixed"])},["method"]),objectSchema({method:enumSchema(["adaptive","covariance"]),pilotShots:{...numberSchema(2,32),default:8}},["method"])],description:"Grouped training only. Adaptive pilots and held-out estimation share the total @shots_budget. / Yaln\u0131z gruplanm\u0131\u015F e\u011Fitim; pilotlar ve ayr\u0131 de\u011Ferlendirme toplam b\xFCt\xE7eyi payla\u015F\u0131r."}};var toolSchemas={nm_parse:objectSchema({code:stringSchema(1,NM_MCP_MAX_CODE_BYTES),...workspaceSchema,...experimentalOptInSchema},["code"]),nm_run:objectSchema({code:stringSchema(1,NM_MCP_MAX_CODE_BYTES),seed:numberSchema(Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER),measurementTimeoutMs:numberSchema(1,1e4),...stepBudgetSchema,...workspaceSchema,...experimentalOptInSchema},["code"]),nm_train:objectSchema({code:stringSchema(1,NM_MCP_MAX_CODE_BYTES),steps:numberSchema(1,100),optimizer:enumSchema(["gd","momentum","adam","spsa","qng"]),qng:nmQNGToolSchema,...measurementAllocationSchema,targetAccuracy:{...objectSchema({absoluteError:{type:"number",exclusiveMinimum:0,maximum:1e6}},["absoluteError"]),description:"Grouped final-cost precision at 95% confidence; never increases shots or certifies convergence. / Gruplanm\u0131\u015F son maliyet hassasiyeti; b\xFCt\xE7eyi art\u0131rmaz, yak\u0131nsamay\u0131 belgelemez."},...workspaceSchema,...experimentalOptInSchema},["code"]),nm_export:objectSchema({code:stringSchema(1,NM_MCP_MAX_CODE_BYTES),target:enumSchema(["ir","qasm2","qasm3","qiskit","cirq","pennylane"]),...workspaceSchema,...experimentalOptInSchema},["code","target"]),nm_import_ir:objectSchema({ir:stringSchema(1,NM_MCP_MAX_TOOL_DATA_BYTES),...workspaceSchema,...experimentalOptInSchema},["ir"]),nm_optimize:objectSchema({code:stringSchema(1,NM_MCP_MAX_CODE_BYTES),...workspaceSchema,...experimentalOptInSchema},["code"]),nm_examples:objectSchema({query:stringSchema(0,NM_MCP_MAX_QUERY_BYTES)}),nm_test:objectSchema({code:stringSchema(1,NM_MCP_MAX_CODE_BYTES),dryRun:{...booleanSchema(),description:"Return static work-budget estimates without simulation."},uri:{...stringSchema(1,NM_MCP_MAX_SOURCE_URI_BYTES),description:"Source identity label only; never read from disk or fetched."},...stepBudgetSchema,...workspaceSchema,...experimentalOptInSchema},["code"]),nm_capabilities:objectSchema({locale:enumSchema(["en","tr"]),status:enumSchema(["stable","preview","experimental"])})};var nmMCPTools=[tool("nm_parse","Parse N/M source and return diagnostics and document symbols."),tool("nm_run","Execute a guarded N/M simulation."),tool("nm_train","Train parameters in N/M source."),tool("nm_export","Export N/M to source-preserving IR, QASM or a framework. / N/M kayna\u011F\u0131n\u0131 koruyan IR, QASM veya \xE7at\u0131 kodu aktar\u0131m\u0131."),tool("nm_import_ir","Validate Hamiltonian IR with caller permissions and recover original source. / \xC7a\u011F\u0131ran izinleriyle Hamiltonian IR do\u011Frulay\u0131n ve \xF6zg\xFCn kayna\u011F\u0131 al\u0131n."),tool("nm_optimize","Optimize source while preserving behavior."),tool("nm_examples","Search runnable examples and std.ml packages."),tool("nm_test","Execute bounded N/M named tests, properties, and snapshots and return a versioned source-bound report. Experimental capabilities use the same opt-ins as nm_run."),tool("nm_capabilities","Inspect the shared N/M capability, risk, opt-in, and execution-boundary catalog.")];function tool(name2,description){return{name:name2,title:name2.replace("nm_","N/M "),description,inputSchema:toolSchemas[name2],annotations:{readOnlyHint:name2==="nm_parse"||name2==="nm_examples"||name2==="nm_capabilities",destructiveHint:false,idempotentHint:name2!=="nm_run"&&name2!=="nm_train"&&name2!=="nm_test",openWorldHint:false},_meta:{"nm/contractVersion":NM_MCP_CONTRACT_VERSION,"nm/toolSchemaVersion":NM_MCP_TOOL_SCHEMA_VERSION}}}function objectSchema(properties,required=[]){return{$schema:"https://json-schema.org/draft/2020-12/schema",type:"object",properties,additionalProperties:false,...required.length?{required}:{}}}function stringSchema(minLength,maxLength){return{type:"string",minLength,maxLength}}function numberSchema(minimum,maximum){return{type:"integer",...minimum===void 0?{}:{minimum},...maximum===void 0?{}:{maximum}}}function booleanSchema(){return{type:"boolean"}}function enumSchema(values2){return{type:"string",enum:values2}}var NM_DOCTOR_REPORT_FORMAT="nm-toolchain-doctor";var NM_DOCTOR_REPORT_VERSION="0.1";var nmDoctorExpectedVersions={packageVersion:nmVersionManifest.packageVersion,languageVersion:nmVersionManifest.languageVersion,stability:nmVersionManifest.stability,protocols:{cliContract:NM_CLI_CONTRACT_VERSION,lspContract:NM_LSP_CONTRACT_VERSION,mcpContract:NM_MCP_CONTRACT_VERSION,mcpProtocol:NM_MCP_PROTOCOL_VERSION,mcpToolSchema:NM_MCP_TOOL_SCHEMA_VERSION},capabilities:nmVersionManifest.capabilities};var componentIds=["cli","core","language-server","mcp","vscode"];var componentProtocols={cli:["cliContract"],core:[],"language-server":["lspContract"],mcp:["mcpContract","mcpProtocol","mcpToolSchema"],vscode:[]};function createNMDoctorReport(runtime){const components3=componentIds.map(id=>{const supplied=runtime?.components.filter(item=>item.id===id)??[];const observation=supplied[0]??{id,availability:"not-observed",source:"none",reason:"runtime-discovery-not-provided"};const checks=[];if(supplied.length>1)checks.push({code:"NM-DOCTOR-005",field:"duplicate-component"});if(observation.availability==="unavailable"){checks.push({code:"NM-DOCTOR-004",field:"availability"})}if(observation.availability==="observed"&&id!=="vscode"){for(const field of["packageVersion","languageVersion","corePackageVersion"]){const expected=field==="languageVersion"?nmDoctorExpectedVersions.languageVersion:nmDoctorExpectedVersions.packageVersion;const actual=observation[field];if(actual===void 0){checks.push({code:"NM-DOCTOR-005",field,expected})}else if(actual!==expected)checks.push({code:"NM-DOCTOR-001",field,expected,actual})}if(id==="language-server"||id==="mcp"){const expected=id==="language-server"?nmDoctorExpectedVersions.languageVersion:nmDoctorExpectedVersions.packageVersion;const actual=observation.serverVersion;if(actual!==expected)checks.push({code:actual===void 0?"NM-DOCTOR-005":"NM-DOCTOR-001",field:"serverVersion",expected,...actual!==void 0?{actual}:{}})}for(const field of componentProtocols[id]){const expected=nmDoctorExpectedVersions.protocols[field];const actual=observation.protocols?.[field];if(actual!==expected)checks.push({code:actual===void 0?"NM-DOCTOR-005":"NM-DOCTOR-002",field:`protocols.${field}`,expected,...actual!==void 0?{actual}:{}})}if(observation.capabilities){const ids=new Set([...Object.keys(nmDoctorExpectedVersions.capabilities),...Object.keys(observation.capabilities)]);for(const capability of[...ids].sort()){const expected=nmDoctorExpectedVersions.capabilities[capability];const actual=observation.capabilities[capability];if(expected!==actual)checks.push({code:"NM-DOCTOR-003",field:`capabilities.${capability}`,...expected!==void 0?{expected}:{},...actual!==void 0?{actual}:{}})}}else if(id!=="cli")checks.push({code:"NM-DOCTOR-005",field:"capabilities"})}return{id,availability:observation.availability,source:observation.source,...observation.packageVersion!==void 0?{packageVersion:observation.packageVersion}:{},...observation.languageVersion!==void 0?{languageVersion:observation.languageVersion}:{},...observation.corePackageVersion!==void 0?{corePackageVersion:observation.corePackageVersion}:{},...observation.serverVersion!==void 0?{serverVersion:observation.serverVersion}:{},...observation.protocols?{protocols:sortRecord(observation.protocols)}:{},...observation.capabilities?{capabilities:sortRecord(observation.capabilities)}:{},...observation.evidence?{evidence:[...observation.evidence]}:{},...observation.reason?{reason:observation.reason}:{},compatibility:checks.length>0?"mismatch":observation.availability==="observed"&&id!=="vscode"?"compatible":"not-checked",checks}});const failed2=components3.some(({checks})=>checks.length>0);return{format:NM_DOCTOR_REPORT_FORMAT,version:NM_DOCTOR_REPORT_VERSION,status:failed2?"incompatible":components3.some(({compatibility})=>compatibility==="not-checked")?"partial":"compatible",exitCode:failed2?1:0,scope:"loaded-runtime-and-locally-resolvable-packages",expected:nmDoctorExpectedVersions,components:components3}}function sortRecord(value){return Object.fromEntries(Object.entries(value).sort(([a],[b])=>a.localeCompare(b,"en")))}function formatNMDoctorReport(report,locale="en"){const labels=locale==="tr"?{heading:"N/M ara\xE7 zinciri kontrol\xFC",language:"Dil",package:"Paket",compatible:"uyumlu",partial:"k\u0131smen g\xF6zlendi",incompatible:"uyumsuz",observed:"g\xF6zlendi","not-installed":"yerel pakette bulunamad\u0131","not-observed":"g\xF6zlenmedi",unavailable:"y\xFCklenemedi","not-checked":"kontrol edilmedi",mismatch:"uyu\u015Fmazl\u0131k",expected:"beklenen",actual:"g\xF6zlenen",protocols:"Protokoller",capabilities:"Yetenekler",scope:"Kapsam: y\xFCkl\xFC \xE7al\u0131\u015Fma zaman\u0131 ve yerel paketler. \xC7al\u0131\u015Fan LSP/MCP sunucular\u0131 ve VS Code kurulumu sorgulanmad\u0131."}:{heading:"N/M toolchain doctor",language:"Language",package:"Package",compatible:"compatible",partial:"partially observed",incompatible:"incompatible",observed:"observed","not-installed":"not found in local packages","not-observed":"not observed",unavailable:"unavailable","not-checked":"not checked",mismatch:"mismatch",expected:"expected",actual:"observed",protocols:"Protocols",capabilities:"Capabilities",scope:"Scope: loaded runtime and local packages. Running LSP/MCP servers and VS Code installation were not queried."};return[`${labels.heading}: ${labels[report.status]}`,`${labels.language}: ${report.expected.languageVersion}; ${labels.package}: ${report.expected.packageVersion} (${report.expected.stability})`,...report.components.flatMap(item=>[`${item.id}: ${labels[item.availability]}; ${labels[item.compatibility]}${item.packageVersion?`; package=${item.packageVersion}`:""}${item.languageVersion?`; language=${item.languageVersion}`:""} (${item.source})`,...item.protocols?[` ${labels.protocols}: ${Object.entries(item.protocols).map(([key5,value])=>`${key5}=${value}`).join(", ")}`]:[],...item.capabilities?[` ${labels.capabilities}: ${Object.keys(item.capabilities).length}`]:[],...item.checks.map(check=>` ${check.code} ${check.field}: ${labels.expected}=${check.expected??"?"}; ${labels.actual}=${check.actual??"?"}`)]),labels.scope].join("\n")}var xml=value=>String(value).replace(/[^\u0009\u000a\u000d\u0020-\ud7ff\ue000-\ufffd\u{10000}-\u{10ffff}]/gu,"\uFFFD").replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,""").replace(/'/gu,"'");function serializeNMTestJUnitReport(report,filePath=report.source.uri){const errors=report.diagnostics.filter(item=>item.severity==="error");const failedChecks=report.checks.filter(check=>!check.passed);const owners=errors.map(item=>{const candidates=failedChecks.filter(check=>check.diagnosticCodes.includes(item.code)&&item.line!=null&&item.line>=check.range.startLine&&item.line<=check.range.endLine&&(item.sourceId?item.sourceId===check.uri||item.sourceId===filePath&&check.uri===report.source.uri:check.uri===report.source.uri));return candidates.length===1?candidates[0]:void 0});const unassigned=errors.filter((_,index)=>!owners[index]);const executionError=!report.passed&&report.summary.failed===0;const count=report.checks.length+(executionError?1:0);const cases=report.checks.map(check=>{const messages6=errors.filter((_,index)=>owners[index]===check);const failure12=check.passed?"":`<failure type="${xml(check.diagnosticCodes[0]??"NM-TEST-FAILED")}" message="${xml(messages6[0]?.message??`N/M ${check.kind} "${check.name}" failed.`)}">${xml(messages6.map(item=>`${item.code}: ${item.message}`).join("\n")||check.diagnosticCodes.join(", "))}</failure>`;return` <testcase name="${xml(check.name)}" classname="${xml(check.kind)}" file="${xml(filePath)}" line="${check.line}">${failure12}</testcase>`});if(executionError)cases.push(` <testcase name="N/M execution" classname="runtime" file="${xml(filePath)}"><error type="${xml(errors[0]?.code??"NM-TEST-EMPTY")}" message="${xml(errors[0]?.message??"No check completed successfully.")}">${xml(errors.map(item=>`${item.code}: ${item.message}`).join("\n"))}</error></testcase>`);const context=!executionError&&unassigned.length?`
|
|
1515
|
+
`,sidecar,...sidecar?{sidecarJson:serializeQASM3Sidecar(sidecar)}:{},conformance:{standard:"OpenQASM 3.0",mode:conformance,syntax:conformance==="strict"?"strict":"extended",extensionGates:conformance==="strict"?[]:[...new Set(flattenStatements5(parsed.program.statements).filter(statement=>statement.kind==="gate").map(gate=>gate.gate).filter(gate=>["iSWAP","RXX","RYY","RZZ"].includes(gate)))].sort(),loweringTrace},issues:[]}}var NM_MCP_PROTOCOL_VERSION="2025-06-18";var NM_MCP_CONTRACT_VERSION="2026-07-26";var NM_MCP_TOOL_SCHEMA_VERSION="0.1";var NM_MCP_MAX_CODE_BYTES=2e5;var NM_MCP_MAX_SOURCE_URI_BYTES=2048;var NM_MCP_MAX_QUERY_BYTES=256;var NM_MCP_MAX_TOOL_DATA_BYTES=4e5;var experimentalArguments={experimentalHamiltonianEvolution:"hamiltonianEvolution",experimentalMeasurementGrouping:"measurementGrouping",experimentalComputeApply:"computeApply",experimentalModuleVisibility:"moduleVisibility",experimentalExactImports:"exactImports",experimentalPropertyAssertions:"propertyAssertions",experimentalQmlTrainingControls:"qmlTrainingControls",experimentalTypedClassicalValues:"typedClassicalValues",experimentalTargetCapabilityConstraints:"targetCapabilityConstraints",experimentalClassicalFunctions:"classicalFunctions",experimentalFunctionResults:"functionResults",experimentalGenericOracles:"genericOracles",experimentalFeedForward:"feedForward",experimentalTypedCollection:"typedCollection",experimentalComptimeConst:"comptimeConst",experimentalGenericCircuits:"genericCircuits",experimentalQecExperiments:"qecExperiments",experimentalComposedNoise:"composedNoise",experimentalParameterGroups:"parameterGroups"};var experimentalOptInSchema={...Object.fromEntries(Object.entries(experimentalArguments).map(([key5,capability])=>[key5,{...booleanSchema(),default:readNMFeatureDefault(capability,void 0)}])),locale:enumSchema(["en","tr"])};var workspaceSchema={workspaceModules:{type:"object",maxProperties:NM_FUNCTION_WORKSPACE_MAX_MODULES,propertyNames:{pattern:"^[A-Za-z_]\\w{0,127}$"},additionalProperties:stringSchema(0,32768)}};var stepBudgetSchema={stepBudget:{...numberSchema(1,NM_CLASSICAL_STEP_BUDGET_HOST_CAP),description:"Deterministic classical step budget for this run (host option, not language syntax)."}};var measurementAllocationSchema={measurementAllocation:{oneOf:[objectSchema({method:enumSchema(["fixed"])},["method"]),objectSchema({method:enumSchema(["adaptive","covariance"]),pilotShots:{...numberSchema(2,32),default:8}},["method"])],description:"Grouped training only. Adaptive pilots and held-out estimation share the total @shots_budget. / Yaln\u0131z gruplanm\u0131\u015F e\u011Fitim; pilotlar ve ayr\u0131 de\u011Ferlendirme toplam b\xFCt\xE7eyi payla\u015F\u0131r."}};var toolSchemas={nm_parse:objectSchema({code:stringSchema(1,NM_MCP_MAX_CODE_BYTES),...workspaceSchema,...experimentalOptInSchema},["code"]),nm_run:objectSchema({code:stringSchema(1,NM_MCP_MAX_CODE_BYTES),seed:numberSchema(Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER),measurementTimeoutMs:numberSchema(1,1e4),...stepBudgetSchema,...workspaceSchema,...experimentalOptInSchema},["code"]),nm_train:objectSchema({code:stringSchema(1,NM_MCP_MAX_CODE_BYTES),steps:numberSchema(1,100),optimizer:enumSchema(["gd","momentum","adam","spsa","qng"]),qng:nmQNGToolSchema,...measurementAllocationSchema,targetAccuracy:{...objectSchema({absoluteError:{type:"number",exclusiveMinimum:0,maximum:1e6}},["absoluteError"]),description:"Grouped final-cost precision at 95% confidence; never increases shots or certifies convergence. / Gruplanm\u0131\u015F son maliyet hassasiyeti; b\xFCt\xE7eyi art\u0131rmaz, yak\u0131nsamay\u0131 belgelemez."},...workspaceSchema,...experimentalOptInSchema},["code"]),nm_export:objectSchema({code:stringSchema(1,NM_MCP_MAX_CODE_BYTES),target:enumSchema(["ir","qasm2","qasm3","qiskit","cirq","pennylane"]),...workspaceSchema,...experimentalOptInSchema},["code","target"]),nm_import_ir:objectSchema({ir:stringSchema(1,NM_MCP_MAX_TOOL_DATA_BYTES),...workspaceSchema,...experimentalOptInSchema},["ir"]),nm_optimize:objectSchema({code:stringSchema(1,NM_MCP_MAX_CODE_BYTES),...workspaceSchema,...experimentalOptInSchema},["code"]),nm_examples:objectSchema({query:stringSchema(0,NM_MCP_MAX_QUERY_BYTES)}),nm_test:objectSchema({code:stringSchema(1,NM_MCP_MAX_CODE_BYTES),dryRun:{...booleanSchema(),description:"Return static work-budget estimates without simulation."},uri:{...stringSchema(1,NM_MCP_MAX_SOURCE_URI_BYTES),description:"Source identity label only; never read from disk or fetched."},...stepBudgetSchema,...workspaceSchema,...experimentalOptInSchema},["code"]),nm_capabilities:objectSchema({locale:enumSchema(["en","tr"]),status:enumSchema(["stable","preview","experimental"])})};var nmMCPTools=[tool("nm_parse","Parse N/M source and return diagnostics and document symbols."),tool("nm_run","Execute a guarded N/M simulation."),tool("nm_train","Train parameters in N/M source."),tool("nm_export","Export N/M to source-preserving IR, QASM or a framework. / N/M kayna\u011F\u0131n\u0131 koruyan IR, QASM veya \xE7at\u0131 kodu aktar\u0131m\u0131."),tool("nm_import_ir","Validate Hamiltonian IR with caller permissions and recover original source. / \xC7a\u011F\u0131ran izinleriyle Hamiltonian IR do\u011Frulay\u0131n ve \xF6zg\xFCn kayna\u011F\u0131 al\u0131n."),tool("nm_optimize","Optimize source while preserving behavior."),tool("nm_examples","Search runnable examples and std.ml packages."),tool("nm_test","Execute bounded N/M named tests, properties, and snapshots and return a versioned source-bound report. Experimental capabilities use the same opt-ins as nm_run."),tool("nm_capabilities","Inspect the shared N/M capability, risk, opt-in, and execution-boundary catalog.")];function tool(name2,description){return{name:name2,title:name2.replace("nm_","N/M "),description,inputSchema:toolSchemas[name2],annotations:{readOnlyHint:name2==="nm_parse"||name2==="nm_examples"||name2==="nm_capabilities",destructiveHint:false,idempotentHint:name2!=="nm_run"&&name2!=="nm_train"&&name2!=="nm_test",openWorldHint:false},_meta:{"nm/contractVersion":NM_MCP_CONTRACT_VERSION,"nm/toolSchemaVersion":NM_MCP_TOOL_SCHEMA_VERSION}}}function objectSchema(properties,required=[]){return{$schema:"https://json-schema.org/draft/2020-12/schema",type:"object",properties,additionalProperties:false,...required.length?{required}:{}}}function stringSchema(minLength,maxLength){return{type:"string",minLength,maxLength}}function numberSchema(minimum,maximum){return{type:"integer",...minimum===void 0?{}:{minimum},...maximum===void 0?{}:{maximum}}}function booleanSchema(){return{type:"boolean"}}function enumSchema(values2){return{type:"string",enum:values2}}var NM_DOCTOR_REPORT_FORMAT="nm-toolchain-doctor";var NM_DOCTOR_REPORT_VERSION="0.1";var nmDoctorExpectedVersions={packageVersion:nmVersionManifest.packageVersion,languageVersion:nmVersionManifest.languageVersion,stability:nmVersionManifest.stability,protocols:{cliContract:NM_CLI_CONTRACT_VERSION,lspContract:NM_LSP_CONTRACT_VERSION,mcpContract:NM_MCP_CONTRACT_VERSION,mcpProtocol:NM_MCP_PROTOCOL_VERSION,mcpToolSchema:NM_MCP_TOOL_SCHEMA_VERSION},capabilities:nmVersionManifest.capabilities};var componentIds=["cli","core","language-server","mcp","vscode"];var componentProtocols={cli:["cliContract"],core:[],"language-server":["lspContract"],mcp:["mcpContract","mcpProtocol","mcpToolSchema"],vscode:[]};function createNMDoctorReport(runtime){const components3=componentIds.map(id=>{const supplied=runtime?.components.filter(item=>item.id===id)??[];const observation=supplied[0]??{id,availability:"not-observed",source:"none",reason:"runtime-discovery-not-provided"};const checks=[];if(supplied.length>1)checks.push({code:"NM-DOCTOR-005",field:"duplicate-component"});if(observation.availability==="unavailable"){checks.push({code:"NM-DOCTOR-004",field:"availability"})}if(observation.availability==="observed"&&id!=="vscode"){for(const field of["packageVersion","languageVersion","corePackageVersion"]){const expected=field==="languageVersion"?nmDoctorExpectedVersions.languageVersion:nmDoctorExpectedVersions.packageVersion;const actual=observation[field];if(actual===void 0){checks.push({code:"NM-DOCTOR-005",field,expected})}else if(actual!==expected&&!(id==="cli"&&field==="packageVersion"&&compatibleCLIPatch(actual,expected))){checks.push({code:"NM-DOCTOR-001",field,expected,actual})}}if(id==="language-server"||id==="mcp"){const expected=id==="language-server"?nmDoctorExpectedVersions.languageVersion:nmDoctorExpectedVersions.packageVersion;const actual=observation.serverVersion;if(actual!==expected)checks.push({code:actual===void 0?"NM-DOCTOR-005":"NM-DOCTOR-001",field:"serverVersion",expected,...actual!==void 0?{actual}:{}})}for(const field of componentProtocols[id]){const expected=nmDoctorExpectedVersions.protocols[field];const actual=observation.protocols?.[field];if(actual!==expected)checks.push({code:actual===void 0?"NM-DOCTOR-005":"NM-DOCTOR-002",field:`protocols.${field}`,expected,...actual!==void 0?{actual}:{}})}if(observation.capabilities){const ids=new Set([...Object.keys(nmDoctorExpectedVersions.capabilities),...Object.keys(observation.capabilities)]);for(const capability of[...ids].sort()){const expected=nmDoctorExpectedVersions.capabilities[capability];const actual=observation.capabilities[capability];if(expected!==actual)checks.push({code:"NM-DOCTOR-003",field:`capabilities.${capability}`,...expected!==void 0?{expected}:{},...actual!==void 0?{actual}:{}})}}else if(id!=="cli")checks.push({code:"NM-DOCTOR-005",field:"capabilities"})}return{id,availability:observation.availability,source:observation.source,...observation.packageVersion!==void 0?{packageVersion:observation.packageVersion}:{},...observation.languageVersion!==void 0?{languageVersion:observation.languageVersion}:{},...observation.corePackageVersion!==void 0?{corePackageVersion:observation.corePackageVersion}:{},...observation.serverVersion!==void 0?{serverVersion:observation.serverVersion}:{},...observation.protocols?{protocols:sortRecord(observation.protocols)}:{},...observation.capabilities?{capabilities:sortRecord(observation.capabilities)}:{},...observation.evidence?{evidence:[...observation.evidence]}:{},...observation.reason?{reason:observation.reason}:{},compatibility:checks.length>0?"mismatch":observation.availability==="observed"&&id!=="vscode"?"compatible":"not-checked",checks}});const failed2=components3.some(({checks})=>checks.length>0);return{format:NM_DOCTOR_REPORT_FORMAT,version:NM_DOCTOR_REPORT_VERSION,status:failed2?"incompatible":components3.some(({compatibility})=>compatibility==="not-checked")?"partial":"compatible",exitCode:failed2?1:0,scope:"loaded-runtime-and-locally-resolvable-packages",expected:nmDoctorExpectedVersions,components:components3}}function compatibleCLIPatch(actual,expected){const stable=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/;if(!stable.test(actual)||!stable.test(expected))return false;const a=actual.split(".").map(Number),e=expected.split(".").map(Number);return[...a,...e].every(Number.isSafeInteger)&&a[0]===e[0]&&a[1]===e[1]&&a[2]>=e[2]}function sortRecord(value){return Object.fromEntries(Object.entries(value).sort(([a],[b])=>a.localeCompare(b,"en")))}function formatNMDoctorReport(report,locale="en"){const labels=locale==="tr"?{heading:"N/M ara\xE7 zinciri kontrol\xFC",language:"Dil",package:"Paket",compatible:"uyumlu",partial:"k\u0131smen g\xF6zlendi",incompatible:"uyumsuz",observed:"g\xF6zlendi","not-installed":"yerel pakette bulunamad\u0131","not-observed":"g\xF6zlenmedi",unavailable:"y\xFCklenemedi","not-checked":"kontrol edilmedi",mismatch:"uyu\u015Fmazl\u0131k",expected:"beklenen",actual:"g\xF6zlenen",protocols:"Protokoller",capabilities:"Yetenekler",scope:"Kapsam: y\xFCkl\xFC \xE7al\u0131\u015Fma zaman\u0131 ve yerel paketler. \xC7al\u0131\u015Fan LSP/MCP sunucular\u0131 ve VS Code kurulumu sorgulanmad\u0131."}:{heading:"N/M toolchain doctor",language:"Language",package:"Package",compatible:"compatible",partial:"partially observed",incompatible:"incompatible",observed:"observed","not-installed":"not found in local packages","not-observed":"not observed",unavailable:"unavailable","not-checked":"not checked",mismatch:"mismatch",expected:"expected",actual:"observed",protocols:"Protocols",capabilities:"Capabilities",scope:"Scope: loaded runtime and local packages. Running LSP/MCP servers and VS Code installation were not queried."};return[`${labels.heading}: ${labels[report.status]}`,`${labels.language}: ${report.expected.languageVersion}; ${labels.package}: ${report.expected.packageVersion} (${report.expected.stability})`,...report.components.flatMap(item=>[`${item.id}: ${labels[item.availability]}; ${labels[item.compatibility]}${item.packageVersion?`; package=${item.packageVersion}`:""}${item.languageVersion?`; language=${item.languageVersion}`:""} (${item.source})`,...item.protocols?[` ${labels.protocols}: ${Object.entries(item.protocols).map(([key5,value])=>`${key5}=${value}`).join(", ")}`]:[],...item.capabilities?[` ${labels.capabilities}: ${Object.keys(item.capabilities).length}`]:[],...item.checks.map(check=>` ${check.code} ${check.field}: ${labels.expected}=${check.expected??"?"}; ${labels.actual}=${check.actual??"?"}`)]),labels.scope].join("\n")}var xml=value=>String(value).replace(/[^\u0009\u000a\u000d\u0020-\ud7ff\ue000-\ufffd\u{10000}-\u{10ffff}]/gu,"\uFFFD").replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,""").replace(/'/gu,"'");function serializeNMTestJUnitReport(report,filePath=report.source.uri){const errors=report.diagnostics.filter(item=>item.severity==="error");const failedChecks=report.checks.filter(check=>!check.passed);const owners=errors.map(item=>{const candidates=failedChecks.filter(check=>check.diagnosticCodes.includes(item.code)&&item.line!=null&&item.line>=check.range.startLine&&item.line<=check.range.endLine&&(item.sourceId?item.sourceId===check.uri||item.sourceId===filePath&&check.uri===report.source.uri:check.uri===report.source.uri));return candidates.length===1?candidates[0]:void 0});const unassigned=errors.filter((_,index)=>!owners[index]);const executionError=!report.passed&&report.summary.failed===0;const count=report.checks.length+(executionError?1:0);const cases=report.checks.map(check=>{const messages6=errors.filter((_,index)=>owners[index]===check);const failure12=check.passed?"":`<failure type="${xml(check.diagnosticCodes[0]??"NM-TEST-FAILED")}" message="${xml(messages6[0]?.message??`N/M ${check.kind} "${check.name}" failed.`)}">${xml(messages6.map(item=>`${item.code}: ${item.message}`).join("\n")||check.diagnosticCodes.join(", "))}</failure>`;return` <testcase name="${xml(check.name)}" classname="${xml(check.kind)}" file="${xml(filePath)}" line="${check.line}">${failure12}</testcase>`});if(executionError)cases.push(` <testcase name="N/M execution" classname="runtime" file="${xml(filePath)}"><error type="${xml(errors[0]?.code??"NM-TEST-EMPTY")}" message="${xml(errors[0]?.message??"No check completed successfully.")}">${xml(errors.map(item=>`${item.code}: ${item.message}`).join("\n"))}</error></testcase>`);const context=!executionError&&unassigned.length?`
|
|
1516
1516
|
<system-err>${xml(unassigned.map(item=>`${item.sourceId??filePath}${item.line==null?"":`:${item.line}${item.column==null?"":`:${item.column}`}`}: ${item.code}: ${item.message}`).join("\n"))}</system-err>`:"";return`<?xml version="1.0" encoding="UTF-8"?>
|
|
1517
1517
|
<testsuites tests="${count}" failures="${report.summary.failed}" errors="${executionError?1:0}">
|
|
1518
1518
|
<testsuite name="N/M" tests="${count}" failures="${report.summary.failed}" errors="${executionError?1:0}">
|
package/package.json
CHANGED
package/python/README.md
CHANGED
|
@@ -36,6 +36,18 @@ Unix'te `python3` ve `bin/python` kullanın. Standart kütüphane adaptörü Pyt
|
|
|
36
36
|
3.10+ destekler; sabitlenmiş IPython 9.17.1 notebook ortamı Python 3.11+ gerektirir.
|
|
37
37
|
Python 3.10'da `notebook` ek bağımlılığı IPython kurmaz. Global kernel kaydı yapılmaz.
|
|
38
38
|
|
|
39
|
+
Source wheel builds use `setuptools==84.1.0` and `wheel==0.46.2`, covering the
|
|
40
|
+
three reviewed setuptools/wheel advisories while retaining Python 3.10+ support.
|
|
41
|
+
The test tooling and `pyproject.toml` backend pin agree. CLI 0.7.1 contains this
|
|
42
|
+
corrected build metadata; the immutable CLI 0.7.0 archive is unchanged. No
|
|
43
|
+
separate Python package is published.
|
|
44
|
+
|
|
45
|
+
Kaynak wheel üretimi, üç setuptools/wheel güvenlik uyarısını gideren
|
|
46
|
+
`setuptools==84.1.0` ve `wheel==0.46.2` kullanır; Python 3.10+ desteği korunur.
|
|
47
|
+
Test araçları ile `pyproject.toml` backend sabitlemesi aynıdır. CLI 0.7.1 bu
|
|
48
|
+
düzeltilmiş build metaverisini içerir; değişmez CLI 0.7.0 arşivi korunur. Ayrı
|
|
49
|
+
Python paketi yayımlanmaz.
|
|
50
|
+
|
|
39
51
|
## Explicit CLI selection / Açık CLI seçimi
|
|
40
52
|
|
|
41
53
|
```python
|