qsharp-lang 1.0.27-dev → 1.0.29-dev
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/dist/browser.d.ts +7 -1
- package/dist/browser.js +6 -2
- package/dist/compiler/compiler.d.ts +6 -6
- package/dist/compiler/compiler.js +16 -8
- package/dist/debug-service/debug-service.d.ts +2 -2
- package/dist/debug-service/debug-service.js +5 -3
- package/dist/katas-content.generated.js +2 -2
- package/dist/language-service/language-service.d.ts +7 -2
- package/dist/language-service/language-service.js +48 -30
- package/dist/main.d.ts +7 -1
- package/dist/main.js +11 -2
- package/dist/samples.generated.js +3 -3
- package/lib/node/qsc_wasm.cjs +248 -96
- package/lib/node/qsc_wasm.d.cts +39 -12
- package/lib/node/qsc_wasm_bg.wasm +0 -0
- package/lib/web/qsc_wasm.d.ts +51 -16
- package/lib/web/qsc_wasm.js +235 -93
- package/lib/web/qsc_wasm_bg.wasm +0 -0
- package/package.json +1 -1
- package/ux/index.ts +1 -1
- package/ux/reTable.tsx +1 -0
- package/ux/resultsTable.tsx +40 -5
package/dist/browser.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as wasm from "../lib/web/qsc_wasm.js";
|
|
1
2
|
import { TargetProfile } from "../lib/web/qsc_wasm.js";
|
|
2
3
|
import { ICompiler, ICompilerWorker } from "./compiler/compiler.js";
|
|
3
4
|
import { IDebugService, IDebugServiceWorker } from "./debug-service/debug-service.js";
|
|
@@ -7,10 +8,15 @@ export { qsharpLibraryUriScheme };
|
|
|
7
8
|
export declare function loadWasmModule(uriOrBuffer: string | ArrayBuffer): Promise<void>;
|
|
8
9
|
export declare function getLibrarySourceContent(path: string): Promise<string | undefined>;
|
|
9
10
|
export declare function getDebugService(): Promise<IDebugService>;
|
|
11
|
+
export declare function getProjectLoader(readFile: (path: string) => Promise<string | null>, loadDirectory: (path: string) => Promise<[string, number][]>, getManifest: (path: string) => Promise<{
|
|
12
|
+
manifestDirectory: string;
|
|
13
|
+
} | null>): Promise<wasm.ProjectLoader>;
|
|
10
14
|
export declare function getDebugServiceWorker(workerArg: string | Worker): IDebugServiceWorker;
|
|
11
15
|
export declare function getCompiler(): Promise<ICompiler>;
|
|
12
16
|
export declare function getCompilerWorker(workerArg: string | Worker): ICompilerWorker;
|
|
13
|
-
export declare function getLanguageService(): Promise<
|
|
17
|
+
export declare function getLanguageService(readFile?: (uri: string) => Promise<string | null>, listDir?: (uri: string) => Promise<[string, number][]>, getManifest?: (uri: string) => Promise<{
|
|
18
|
+
manifestDirectory: string;
|
|
19
|
+
} | null>): Promise<ILanguageService>;
|
|
14
20
|
export declare function getLanguageServiceWorker(workerArg: string | Worker): ILanguageServiceWorker;
|
|
15
21
|
export { type Dump, type ShotResult } from "./compiler/common.js";
|
|
16
22
|
export { type CompilerState } from "./compiler/compiler.js";
|
package/dist/browser.js
CHANGED
|
@@ -72,6 +72,10 @@ export async function getDebugService() {
|
|
|
72
72
|
await instantiateWasm();
|
|
73
73
|
return new QSharpDebugService(wasm);
|
|
74
74
|
}
|
|
75
|
+
export async function getProjectLoader(readFile, loadDirectory, getManifest) {
|
|
76
|
+
await instantiateWasm();
|
|
77
|
+
return new wasm.ProjectLoader(readFile, loadDirectory, getManifest);
|
|
78
|
+
}
|
|
75
79
|
// Create the debugger inside a WebWorker and proxy requests.
|
|
76
80
|
// If the Worker was already created via other means and is ready to receive
|
|
77
81
|
// messages, then the worker may be passed in and it will be initialized.
|
|
@@ -122,9 +126,9 @@ export function getCompilerWorker(workerArg) {
|
|
|
122
126
|
worker.onmessage = (ev) => proxy.onMsgFromWorker(ev.data);
|
|
123
127
|
return proxy;
|
|
124
128
|
}
|
|
125
|
-
export async function getLanguageService() {
|
|
129
|
+
export async function getLanguageService(readFile, listDir, getManifest) {
|
|
126
130
|
await instantiateWasm();
|
|
127
|
-
return new QSharpLanguageService(wasm);
|
|
131
|
+
return new QSharpLanguageService(wasm, readFile, listDir, getManifest);
|
|
128
132
|
}
|
|
129
133
|
// Create the compiler inside a WebWorker and proxy requests.
|
|
130
134
|
// If the Worker was already created via other means and is ready to receive
|
|
@@ -5,9 +5,9 @@ type Wasm = typeof import("../../lib/node/qsc_wasm.cjs");
|
|
|
5
5
|
export interface ICompiler {
|
|
6
6
|
checkCode(code: string): Promise<VSDiagnostic[]>;
|
|
7
7
|
getHir(code: string): Promise<string>;
|
|
8
|
-
run(
|
|
9
|
-
getQir(
|
|
10
|
-
getEstimates(
|
|
8
|
+
run(sources: [string, string][], expr: string, shots: number, eventHandler: IQscEventTarget): Promise<void>;
|
|
9
|
+
getQir(sources: [string, string][]): Promise<string>;
|
|
10
|
+
getEstimates(sources: [string, string][], params: string): Promise<string>;
|
|
11
11
|
checkExerciseSolution(user_code: string, exercise_sources: string[], eventHandler: IQscEventTarget): Promise<boolean>;
|
|
12
12
|
}
|
|
13
13
|
export type ICompilerWorker = ICompiler & IServiceProxy;
|
|
@@ -16,10 +16,10 @@ export declare class Compiler implements ICompiler {
|
|
|
16
16
|
private wasm;
|
|
17
17
|
constructor(wasm: Wasm);
|
|
18
18
|
checkCode(code: string): Promise<VSDiagnostic[]>;
|
|
19
|
-
getQir(
|
|
20
|
-
getEstimates(
|
|
19
|
+
getQir(sources: [string, string][]): Promise<string>;
|
|
20
|
+
getEstimates(sources: [string, string][], params: string): Promise<string>;
|
|
21
21
|
getHir(code: string): Promise<string>;
|
|
22
|
-
run(
|
|
22
|
+
run(sources: [string, string][], expr: string, shots: number, eventHandler: IQscEventTarget): Promise<void>;
|
|
23
23
|
checkExerciseSolution(user_code: string, exercise_sources: string[], eventHandler: IQscEventTarget): Promise<boolean>;
|
|
24
24
|
}
|
|
25
25
|
export declare function onCompilerEvent(msg: string, eventTarget: IQscEventTarget): void;
|
|
@@ -10,28 +10,36 @@ export class Compiler {
|
|
|
10
10
|
this.wasm = wasm;
|
|
11
11
|
globalThis.qscGitHash = this.wasm.git_hash();
|
|
12
12
|
}
|
|
13
|
+
// Note: This function does not support project mode.
|
|
14
|
+
// see https://github.com/microsoft/qsharp/pull/849#discussion_r1409821143
|
|
13
15
|
async checkCode(code) {
|
|
14
16
|
let diags = [];
|
|
15
|
-
const languageService = new this.wasm.LanguageService(
|
|
17
|
+
const languageService = new this.wasm.LanguageService();
|
|
18
|
+
const work = languageService.start_background_work((uri, version, errors) => {
|
|
16
19
|
diags = errors;
|
|
17
|
-
});
|
|
20
|
+
}, () => Promise.resolve(null), () => Promise.resolve([]), () => Promise.resolve(null));
|
|
18
21
|
languageService.update_document("code", 1, code);
|
|
22
|
+
// Yield to let the language service background worker handle the update
|
|
23
|
+
await Promise.resolve();
|
|
24
|
+
languageService.stop_background_work();
|
|
25
|
+
await work;
|
|
26
|
+
languageService.free();
|
|
19
27
|
return mapDiagnostics(diags, code);
|
|
20
28
|
}
|
|
21
|
-
async getQir(
|
|
22
|
-
return this.wasm.get_qir(
|
|
29
|
+
async getQir(sources) {
|
|
30
|
+
return this.wasm.get_qir(sources);
|
|
23
31
|
}
|
|
24
|
-
async getEstimates(
|
|
25
|
-
return this.wasm.get_estimates(
|
|
32
|
+
async getEstimates(sources, params) {
|
|
33
|
+
return this.wasm.get_estimates(sources, params);
|
|
26
34
|
}
|
|
27
35
|
async getHir(code) {
|
|
28
36
|
return this.wasm.get_hir(code);
|
|
29
37
|
}
|
|
30
|
-
async run(
|
|
38
|
+
async run(sources, expr, shots, eventHandler) {
|
|
31
39
|
// All results are communicated as events, but if there is a compiler error (e.g. an invalid
|
|
32
40
|
// entry expression or similar), it may throw on run. The caller should expect this promise
|
|
33
41
|
// may reject without all shots running or events firing.
|
|
34
|
-
this.wasm.run(
|
|
42
|
+
this.wasm.run(sources, expr, (msg) => onCompilerEvent(msg, eventHandler), shots);
|
|
35
43
|
}
|
|
36
44
|
async checkExerciseSolution(user_code, exercise_sources, eventHandler) {
|
|
37
45
|
const success = this.wasm.check_exercise_solution(user_code, exercise_sources, (msg) => onCompilerEvent(msg, eventHandler));
|
|
@@ -4,7 +4,7 @@ import { IQscEventTarget } from "../compiler/events.js";
|
|
|
4
4
|
import { IServiceProxy } from "../worker-proxy.js";
|
|
5
5
|
type QscWasm = typeof import("../../lib/node/qsc_wasm.cjs");
|
|
6
6
|
export interface IDebugService {
|
|
7
|
-
loadSource(
|
|
7
|
+
loadSource(sources: [string, string][], target: TargetProfile, entry: string | undefined): Promise<string>;
|
|
8
8
|
getBreakpoints(path: string): Promise<IBreakpointSpan[]>;
|
|
9
9
|
getLocalVariables(): Promise<Array<IVariable>>;
|
|
10
10
|
captureQuantumState(): Promise<Array<IQuantumState>>;
|
|
@@ -21,7 +21,7 @@ export declare class QSharpDebugService implements IDebugService {
|
|
|
21
21
|
private debugService;
|
|
22
22
|
private code;
|
|
23
23
|
constructor(wasm: QscWasm);
|
|
24
|
-
loadSource(
|
|
24
|
+
loadSource(sources: [string, string][], target: TargetProfile, entry: string | undefined): Promise<string>;
|
|
25
25
|
getStackFrames(): Promise<IStackFrame[]>;
|
|
26
26
|
evalNext(bps: number[], eventHandler: IQscEventTarget): Promise<IStructStepResult>;
|
|
27
27
|
evalStepIn(bps: number[], eventHandler: IQscEventTarget): Promise<IStructStepResult>;
|
|
@@ -12,9 +12,11 @@ export class QSharpDebugService {
|
|
|
12
12
|
this.wasm = wasm;
|
|
13
13
|
this.debugService = new wasm.DebugService();
|
|
14
14
|
}
|
|
15
|
-
async loadSource(
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
async loadSource(sources, target, entry) {
|
|
16
|
+
for (const [path, source] of sources) {
|
|
17
|
+
this.code[path] = source;
|
|
18
|
+
}
|
|
19
|
+
return this.debugService.load_source(sources, target, entry);
|
|
18
20
|
}
|
|
19
21
|
async getStackFrames() {
|
|
20
22
|
const stack_frame_list = this.debugService.get_stack_frames();
|
|
@@ -11,8 +11,8 @@ export default {
|
|
|
11
11
|
"items": [
|
|
12
12
|
{
|
|
13
13
|
"type": "text-content",
|
|
14
|
-
"asHtml": "<p>kaˑ ta | kah-tuh\n<em>The Japanese word for "form", a pattern of learning and practicing new skills.</em></p>\n<style>\n.transparent {\n background: rgba(0, 0, 0, 0.0) !important;\n}\n</style>\n<table>\n <tbody>\n <tr class=\"transparent\" style=\"border:none;\">\n <td rowspan=\"2\" style=\"border:none;\">\n<svg width=\"60\" height=\"60\" viewBox=\"0 0 60 60\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M9.8217 47.3824L24.8211 56.6477C28.0044 58.614 31.9943 58.614 35.1776 56.6477L50.1776 47.3823C53.1025 45.5756 54.9447 42.2482 54.9988 38.8089L54.9998 38.7205L55 38.6532V21.4635C55 17.892 53.1703 14.5804 50.1756 12.7319L35.1756 3.47308C32.0922 1.56982 28.2527 1.51086 25.1224 3.29619C21.6795 5.40493 18.2269 7.53883 14.7882 9.66472C13.1339 10.6874 11.4796 11.7102 9.82439 12.7312C6.82974 14.5797 5 17.8913 5 21.4628V38.6525C5 42.2229 6.82857 45.5336 9.8217 47.3824ZM26.6114 39.2349L17.9869 44.7687C16.3555 45.8154 14.288 45.8453 12.6282 44.8461L11.6711 44.2646C9.74699 43.0761 8.57144 40.9477 8.57144 38.6525V21.4628C8.57144 19.1672 9.74734 17.0386 11.672 15.8502C13.3329 14.8257 14.9905 13.8008 16.6456 12.7776L16.6473 12.7766C17.8068 12.0597 18.9658 11.3432 20.1244 10.6277C20.0405 11.1621 19.9973 11.7071 19.9973 12.2581V25.4847H20.0007V29.4C20.0007 32.9703 21.8293 36.281 24.8225 38.1299L26.6114 39.2349ZM51.4286 21.4635V31.1833C51.0515 30.8728 50.6487 30.5893 50.2222 30.3364L38.5843 23.4349L35.1764 21.3313C31.9944 19.3672 28.0071 19.3672 24.8251 21.3313L23.5687 22.1068V12.2581C23.5687 9.98662 24.7051 7.8762 26.5751 6.65704L26.9077 6.45332C28.9117 5.33069 31.3592 5.37674 33.3272 6.59151L48.3272 15.8503C50.2523 17.0386 51.4286 19.1675 51.4286 21.4635ZM36.4287 29.3966C36.4287 31.6919 35.2532 33.8202 33.329 35.0087L29.9944 37.0644L26.6718 35.012C24.7477 33.8235 23.5722 31.6952 23.5722 29.4V26.3641L26.6736 24.4497C28.7191 23.1871 31.2824 23.1871 33.3279 24.4497L36.4287 26.3637V29.3966ZM48.3282 44.2645L33.3282 53.5299C31.2818 54.7939 28.7169 54.7939 26.6705 53.5299L18.591 48.5391C19.0369 48.35 19.4708 48.1216 19.888 47.854L31.6969 40.2771L35.1784 38.1265C38.1715 36.2777 40.0001 32.967 40.0001 29.3966V28.4897L48.4278 33.4875C50.2616 34.575 51.3991 36.5642 51.4282 38.7242C51.4028 40.9278 50.201 43.1077 48.3282 44.2645Z\" fill=\"url(#paint0_linear_21_1848)\"/>\n<defs>\n<linearGradient id=\"paint0_linear_21_1848\" x1=\"15.7843\" y1=\"7.90763\" x2=\"43.8968\" y2=\"52.1059\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#8661C5\"/>\n<stop offset=\"0.538864\" stop-color=\"#8661C5\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n</defs>\n</svg>\n\n</td>\n <td style=\"border:none;\">\n <b>Self-paced AI-assisted learning</b>\n </td>\n </tr>\n <tr class=\"transparent\" style=\"border:none;\">\n <td style=\"border:none;\">\n Quantum katas are self-paced learning tutorials assisted by Copilot in Azure Quantum.\n </td>\n </tr>\n <tr class=\"transparent\" style=\"border:none;\">\n <td rowspan=\"2\" style=\"border:none;\">\n<svg width=\"60\" height=\"60\" viewBox=\"0 0 60 60\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M39.2767 30.3697C39.2767 31.3851 38.5022 32.5816 36.635 33.597C34.8158 34.5863 32.2172 35.2368 29.2785 35.2368C26.3397 35.2368 23.7411 34.5863 21.922 33.597C20.0547 32.5816 19.2803 31.3851 19.2803 30.3697C19.2803 29.3543 20.0547 28.1579 21.922 27.1424C23.7411 26.1532 26.3397 25.5027 29.2785 25.5027C32.2172 25.5027 34.8158 26.1532 36.635 27.1424C38.5022 28.1579 39.2767 29.3543 39.2767 30.3697Z\" stroke=\"url(#paint0_linear_21_1849)\" stroke-width=\"2.5\"/>\n<path d=\"M29.4818 40.2027C28.4664 40.2027 27.27 39.4282 26.2545 37.561C25.2653 35.7418 24.6148 33.1432 24.6148 30.2045C24.6148 27.2657 25.2653 24.6671 26.2545 22.848C27.27 20.9808 28.4665 20.2063 29.4818 20.2063C30.4972 20.2063 31.6937 20.9808 32.7091 22.848C33.6984 24.6671 34.3489 27.2657 34.3489 30.2045C34.3489 33.1432 33.6984 35.7418 32.7091 37.561C31.6937 39.4282 30.4972 40.2027 29.4818 40.2027Z\" stroke=\"url(#paint1_linear_21_1849)\" stroke-width=\"2.5\"/>\n<circle cx=\"29.5133\" cy=\"30.514\" r=\"1.70516\" stroke=\"url(#paint2_linear_21_1849)\" stroke-width=\"2\"/>\n<rect x=\"14.4272\" y=\"15.4275\" width=\"29.9456\" height=\"29.9456\" rx=\"2.25\" stroke=\"url(#paint3_linear_21_1849)\" stroke-width=\"3.5\"/>\n<path d=\"M33.7385 56.9989C33.7385 57.9654 34.522 58.7489 35.4885 58.7489C36.455 58.7489 37.2385 57.9654 37.2385 56.9989L33.7385 56.9989ZM33.7385 49.6212L33.7385 56.9989L37.2385 56.9989L37.2385 49.6212L33.7385 49.6212Z\" fill=\"url(#paint4_linear_21_1849)\"/>\n<path d=\"M27.5173 56.9989C27.5173 57.9654 28.3008 58.7489 29.2673 58.7489C30.2338 58.7489 31.0173 57.9654 31.0173 56.9989L27.5173 56.9989ZM27.5173 49.6212L27.5173 56.9989L31.0173 56.9989L31.0173 49.6212L27.5173 49.6212Z\" fill=\"url(#paint5_linear_21_1849)\"/>\n<path d=\"M21.2961 56.9989C21.2961 57.9654 22.0796 58.7489 23.0461 58.7489C24.0126 58.7489 24.7961 57.9654 24.7961 56.9989L21.2961 56.9989ZM21.2961 49.6212L21.2961 56.9989L24.7961 56.9989L24.7961 49.6212L21.2961 49.6212Z\" fill=\"url(#paint6_linear_21_1849)\"/>\n<path d=\"M56 37.548C56.9665 37.548 57.75 36.7645 57.75 35.798C57.75 34.8315 56.9665 34.048 56 34.048V37.548ZM48.6223 37.548H56V34.048H48.6223V37.548Z\" fill=\"url(#paint7_linear_21_1849)\"/>\n<path d=\"M56 31.3267C56.9665 31.3267 57.75 30.5432 57.75 29.5767C57.75 28.6102 56.9665 27.8267 56 27.8267V31.3267ZM48.6223 31.3267H56V27.8267H48.6223V31.3267Z\" fill=\"url(#paint8_linear_21_1849)\"/>\n<path d=\"M56 25.1053C56.9665 25.1053 57.75 24.3218 57.75 23.3553C57.75 22.3888 56.9665 21.6053 56 21.6053V25.1053ZM48.6223 25.1053H56V21.6053H48.6223V25.1053Z\" fill=\"url(#paint9_linear_21_1849)\"/>\n<path d=\"M2.99998 21.6051C2.03348 21.6051 1.24998 22.3886 1.24998 23.3551C1.24998 24.3216 2.03348 25.1051 2.99998 25.1051V21.6051ZM10.3777 21.6051H2.99998V25.1051H10.3777V21.6051Z\" fill=\"url(#paint10_linear_21_1849)\"/>\n<path d=\"M2.99998 27.8263C2.03348 27.8263 1.24998 28.6098 1.24998 29.5763C1.24998 30.5428 2.03348 31.3263 2.99998 31.3263V27.8263ZM10.3777 27.8263H2.99998V31.3263H10.3777V27.8263Z\" fill=\"url(#paint11_linear_21_1849)\"/>\n<path d=\"M2.99998 34.0472C2.03348 34.0472 1.24998 34.8307 1.24998 35.7972C1.24998 36.7637 2.03348 37.5472 2.99998 37.5472V34.0472ZM10.3777 34.0472H2.99998V37.5472H10.3777V34.0472Z\" fill=\"url(#paint12_linear_21_1849)\"/>\n<path d=\"M37.2385 3.99998C37.2385 3.03348 36.455 2.24998 35.4885 2.24998C34.522 2.24998 33.7385 3.03348 33.7385 3.99998L37.2385 3.99998ZM37.2385 11.3777L37.2385 3.99998L33.7385 3.99998L33.7385 11.3777L37.2385 11.3777Z\" fill=\"url(#paint13_linear_21_1849)\"/>\n<path d=\"M31.0173 3.99998C31.0173 3.03348 30.2338 2.24998 29.2673 2.24998C28.3008 2.24998 27.5173 3.03348 27.5173 3.99998L31.0173 3.99998ZM31.0173 11.3777L31.0173 3.99998L27.5173 3.99998L27.5173 11.3777L31.0173 11.3777Z\" fill=\"url(#paint14_linear_21_1849)\"/>\n<path d=\"M24.7961 3.99998C24.7961 3.03348 24.0126 2.24998 23.0461 2.24998C22.0796 2.24998 21.2961 3.03348 21.2961 3.99998L24.7961 3.99998ZM24.7961 11.3777L24.7961 3.99998L21.2961 3.99998L21.2961 11.3777L24.7961 11.3777Z\" fill=\"url(#paint15_linear_21_1849)\"/>\n<defs>\n<linearGradient id=\"paint0_linear_21_1849\" x1=\"29.2785\" y1=\"24.2527\" x2=\"29.2785\" y2=\"36.4868\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint1_linear_21_1849\" x1=\"35.5989\" y1=\"30.2045\" x2=\"23.3648\" y2=\"30.2045\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint2_linear_21_1849\" x1=\"29.5133\" y1=\"27.8088\" x2=\"29.5133\" y2=\"33.2192\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint3_linear_21_1849\" x1=\"13.3685\" y1=\"14.7144\" x2=\"43.7833\" y2=\"46.8572\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint4_linear_21_1849\" x1=\"38.0652\" y1=\"55.2713\" x2=\"35.5501\" y2=\"52.385\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint5_linear_21_1849\" x1=\"31.844\" y1=\"55.2713\" x2=\"29.3289\" y2=\"52.385\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint6_linear_21_1849\" x1=\"25.6228\" y1=\"55.2713\" x2=\"23.1077\" y2=\"52.385\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint7_linear_21_1849\" x1=\"54.2724\" y1=\"33.2213\" x2=\"51.3861\" y2=\"35.7364\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint8_linear_21_1849\" x1=\"54.2724\" y1=\"27\" x2=\"51.3861\" y2=\"29.5151\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint9_linear_21_1849\" x1=\"54.2724\" y1=\"20.7787\" x2=\"51.3861\" y2=\"23.2937\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint10_linear_21_1849\" x1=\"4.72757\" y1=\"25.9318\" x2=\"7.61388\" y2=\"23.4167\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint11_linear_21_1849\" x1=\"4.72757\" y1=\"32.153\" x2=\"7.61388\" y2=\"29.6379\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint12_linear_21_1849\" x1=\"4.72757\" y1=\"38.3739\" x2=\"7.61388\" y2=\"35.8588\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint13_linear_21_1849\" x1=\"32.9119\" y1=\"5.72757\" x2=\"35.4269\" y2=\"8.61388\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint14_linear_21_1849\" x1=\"26.6907\" y1=\"5.72757\" x2=\"29.2057\" y2=\"8.61388\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint15_linear_21_1849\" x1=\"20.4695\" y1=\"5.72757\" x2=\"22.9845\" y2=\"8.61388\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n</defs>\n</svg>\n\n</td>\n <td style=\"border:none;\">\n <b>Focused on quantum computing and programming</b>\n </td>\n </tr>\n <tr class=\"transparent\" style=\"border:none;\">\n <td style=\"border:none;\">\n The Quantum katas focus on teaching quantum computing concepts and quantum programming using the Q# language.\n </td>\n </tr>\n <tr class=\"transparent\" style=\"border:none;\">\n <td rowspan=\"2\" style=\"border:none;\">\n<svg width=\"60\" height=\"60\" viewBox=\"0 0 60 60\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<rect x=\"6.5\" y=\"4.5\" width=\"46.4629\" height=\"51.0428\" rx=\"1.5\" stroke=\"url(#paint0_linear_21_1847)\" stroke-width=\"3\"/>\n<line x1=\"6.83203\" y1=\"11.5767\" x2=\"53.547\" y2=\"11.5767\" stroke=\"url(#paint1_linear_21_1847)\" stroke-width=\"3\"/>\n<circle cx=\"10.0383\" cy=\"8.03779\" r=\"1.37397\" fill=\"url(#paint2_linear_21_1847)\"/>\n<circle cx=\"14.6179\" cy=\"8.03779\" r=\"1.37397\" fill=\"url(#paint3_linear_21_1847)\"/>\n<circle cx=\"19.1977\" cy=\"8.03779\" r=\"1.37397\" fill=\"url(#paint4_linear_21_1847)\"/>\n<path d=\"M21 18L16 21.1818L21 25\" stroke=\"url(#paint5_linear_21_1847)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M32 25L36 21.8182L32 18\" stroke=\"url(#paint6_linear_21_1847)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M24.5718 16.5952L27.7067 26\" stroke=\"url(#paint7_linear_21_1847)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M15.0837 33.8157L20.2104 33.8552\" stroke=\"url(#paint8_linear_21_1847)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M15.0078 39L20.1344 39.0395\" stroke=\"url(#paint9_linear_21_1847)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M15.0078 44L20.1344 44.0395\" stroke=\"url(#paint10_linear_21_1847)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M23 33.8684L39.0133 34.0001\" stroke=\"url(#paint11_linear_21_1847)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M23.0833 39L39.0966 39.1317\" stroke=\"url(#paint12_linear_21_1847)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M23.0833 44L39.0966 44.1317\" stroke=\"url(#paint13_linear_21_1847)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<defs>\n<linearGradient id=\"paint0_linear_21_1847\" x1=\"29.7315\" y1=\"3\" x2=\"29.7315\" y2=\"57.0428\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#8661C5\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n<linearGradient id=\"paint1_linear_21_1847\" x1=\"30.1895\" y1=\"13.0767\" x2=\"30.1895\" y2=\"14.0767\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#8661C5\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n<linearGradient id=\"paint2_linear_21_1847\" x1=\"10.0383\" y1=\"6.66382\" x2=\"10.0383\" y2=\"9.41176\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#7F4CD7\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n<linearGradient id=\"paint3_linear_21_1847\" x1=\"14.6179\" y1=\"6.66382\" x2=\"14.6179\" y2=\"9.41176\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#7F4CD7\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n<linearGradient id=\"paint4_linear_21_1847\" x1=\"19.1977\" y1=\"6.66382\" x2=\"19.1977\" y2=\"9.41176\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#7F4CD7\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n<linearGradient id=\"paint5_linear_21_1847\" x1=\"18.5\" y1=\"18\" x2=\"18.5\" y2=\"25\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#8661C5\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n<linearGradient id=\"paint6_linear_21_1847\" x1=\"34\" y1=\"25\" x2=\"34\" y2=\"18\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#8661C5\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n<linearGradient id=\"paint7_linear_21_1847\" x1=\"26.1392\" y1=\"21.2976\" x2=\"25.1906\" y2=\"21.6138\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#8661C5\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n<linearGradient id=\"paint8_linear_21_1847\" x1=\"17.6394\" y1=\"34.8354\" x2=\"17.6317\" y2=\"35.8354\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#8661C5\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n<linearGradient id=\"paint9_linear_21_1847\" x1=\"17.5634\" y1=\"40.0197\" x2=\"17.5557\" y2=\"41.0197\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#8661C5\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n<linearGradient id=\"paint10_linear_21_1847\" x1=\"17.5634\" y1=\"45.0197\" x2=\"17.5557\" y2=\"46.0197\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#8661C5\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n<linearGradient id=\"paint11_linear_21_1847\" x1=\"30.9994\" y1=\"34.9342\" x2=\"30.9912\" y2=\"35.9342\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#8661C5\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n<linearGradient id=\"paint12_linear_21_1847\" x1=\"31.0827\" y1=\"40.0658\" x2=\"31.0745\" y2=\"41.0658\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#8661C5\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n<linearGradient id=\"paint13_linear_21_1847\" x1=\"31.0827\" y1=\"45.0658\" x2=\"31.0745\" y2=\"46.0658\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#8661C5\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n</defs>\n</svg>\n\n</td>\n <td style=\"border:none;\">\n <b>Tutorials with theory and interactive hands-on exercises</b>\n </td>\n </tr>\n <tr class=\"transparent\" style=\"border:none;\">\n <td style=\"border:none;\">\n Each tutorial includes relevant theory and supporting interactive exercises designed to test knowledge.\n </td>\n </tr>\n </tbody>\n</table>",
|
|
15
|
-
"asMarkdown": "\nkaˑ ta | kah-tuh\n_The Japanese word for \"form\", a pattern of learning and practicing new skills._\n\n<style>\n.transparent {\n background: rgba(0, 0, 0, 0.0) !important;\n}\n</style>\n<table>\n <tbody>\n <tr class=\"transparent\" style=\"border:none;\">\n <td rowspan=\"2\" style=\"border:none;\">\n<svg width=\"60\" height=\"60\" viewBox=\"0 0 60 60\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M9.8217 47.3824L24.8211 56.6477C28.0044 58.614 31.9943 58.614 35.1776 56.6477L50.1776 47.3823C53.1025 45.5756 54.9447 42.2482 54.9988 38.8089L54.9998 38.7205L55 38.6532V21.4635C55 17.892 53.1703 14.5804 50.1756 12.7319L35.1756 3.47308C32.0922 1.56982 28.2527 1.51086 25.1224 3.29619C21.6795 5.40493 18.2269 7.53883 14.7882 9.66472C13.1339 10.6874 11.4796 11.7102 9.82439 12.7312C6.82974 14.5797 5 17.8913 5 21.4628V38.6525C5 42.2229 6.82857 45.5336 9.8217 47.3824ZM26.6114 39.2349L17.9869 44.7687C16.3555 45.8154 14.288 45.8453 12.6282 44.8461L11.6711 44.2646C9.74699 43.0761 8.57144 40.9477 8.57144 38.6525V21.4628C8.57144 19.1672 9.74734 17.0386 11.672 15.8502C13.3329 14.8257 14.9905 13.8008 16.6456 12.7776L16.6473 12.7766C17.8068 12.0597 18.9658 11.3432 20.1244 10.6277C20.0405 11.1621 19.9973 11.7071 19.9973 12.2581V25.4847H20.0007V29.4C20.0007 32.9703 21.8293 36.281 24.8225 38.1299L26.6114 39.2349ZM51.4286 21.4635V31.1833C51.0515 30.8728 50.6487 30.5893 50.2222 30.3364L38.5843 23.4349L35.1764 21.3313C31.9944 19.3672 28.0071 19.3672 24.8251 21.3313L23.5687 22.1068V12.2581C23.5687 9.98662 24.7051 7.8762 26.5751 6.65704L26.9077 6.45332C28.9117 5.33069 31.3592 5.37674 33.3272 6.59151L48.3272 15.8503C50.2523 17.0386 51.4286 19.1675 51.4286 21.4635ZM36.4287 29.3966C36.4287 31.6919 35.2532 33.8202 33.329 35.0087L29.9944 37.0644L26.6718 35.012C24.7477 33.8235 23.5722 31.6952 23.5722 29.4V26.3641L26.6736 24.4497C28.7191 23.1871 31.2824 23.1871 33.3279 24.4497L36.4287 26.3637V29.3966ZM48.3282 44.2645L33.3282 53.5299C31.2818 54.7939 28.7169 54.7939 26.6705 53.5299L18.591 48.5391C19.0369 48.35 19.4708 48.1216 19.888 47.854L31.6969 40.2771L35.1784 38.1265C38.1715 36.2777 40.0001 32.967 40.0001 29.3966V28.4897L48.4278 33.4875C50.2616 34.575 51.3991 36.5642 51.4282 38.7242C51.4028 40.9278 50.201 43.1077 48.3282 44.2645Z\" fill=\"url(#paint0_linear_21_1848)\"/>\n<defs>\n<linearGradient id=\"paint0_linear_21_1848\" x1=\"15.7843\" y1=\"7.90763\" x2=\"43.8968\" y2=\"52.1059\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#8661C5\"/>\n<stop offset=\"0.538864\" stop-color=\"#8661C5\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n</defs>\n</svg>\n\n</td>\n <td style=\"border:none;\">\n <b>Self-paced AI-assisted learning</b>\n </td>\n </tr>\n <tr class=\"transparent\" style=\"border:none;\">\n <td style=\"border:none;\">\n Quantum katas are self-paced learning tutorials assisted by Copilot in Azure Quantum.\n </td>\n </tr>\n <tr class=\"transparent\" style=\"border:none;\">\n <td rowspan=\"2\" style=\"border:none;\">\n<svg width=\"60\" height=\"60\" viewBox=\"0 0 60 60\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M39.2767 30.3697C39.2767 31.3851 38.5022 32.5816 36.635 33.597C34.8158 34.5863 32.2172 35.2368 29.2785 35.2368C26.3397 35.2368 23.7411 34.5863 21.922 33.597C20.0547 32.5816 19.2803 31.3851 19.2803 30.3697C19.2803 29.3543 20.0547 28.1579 21.922 27.1424C23.7411 26.1532 26.3397 25.5027 29.2785 25.5027C32.2172 25.5027 34.8158 26.1532 36.635 27.1424C38.5022 28.1579 39.2767 29.3543 39.2767 30.3697Z\" stroke=\"url(#paint0_linear_21_1849)\" stroke-width=\"2.5\"/>\n<path d=\"M29.4818 40.2027C28.4664 40.2027 27.27 39.4282 26.2545 37.561C25.2653 35.7418 24.6148 33.1432 24.6148 30.2045C24.6148 27.2657 25.2653 24.6671 26.2545 22.848C27.27 20.9808 28.4665 20.2063 29.4818 20.2063C30.4972 20.2063 31.6937 20.9808 32.7091 22.848C33.6984 24.6671 34.3489 27.2657 34.3489 30.2045C34.3489 33.1432 33.6984 35.7418 32.7091 37.561C31.6937 39.4282 30.4972 40.2027 29.4818 40.2027Z\" stroke=\"url(#paint1_linear_21_1849)\" stroke-width=\"2.5\"/>\n<circle cx=\"29.5133\" cy=\"30.514\" r=\"1.70516\" stroke=\"url(#paint2_linear_21_1849)\" stroke-width=\"2\"/>\n<rect x=\"14.4272\" y=\"15.4275\" width=\"29.9456\" height=\"29.9456\" rx=\"2.25\" stroke=\"url(#paint3_linear_21_1849)\" stroke-width=\"3.5\"/>\n<path d=\"M33.7385 56.9989C33.7385 57.9654 34.522 58.7489 35.4885 58.7489C36.455 58.7489 37.2385 57.9654 37.2385 56.9989L33.7385 56.9989ZM33.7385 49.6212L33.7385 56.9989L37.2385 56.9989L37.2385 49.6212L33.7385 49.6212Z\" fill=\"url(#paint4_linear_21_1849)\"/>\n<path d=\"M27.5173 56.9989C27.5173 57.9654 28.3008 58.7489 29.2673 58.7489C30.2338 58.7489 31.0173 57.9654 31.0173 56.9989L27.5173 56.9989ZM27.5173 49.6212L27.5173 56.9989L31.0173 56.9989L31.0173 49.6212L27.5173 49.6212Z\" fill=\"url(#paint5_linear_21_1849)\"/>\n<path d=\"M21.2961 56.9989C21.2961 57.9654 22.0796 58.7489 23.0461 58.7489C24.0126 58.7489 24.7961 57.9654 24.7961 56.9989L21.2961 56.9989ZM21.2961 49.6212L21.2961 56.9989L24.7961 56.9989L24.7961 49.6212L21.2961 49.6212Z\" fill=\"url(#paint6_linear_21_1849)\"/>\n<path d=\"M56 37.548C56.9665 37.548 57.75 36.7645 57.75 35.798C57.75 34.8315 56.9665 34.048 56 34.048V37.548ZM48.6223 37.548H56V34.048H48.6223V37.548Z\" fill=\"url(#paint7_linear_21_1849)\"/>\n<path d=\"M56 31.3267C56.9665 31.3267 57.75 30.5432 57.75 29.5767C57.75 28.6102 56.9665 27.8267 56 27.8267V31.3267ZM48.6223 31.3267H56V27.8267H48.6223V31.3267Z\" fill=\"url(#paint8_linear_21_1849)\"/>\n<path d=\"M56 25.1053C56.9665 25.1053 57.75 24.3218 57.75 23.3553C57.75 22.3888 56.9665 21.6053 56 21.6053V25.1053ZM48.6223 25.1053H56V21.6053H48.6223V25.1053Z\" fill=\"url(#paint9_linear_21_1849)\"/>\n<path d=\"M2.99998 21.6051C2.03348 21.6051 1.24998 22.3886 1.24998 23.3551C1.24998 24.3216 2.03348 25.1051 2.99998 25.1051V21.6051ZM10.3777 21.6051H2.99998V25.1051H10.3777V21.6051Z\" fill=\"url(#paint10_linear_21_1849)\"/>\n<path d=\"M2.99998 27.8263C2.03348 27.8263 1.24998 28.6098 1.24998 29.5763C1.24998 30.5428 2.03348 31.3263 2.99998 31.3263V27.8263ZM10.3777 27.8263H2.99998V31.3263H10.3777V27.8263Z\" fill=\"url(#paint11_linear_21_1849)\"/>\n<path d=\"M2.99998 34.0472C2.03348 34.0472 1.24998 34.8307 1.24998 35.7972C1.24998 36.7637 2.03348 37.5472 2.99998 37.5472V34.0472ZM10.3777 34.0472H2.99998V37.5472H10.3777V34.0472Z\" fill=\"url(#paint12_linear_21_1849)\"/>\n<path d=\"M37.2385 3.99998C37.2385 3.03348 36.455 2.24998 35.4885 2.24998C34.522 2.24998 33.7385 3.03348 33.7385 3.99998L37.2385 3.99998ZM37.2385 11.3777L37.2385 3.99998L33.7385 3.99998L33.7385 11.3777L37.2385 11.3777Z\" fill=\"url(#paint13_linear_21_1849)\"/>\n<path d=\"M31.0173 3.99998C31.0173 3.03348 30.2338 2.24998 29.2673 2.24998C28.3008 2.24998 27.5173 3.03348 27.5173 3.99998L31.0173 3.99998ZM31.0173 11.3777L31.0173 3.99998L27.5173 3.99998L27.5173 11.3777L31.0173 11.3777Z\" fill=\"url(#paint14_linear_21_1849)\"/>\n<path d=\"M24.7961 3.99998C24.7961 3.03348 24.0126 2.24998 23.0461 2.24998C22.0796 2.24998 21.2961 3.03348 21.2961 3.99998L24.7961 3.99998ZM24.7961 11.3777L24.7961 3.99998L21.2961 3.99998L21.2961 11.3777L24.7961 11.3777Z\" fill=\"url(#paint15_linear_21_1849)\"/>\n<defs>\n<linearGradient id=\"paint0_linear_21_1849\" x1=\"29.2785\" y1=\"24.2527\" x2=\"29.2785\" y2=\"36.4868\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint1_linear_21_1849\" x1=\"35.5989\" y1=\"30.2045\" x2=\"23.3648\" y2=\"30.2045\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint2_linear_21_1849\" x1=\"29.5133\" y1=\"27.8088\" x2=\"29.5133\" y2=\"33.2192\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint3_linear_21_1849\" x1=\"13.3685\" y1=\"14.7144\" x2=\"43.7833\" y2=\"46.8572\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint4_linear_21_1849\" x1=\"38.0652\" y1=\"55.2713\" x2=\"35.5501\" y2=\"52.385\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint5_linear_21_1849\" x1=\"31.844\" y1=\"55.2713\" x2=\"29.3289\" y2=\"52.385\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint6_linear_21_1849\" x1=\"25.6228\" y1=\"55.2713\" x2=\"23.1077\" y2=\"52.385\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint7_linear_21_1849\" x1=\"54.2724\" y1=\"33.2213\" x2=\"51.3861\" y2=\"35.7364\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint8_linear_21_1849\" x1=\"54.2724\" y1=\"27\" x2=\"51.3861\" y2=\"29.5151\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint9_linear_21_1849\" x1=\"54.2724\" y1=\"20.7787\" x2=\"51.3861\" y2=\"23.2937\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint10_linear_21_1849\" x1=\"4.72757\" y1=\"25.9318\" x2=\"7.61388\" y2=\"23.4167\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint11_linear_21_1849\" x1=\"4.72757\" y1=\"32.153\" x2=\"7.61388\" y2=\"29.6379\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint12_linear_21_1849\" x1=\"4.72757\" y1=\"38.3739\" x2=\"7.61388\" y2=\"35.8588\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint13_linear_21_1849\" x1=\"32.9119\" y1=\"5.72757\" x2=\"35.4269\" y2=\"8.61388\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint14_linear_21_1849\" x1=\"26.6907\" y1=\"5.72757\" x2=\"29.2057\" y2=\"8.61388\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n<linearGradient id=\"paint15_linear_21_1849\" x1=\"20.4695\" y1=\"5.72757\" x2=\"22.9845\" y2=\"8.61388\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#A06ADF\"/>\n<stop offset=\"1\" stop-color=\"#3E72F8\"/>\n</linearGradient>\n</defs>\n</svg>\n\n</td>\n <td style=\"border:none;\">\n <b>Focused on quantum computing and programming</b>\n </td>\n </tr>\n <tr class=\"transparent\" style=\"border:none;\">\n <td style=\"border:none;\">\n The Quantum katas focus on teaching quantum computing concepts and quantum programming using the Q# language.\n </td>\n </tr>\n <tr class=\"transparent\" style=\"border:none;\">\n <td rowspan=\"2\" style=\"border:none;\">\n<svg width=\"60\" height=\"60\" viewBox=\"0 0 60 60\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<rect x=\"6.5\" y=\"4.5\" width=\"46.4629\" height=\"51.0428\" rx=\"1.5\" stroke=\"url(#paint0_linear_21_1847)\" stroke-width=\"3\"/>\n<line x1=\"6.83203\" y1=\"11.5767\" x2=\"53.547\" y2=\"11.5767\" stroke=\"url(#paint1_linear_21_1847)\" stroke-width=\"3\"/>\n<circle cx=\"10.0383\" cy=\"8.03779\" r=\"1.37397\" fill=\"url(#paint2_linear_21_1847)\"/>\n<circle cx=\"14.6179\" cy=\"8.03779\" r=\"1.37397\" fill=\"url(#paint3_linear_21_1847)\"/>\n<circle cx=\"19.1977\" cy=\"8.03779\" r=\"1.37397\" fill=\"url(#paint4_linear_21_1847)\"/>\n<path d=\"M21 18L16 21.1818L21 25\" stroke=\"url(#paint5_linear_21_1847)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M32 25L36 21.8182L32 18\" stroke=\"url(#paint6_linear_21_1847)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M24.5718 16.5952L27.7067 26\" stroke=\"url(#paint7_linear_21_1847)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M15.0837 33.8157L20.2104 33.8552\" stroke=\"url(#paint8_linear_21_1847)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M15.0078 39L20.1344 39.0395\" stroke=\"url(#paint9_linear_21_1847)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M15.0078 44L20.1344 44.0395\" stroke=\"url(#paint10_linear_21_1847)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M23 33.8684L39.0133 34.0001\" stroke=\"url(#paint11_linear_21_1847)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M23.0833 39L39.0966 39.1317\" stroke=\"url(#paint12_linear_21_1847)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M23.0833 44L39.0966 44.1317\" stroke=\"url(#paint13_linear_21_1847)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<defs>\n<linearGradient id=\"paint0_linear_21_1847\" x1=\"29.7315\" y1=\"3\" x2=\"29.7315\" y2=\"57.0428\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#8661C5\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n<linearGradient id=\"paint1_linear_21_1847\" x1=\"30.1895\" y1=\"13.0767\" x2=\"30.1895\" y2=\"14.0767\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#8661C5\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n<linearGradient id=\"paint2_linear_21_1847\" x1=\"10.0383\" y1=\"6.66382\" x2=\"10.0383\" y2=\"9.41176\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#7F4CD7\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n<linearGradient id=\"paint3_linear_21_1847\" x1=\"14.6179\" y1=\"6.66382\" x2=\"14.6179\" y2=\"9.41176\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#7F4CD7\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n<linearGradient id=\"paint4_linear_21_1847\" x1=\"19.1977\" y1=\"6.66382\" x2=\"19.1977\" y2=\"9.41176\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#7F4CD7\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n<linearGradient id=\"paint5_linear_21_1847\" x1=\"18.5\" y1=\"18\" x2=\"18.5\" y2=\"25\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#8661C5\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n<linearGradient id=\"paint6_linear_21_1847\" x1=\"34\" y1=\"25\" x2=\"34\" y2=\"18\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#8661C5\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n<linearGradient id=\"paint7_linear_21_1847\" x1=\"26.1392\" y1=\"21.2976\" x2=\"25.1906\" y2=\"21.6138\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#8661C5\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n<linearGradient id=\"paint8_linear_21_1847\" x1=\"17.6394\" y1=\"34.8354\" x2=\"17.6317\" y2=\"35.8354\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#8661C5\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n<linearGradient id=\"paint9_linear_21_1847\" x1=\"17.5634\" y1=\"40.0197\" x2=\"17.5557\" y2=\"41.0197\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#8661C5\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n<linearGradient id=\"paint10_linear_21_1847\" x1=\"17.5634\" y1=\"45.0197\" x2=\"17.5557\" y2=\"46.0197\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#8661C5\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n<linearGradient id=\"paint11_linear_21_1847\" x1=\"30.9994\" y1=\"34.9342\" x2=\"30.9912\" y2=\"35.9342\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#8661C5\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n<linearGradient id=\"paint12_linear_21_1847\" x1=\"31.0827\" y1=\"40.0658\" x2=\"31.0745\" y2=\"41.0658\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#8661C5\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n<linearGradient id=\"paint13_linear_21_1847\" x1=\"31.0827\" y1=\"45.0658\" x2=\"31.0745\" y2=\"46.0658\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#8661C5\"/>\n<stop offset=\"1\" stop-color=\"#1864F0\"/>\n</linearGradient>\n</defs>\n</svg>\n\n</td>\n <td style=\"border:none;\">\n <b>Tutorials with theory and interactive hands-on exercises</b>\n </td>\n </tr>\n <tr class=\"transparent\" style=\"border:none;\">\n <td style=\"border:none;\">\n Each tutorial includes relevant theory and supporting interactive exercises designed to test knowledge.\n </td>\n </tr>\n </tbody>\n</table>"
|
|
14
|
+
"asHtml": "<p>kaˑ ta | kah-tuh\n<em>The Japanese word for "form", a pattern of learning and practicing new skills.</em></p>\n<style>\n.transparent {\n background: rgba(0, 0, 0, 0.0) !important;\n}\n</style>\n<table>\n <tbody>\n <tr class=\"transparent\" style=\"border:none;\">\n <td rowspan=\"2\" style=\"border:none;\">\n<svg width=\"59\" height=\"60\" viewBox=\"0 0 59 60\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M11.4624 42.776C12.9479 42.8256 13.6612 43.3574 14.1557 44.0384C14.7665 44.8796 15.1111 46.0279 15.5687 47.5527L15.6351 47.7738C16.0837 49.2659 16.6595 51.1152 17.9024 52.5503C19.239 54.0937 21.1862 55.0006 23.9949 55.0006H41.7125C45.3156 55.0006 48.0022 52.6796 49.9728 49.7757C51.9525 46.8585 53.4288 43.05 54.5789 39.3778C55.9023 35.1526 57.5578 29.8603 57.4967 25.6038C57.4657 23.4508 56.9975 21.3099 55.588 19.6996C54.1401 18.0454 51.9521 17.2335 49.1065 17.2335H48.8959C48.8542 17.2301 48.812 17.2284 48.7694 17.2284C47.1251 17.2284 46.364 16.6776 45.8445 15.9622C45.2338 15.121 44.8892 13.9727 44.4315 12.448L44.3652 12.2269C43.9165 10.7347 43.3408 8.88542 42.0978 7.45027C40.7612 5.90694 38.8141 5 36.0054 5H18.2877C14.6844 5 11.9979 7.32167 10.0273 10.2262C8.04769 13.1441 6.57146 16.9535 5.42128 20.6266C4.0979 24.8529 2.44244 30.1465 2.5036 34.4039C2.53453 36.5573 3.00271 38.6986 4.4121 40.3092C5.86002 41.9638 8.04801 42.776 10.8937 42.776H11.4624ZM8.4035 21.5605C9.52838 17.9681 10.896 14.512 12.6133 11.9807C14.3397 9.4361 16.2033 8.125 18.2877 8.125H30.5829C29.9813 9.08825 29.4908 10.2066 29.0532 11.3837C28.5547 12.7246 28.0917 14.2365 27.6125 15.8012L27.5067 16.1468C25.602 22.3601 23.2175 30.3716 21.6876 35.5382C20.9852 37.9103 18.8486 39.5582 16.3937 39.6472H11.2308C11.1939 39.6472 11.1574 39.6485 11.1211 39.651H10.8937C8.63765 39.651 7.44014 39.0241 6.76382 38.2512C6.04896 37.4343 5.65414 36.1596 5.62828 34.359C5.57583 30.7084 7.03152 25.9419 8.4035 21.5605ZM47.387 48.0209C45.6607 50.5647 43.7971 51.8756 41.7125 51.8756H29.4178C30.0192 50.9127 30.5095 49.7949 30.947 48.6184C31.4455 47.2778 31.9085 45.7662 32.3877 44.2019L32.4935 43.8565C34.3981 37.6451 36.7825 29.6362 38.3124 24.4708C39.0348 22.0317 41.2736 20.3585 43.8155 20.3585H49.1065C51.3627 20.3585 52.5603 20.9852 53.2366 21.7579C53.9513 22.5745 54.3461 23.8487 54.372 25.6487C54.4244 29.2983 52.9688 34.0633 51.5968 38.4437C50.4719 42.0352 49.1043 45.4903 47.387 48.0209ZM26.2496 39.6472H22.9422C23.7238 38.7267 24.3252 37.6371 24.684 36.4255C25.3602 34.1419 26.2028 31.3045 27.0966 28.3137L28.2663 24.4303C28.9953 22.01 31.2243 20.3534 33.752 20.3534H37.0652C36.28 21.2757 35.676 22.3681 35.3161 23.5833C34.6398 25.8665 33.7972 28.7034 32.9033 31.6935L31.7352 35.5707C31.0061 37.9908 28.7771 39.6472 26.2496 39.6472ZM33.752 17.2284C32.5074 17.2284 31.3097 17.4883 30.2188 17.9634C30.3117 17.6594 30.4036 17.359 30.4945 17.0627L30.5919 16.7447C31.0803 15.1503 31.5173 13.7236 31.9824 12.4726C32.4803 11.1333 32.9725 10.1036 33.5137 9.36493C34.0132 8.68326 34.8201 8.125 36.0054 8.125C38.0615 8.125 39.0865 8.74662 39.7356 9.49612C40.4784 10.3538 40.902 11.5616 41.3725 13.1266C41.4081 13.2453 41.4443 13.3668 41.4811 13.4909C41.8282 14.6592 42.2391 16.0421 42.9424 17.2284L33.752 17.2284ZM26.2496 42.7722C27.494 42.7722 28.6915 42.5124 29.7822 42.0374C29.6891 42.3422 29.5969 42.6434 29.5058 42.9404L29.4084 43.2582C28.9201 44.8521 28.483 46.2786 28.0179 47.5293C27.5201 48.8682 27.0279 49.8976 26.4867 50.636C25.9873 51.3174 25.1803 51.8756 23.9949 51.8756C21.9388 51.8756 20.9138 51.254 20.2646 50.5045C19.5218 49.6468 19.0983 48.439 18.6278 46.874C18.5921 46.7554 18.556 46.6338 18.5191 46.5098C18.172 45.3414 17.7612 43.9585 17.0578 42.7722H26.2496Z\" fill=\"url(#paint0_linear_208_693)\"/>\n<defs>\n<linearGradient id=\"paint0_linear_208_693\" x1=\"30.0001\" y1=\"5\" x2=\"30.0001\" y2=\"55.0006\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#218AE4\"/>\n<stop offset=\"0.473958\" stop-color=\"#33BFB5\"/>\n<stop offset=\"1\" stop-color=\"#49CFA3\"/>\n</linearGradient>\n</defs>\n</svg>\n\n</td>\n <td style=\"border:none;\">\n <b>Self-paced AI-assisted learning</b>\n </td>\n </tr>\n <tr class=\"transparent\" style=\"border:none;\">\n <td style=\"border:none;\">\n Quantum katas are self-paced learning tutorials assisted by Copilot in Azure Quantum.\n </td>\n </tr>\n <tr class=\"transparent\" style=\"border:none;\">\n <td rowspan=\"2\" style=\"border:none;\">\n<svg width=\"61\" height=\"60\" viewBox=\"0 0 61 60\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M39.8865 30.3697C39.8865 31.3851 39.112 32.5816 37.2448 33.597C35.4256 34.5863 32.827 35.2368 29.8883 35.2368C26.9495 35.2368 24.3509 34.5863 22.5318 33.597C20.6645 32.5816 19.8901 31.3851 19.8901 30.3697C19.8901 29.3543 20.6645 28.1579 22.5318 27.1424C24.3509 26.1532 26.9495 25.5027 29.8883 25.5027C32.827 25.5027 35.4256 26.1532 37.2448 27.1424C39.112 28.1579 39.8865 29.3543 39.8865 30.3697Z\" stroke=\"url(#paint0_linear_144_926)\" stroke-width=\"2.5\"/>\n<path d=\"M30.0916 40.2027C29.0762 40.2027 27.8798 39.4282 26.8643 37.561C25.8751 35.7418 25.2246 33.1432 25.2246 30.2045C25.2246 27.2657 25.8751 24.6671 26.8643 22.848C27.8798 20.9808 29.0763 20.2063 30.0916 20.2063C31.107 20.2063 32.3035 20.9808 33.3189 22.848C34.3082 24.6671 34.9587 27.2657 34.9587 30.2045C34.9587 33.1432 34.3082 35.7418 33.3189 37.561C32.3035 39.4282 31.107 40.2027 30.0916 40.2027Z\" stroke=\"url(#paint1_linear_144_926)\" stroke-width=\"2.5\"/>\n<path d=\"M30.1231 32.2192C31.0649 32.2192 31.8283 31.4557 31.8283 30.514C31.8283 29.5723 31.0649 28.8088 30.1231 28.8088C29.1814 28.8088 28.418 29.5723 28.418 30.514C28.418 31.4557 29.1814 32.2192 30.1231 32.2192Z\" stroke=\"url(#paint2_linear_144_926)\" stroke-width=\"2\"/>\n<path d=\"M42.7327 15.4275H17.2871C16.0445 15.4275 15.0371 16.4348 15.0371 17.6775V43.1231C15.0371 44.3657 16.0445 45.3731 17.2871 45.3731H42.7327C43.9753 45.3731 44.9827 44.3657 44.9827 43.1231V17.6775C44.9827 16.4348 43.9753 15.4275 42.7327 15.4275Z\" stroke=\"url(#paint3_linear_144_926)\" stroke-width=\"3.5\"/>\n<path d=\"M34.3481 56.9988C34.3481 57.9653 35.1316 58.7488 36.0981 58.7488C37.0646 58.7488 37.8481 57.9653 37.8481 56.9988H34.3481ZM34.3481 49.6211V56.9988H37.8481V49.6211H34.3481Z\" fill=\"url(#paint4_linear_144_926)\"/>\n<path d=\"M28.127 56.9988C28.127 57.9653 28.9105 58.7488 29.877 58.7488C30.8435 58.7488 31.627 57.9653 31.627 56.9988H28.127ZM28.127 49.6211V56.9988H31.627V49.6211H28.127Z\" fill=\"url(#paint5_linear_144_926)\"/>\n<path d=\"M21.9058 56.9988C21.9058 57.9653 22.6893 58.7488 23.6558 58.7488C24.6223 58.7488 25.4058 57.9653 25.4058 56.9988H21.9058ZM21.9058 49.6211V56.9988H25.4058V49.6211H21.9058Z\" fill=\"url(#paint6_linear_144_926)\"/>\n<path d=\"M56.6096 37.5481C57.5761 37.5481 58.3596 36.7646 58.3596 35.7981C58.3596 34.8316 57.5761 34.0481 56.6096 34.0481V37.5481ZM49.2319 37.5481H56.6096V34.0481H49.2319V37.5481Z\" fill=\"url(#paint7_linear_144_926)\"/>\n<path d=\"M56.6096 31.3267C57.5761 31.3267 58.3596 30.5432 58.3596 29.5767C58.3596 28.6102 57.5761 27.8267 56.6096 27.8267V31.3267ZM49.2319 31.3267H56.6096V27.8267H49.2319V31.3267Z\" fill=\"url(#paint8_linear_144_926)\"/>\n<path d=\"M56.6096 25.1052C57.5761 25.1052 58.3596 24.3217 58.3596 23.3552C58.3596 22.3887 57.5761 21.6052 56.6096 21.6052V25.1052ZM49.2319 25.1052H56.6096V21.6052H49.2319V25.1052Z\" fill=\"url(#paint9_linear_144_926)\"/>\n<path d=\"M3.60986 21.605C2.64336 21.605 1.85986 22.3885 1.85986 23.355C1.85986 24.3215 2.64336 25.105 3.60986 25.105V21.605ZM10.9876 21.605H3.60986V25.105H10.9876V21.605Z\" fill=\"url(#paint10_linear_144_926)\"/>\n<path d=\"M3.60986 27.8264C2.64336 27.8264 1.85986 28.6099 1.85986 29.5764C1.85986 30.5429 2.64336 31.3264 3.60986 31.3264V27.8264ZM10.9876 27.8264H3.60986V31.3264H10.9876V27.8264Z\" fill=\"url(#paint11_linear_144_926)\"/>\n<path d=\"M3.60986 34.0471C2.64336 34.0471 1.85986 34.8306 1.85986 35.7971C1.85986 36.7636 2.64336 37.5471 3.60986 37.5471V34.0471ZM10.9876 34.0471H3.60986V37.5471H10.9876V34.0471Z\" fill=\"url(#paint12_linear_144_926)\"/>\n<path d=\"M37.8481 4C37.8481 3.0335 37.0646 2.25 36.0981 2.25C35.1316 2.25 34.3481 3.0335 34.3481 4H37.8481ZM37.8481 11.3777V4H34.3481V11.3777H37.8481Z\" fill=\"url(#paint13_linear_144_926)\"/>\n<path d=\"M31.627 4C31.627 3.0335 30.8435 2.25 29.877 2.25C28.9105 2.25 28.127 3.0335 28.127 4H31.627ZM31.627 11.3777V4H28.127V11.3777H31.627Z\" fill=\"url(#paint14_linear_144_926)\"/>\n<path d=\"M25.4058 4C25.4058 3.0335 24.6223 2.25 23.6558 2.25C22.6893 2.25 21.9058 3.0335 21.9058 4H25.4058ZM25.4058 11.3777V4H21.9058V11.3777H25.4058Z\" fill=\"url(#paint15_linear_144_926)\"/>\n<defs>\n<linearGradient id=\"paint0_linear_144_926\" x1=\"29.8883\" y1=\"24.2527\" x2=\"29.8883\" y2=\"36.4868\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#238DE1\"/>\n<stop offset=\"1\" stop-color=\"#49CFA3\"/>\n</linearGradient>\n<linearGradient id=\"paint1_linear_144_926\" x1=\"36.2087\" y1=\"30.2045\" x2=\"23.9746\" y2=\"30.2045\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228BE3\"/>\n<stop offset=\"1\" stop-color=\"#47CFA4\"/>\n</linearGradient>\n<linearGradient id=\"paint2_linear_144_926\" x1=\"30.1231\" y1=\"27.8088\" x2=\"30.1231\" y2=\"33.2192\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#218AE4\"/>\n<stop offset=\"1\" stop-color=\"#48CFA3\"/>\n</linearGradient>\n<linearGradient id=\"paint3_linear_144_926\" x1=\"13.9784\" y1=\"14.7144\" x2=\"44.3932\" y2=\"46.8572\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228BE2\"/>\n<stop offset=\"1\" stop-color=\"#4AD0A2\"/>\n</linearGradient>\n<linearGradient id=\"paint4_linear_144_926\" x1=\"38.6748\" y1=\"55.2712\" x2=\"36.1597\" y2=\"52.3849\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228CE2\"/>\n<stop offset=\"1\" stop-color=\"#48CFA3\"/>\n</linearGradient>\n<linearGradient id=\"paint5_linear_144_926\" x1=\"32.4537\" y1=\"55.2712\" x2=\"29.9386\" y2=\"52.3849\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228CE2\"/>\n<stop offset=\"1\" stop-color=\"#48CFA3\"/>\n</linearGradient>\n<linearGradient id=\"paint6_linear_144_926\" x1=\"26.2325\" y1=\"55.2712\" x2=\"23.7174\" y2=\"52.3849\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228CE2\"/>\n<stop offset=\"1\" stop-color=\"#48CFA3\"/>\n</linearGradient>\n<linearGradient id=\"paint7_linear_144_926\" x1=\"54.882\" y1=\"33.2214\" x2=\"51.9957\" y2=\"35.7365\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228DE1\"/>\n<stop offset=\"1\" stop-color=\"#48CFA3\"/>\n</linearGradient>\n<linearGradient id=\"paint8_linear_144_926\" x1=\"54.882\" y1=\"27\" x2=\"51.9957\" y2=\"29.5151\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228DE1\"/>\n<stop offset=\"1\" stop-color=\"#48CFA3\"/>\n</linearGradient>\n<linearGradient id=\"paint9_linear_144_926\" x1=\"54.882\" y1=\"20.7786\" x2=\"51.9957\" y2=\"23.2936\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#2492DD\"/>\n<stop offset=\"1\" stop-color=\"#47CFA4\"/>\n</linearGradient>\n<linearGradient id=\"paint10_linear_144_926\" x1=\"5.33745\" y1=\"25.9317\" x2=\"8.22376\" y2=\"23.4166\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228CE2\"/>\n<stop offset=\"1\" stop-color=\"#41CCA7\"/>\n</linearGradient>\n<linearGradient id=\"paint11_linear_144_926\" x1=\"5.33745\" y1=\"32.1531\" x2=\"8.22376\" y2=\"29.638\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228CE2\"/>\n<stop offset=\"1\" stop-color=\"#41CCA7\"/>\n</linearGradient>\n<linearGradient id=\"paint12_linear_144_926\" x1=\"5.33745\" y1=\"38.3738\" x2=\"8.22376\" y2=\"35.8587\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228CE2\"/>\n<stop offset=\"1\" stop-color=\"#41CCA7\"/>\n</linearGradient>\n<linearGradient id=\"paint13_linear_144_926\" x1=\"33.5215\" y1=\"5.72759\" x2=\"36.0365\" y2=\"8.6139\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228DE1\"/>\n<stop offset=\"1\" stop-color=\"#4AD0A2\"/>\n</linearGradient>\n<linearGradient id=\"paint14_linear_144_926\" x1=\"27.3004\" y1=\"5.72759\" x2=\"29.8154\" y2=\"8.6139\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228DE1\"/>\n<stop offset=\"1\" stop-color=\"#4AD0A2\"/>\n</linearGradient>\n<linearGradient id=\"paint15_linear_144_926\" x1=\"21.0792\" y1=\"5.72759\" x2=\"23.5942\" y2=\"8.6139\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228DE1\"/>\n<stop offset=\"1\" stop-color=\"#4AD0A2\"/>\n</linearGradient>\n</defs>\n</svg>\n\n</td>\n <td style=\"border:none;\">\n <b>Focused on quantum computing and programming</b>\n </td>\n </tr>\n <tr class=\"transparent\" style=\"border:none;\">\n <td style=\"border:none;\">\n The Quantum katas focus on teaching quantum computing concepts and quantum programming using the Q# language.\n </td>\n </tr>\n <tr class=\"transparent\" style=\"border:none;\">\n <td rowspan=\"2\" style=\"border:none;\">\n<svg width=\"61\" height=\"60\" viewBox=\"0 0 61 60\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M52.0728 4.5H8.60986C7.78144 4.5 7.10986 5.17157 7.10986 6V54.0428C7.10986 54.8712 7.78144 55.5428 8.60986 55.5428H52.0728C52.9012 55.5428 53.5728 54.8712 53.5728 54.0428V6C53.5728 5.17157 52.9012 4.5 52.0728 4.5Z\" stroke=\"url(#paint0_linear_144_946)\" stroke-width=\"3\"/>\n<path d=\"M7.44189 11.5767H54.1569\" stroke=\"url(#paint1_linear_144_946)\" stroke-width=\"3\"/>\n<path d=\"M10.6484 9.41176C11.4072 9.41176 12.0224 8.79661 12.0224 8.03779C12.0224 7.27897 11.4072 6.66382 10.6484 6.66382C9.88956 6.66382 9.27441 7.27897 9.27441 8.03779C9.27441 8.79661 9.88956 9.41176 10.6484 9.41176Z\" fill=\"url(#paint2_linear_144_946)\"/>\n<path d=\"M15.228 9.41176C15.9868 9.41176 16.6019 8.79661 16.6019 8.03779C16.6019 7.27897 15.9868 6.66382 15.228 6.66382C14.4692 6.66382 13.854 7.27897 13.854 8.03779C13.854 8.79661 14.4692 9.41176 15.228 9.41176Z\" fill=\"url(#paint3_linear_144_946)\"/>\n<path d=\"M19.8076 9.41176C20.5664 9.41176 21.1815 8.79661 21.1815 8.03779C21.1815 7.27897 20.5664 6.66382 19.8076 6.66382C19.0487 6.66382 18.4336 7.27897 18.4336 8.03779C18.4336 8.79661 19.0487 9.41176 19.8076 9.41176Z\" fill=\"url(#paint4_linear_144_946)\"/>\n<path d=\"M21.6099 18L16.6099 21.1818L21.6099 25\" stroke=\"url(#paint5_linear_144_946)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M32.6099 25L36.6099 21.8182L32.6099 18\" stroke=\"url(#paint6_linear_144_946)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M25.1816 16.5952L28.3165 26\" stroke=\"url(#paint7_linear_144_946)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M15.6934 33.8157L20.8201 33.8552\" stroke=\"url(#paint8_linear_144_946)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M15.6177 39L20.7443 39.0395\" stroke=\"url(#paint9_linear_144_946)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M15.6177 44L20.7443 44.0395\" stroke=\"url(#paint10_linear_144_946)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M23.6099 33.8684L39.6232 34.0001\" stroke=\"url(#paint11_linear_144_946)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M23.6934 39L39.7067 39.1317\" stroke=\"url(#paint12_linear_144_946)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M23.6934 44L39.7067 44.1317\" stroke=\"url(#paint13_linear_144_946)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<defs>\n<linearGradient id=\"paint0_linear_144_946\" x1=\"30.3414\" y1=\"3\" x2=\"30.3414\" y2=\"57.0428\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228BE3\"/>\n<stop offset=\"1\" stop-color=\"#46CEA4\"/>\n</linearGradient>\n<linearGradient id=\"paint1_linear_144_946\" x1=\"-nan\" y1=\"-nan\" x2=\"-nan\" y2=\"-nan\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#238EE0\"/>\n<stop offset=\"1\" stop-color=\"#3DCAAA\"/>\n</linearGradient>\n<linearGradient id=\"paint2_linear_144_946\" x1=\"10.6484\" y1=\"6.66382\" x2=\"10.6484\" y2=\"9.41176\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#2390DF\"/>\n<stop offset=\"1\" stop-color=\"#49CFA2\"/>\n</linearGradient>\n<linearGradient id=\"paint3_linear_144_946\" x1=\"15.228\" y1=\"6.66382\" x2=\"15.228\" y2=\"9.41176\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#2390DF\"/>\n<stop offset=\"1\" stop-color=\"#49CFA2\"/>\n</linearGradient>\n<linearGradient id=\"paint4_linear_144_946\" x1=\"19.8076\" y1=\"6.66382\" x2=\"19.8076\" y2=\"9.41176\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#2390DF\"/>\n<stop offset=\"1\" stop-color=\"#49CFA2\"/>\n</linearGradient>\n<linearGradient id=\"paint5_linear_144_946\" x1=\"19.1099\" y1=\"18\" x2=\"19.1099\" y2=\"25\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228BE3\"/>\n<stop offset=\"1\" stop-color=\"#44CDA6\"/>\n</linearGradient>\n<linearGradient id=\"paint6_linear_144_946\" x1=\"34.6099\" y1=\"25\" x2=\"34.6099\" y2=\"18\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#218AE4\"/>\n<stop offset=\"1\" stop-color=\"#43CDA6\"/>\n</linearGradient>\n<linearGradient id=\"paint7_linear_144_946\" x1=\"26.749\" y1=\"21.2976\" x2=\"25.8004\" y2=\"21.6138\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228DE1\"/>\n<stop offset=\"1\" stop-color=\"#48CFA3\"/>\n</linearGradient>\n<linearGradient id=\"paint8_linear_144_946\" x1=\"18.2491\" y1=\"34.8354\" x2=\"18.2414\" y2=\"35.8354\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#238EE0\"/>\n<stop offset=\"1\" stop-color=\"#46CEA4\"/>\n</linearGradient>\n<linearGradient id=\"paint9_linear_144_946\" x1=\"18.1733\" y1=\"40.0197\" x2=\"18.1656\" y2=\"41.0198\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228AE3\"/>\n<stop offset=\"1\" stop-color=\"#46CEA4\"/>\n</linearGradient>\n<linearGradient id=\"paint10_linear_144_946\" x1=\"18.1733\" y1=\"45.0197\" x2=\"18.1656\" y2=\"46.0198\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228AE3\"/>\n<stop offset=\"1\" stop-color=\"#46CEA4\"/>\n</linearGradient>\n<linearGradient id=\"paint11_linear_144_946\" x1=\"31.6093\" y1=\"34.9342\" x2=\"31.6011\" y2=\"35.9342\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#218AE4\"/>\n<stop offset=\"1\" stop-color=\"#48CFA3\"/>\n</linearGradient>\n<linearGradient id=\"paint12_linear_144_946\" x1=\"31.6928\" y1=\"40.0658\" x2=\"31.6846\" y2=\"41.0658\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#218AE4\"/>\n<stop offset=\"1\" stop-color=\"#48CFA3\"/>\n</linearGradient>\n<linearGradient id=\"paint13_linear_144_946\" x1=\"31.6928\" y1=\"45.0658\" x2=\"31.6846\" y2=\"46.0658\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#218AE4\"/>\n<stop offset=\"1\" stop-color=\"#48CFA3\"/>\n</linearGradient>\n</defs>\n</svg>\n\n</td>\n <td style=\"border:none;\">\n <b>Tutorials with theory and interactive hands-on exercises</b>\n </td>\n </tr>\n <tr class=\"transparent\" style=\"border:none;\">\n <td style=\"border:none;\">\n Each tutorial includes relevant theory and supporting interactive exercises designed to test knowledge.\n </td>\n </tr>\n </tbody>\n</table>",
|
|
15
|
+
"asMarkdown": "\nkaˑ ta | kah-tuh\n_The Japanese word for \"form\", a pattern of learning and practicing new skills._\n\n<style>\n.transparent {\n background: rgba(0, 0, 0, 0.0) !important;\n}\n</style>\n<table>\n <tbody>\n <tr class=\"transparent\" style=\"border:none;\">\n <td rowspan=\"2\" style=\"border:none;\">\n<svg width=\"59\" height=\"60\" viewBox=\"0 0 59 60\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M11.4624 42.776C12.9479 42.8256 13.6612 43.3574 14.1557 44.0384C14.7665 44.8796 15.1111 46.0279 15.5687 47.5527L15.6351 47.7738C16.0837 49.2659 16.6595 51.1152 17.9024 52.5503C19.239 54.0937 21.1862 55.0006 23.9949 55.0006H41.7125C45.3156 55.0006 48.0022 52.6796 49.9728 49.7757C51.9525 46.8585 53.4288 43.05 54.5789 39.3778C55.9023 35.1526 57.5578 29.8603 57.4967 25.6038C57.4657 23.4508 56.9975 21.3099 55.588 19.6996C54.1401 18.0454 51.9521 17.2335 49.1065 17.2335H48.8959C48.8542 17.2301 48.812 17.2284 48.7694 17.2284C47.1251 17.2284 46.364 16.6776 45.8445 15.9622C45.2338 15.121 44.8892 13.9727 44.4315 12.448L44.3652 12.2269C43.9165 10.7347 43.3408 8.88542 42.0978 7.45027C40.7612 5.90694 38.8141 5 36.0054 5H18.2877C14.6844 5 11.9979 7.32167 10.0273 10.2262C8.04769 13.1441 6.57146 16.9535 5.42128 20.6266C4.0979 24.8529 2.44244 30.1465 2.5036 34.4039C2.53453 36.5573 3.00271 38.6986 4.4121 40.3092C5.86002 41.9638 8.04801 42.776 10.8937 42.776H11.4624ZM8.4035 21.5605C9.52838 17.9681 10.896 14.512 12.6133 11.9807C14.3397 9.4361 16.2033 8.125 18.2877 8.125H30.5829C29.9813 9.08825 29.4908 10.2066 29.0532 11.3837C28.5547 12.7246 28.0917 14.2365 27.6125 15.8012L27.5067 16.1468C25.602 22.3601 23.2175 30.3716 21.6876 35.5382C20.9852 37.9103 18.8486 39.5582 16.3937 39.6472H11.2308C11.1939 39.6472 11.1574 39.6485 11.1211 39.651H10.8937C8.63765 39.651 7.44014 39.0241 6.76382 38.2512C6.04896 37.4343 5.65414 36.1596 5.62828 34.359C5.57583 30.7084 7.03152 25.9419 8.4035 21.5605ZM47.387 48.0209C45.6607 50.5647 43.7971 51.8756 41.7125 51.8756H29.4178C30.0192 50.9127 30.5095 49.7949 30.947 48.6184C31.4455 47.2778 31.9085 45.7662 32.3877 44.2019L32.4935 43.8565C34.3981 37.6451 36.7825 29.6362 38.3124 24.4708C39.0348 22.0317 41.2736 20.3585 43.8155 20.3585H49.1065C51.3627 20.3585 52.5603 20.9852 53.2366 21.7579C53.9513 22.5745 54.3461 23.8487 54.372 25.6487C54.4244 29.2983 52.9688 34.0633 51.5968 38.4437C50.4719 42.0352 49.1043 45.4903 47.387 48.0209ZM26.2496 39.6472H22.9422C23.7238 38.7267 24.3252 37.6371 24.684 36.4255C25.3602 34.1419 26.2028 31.3045 27.0966 28.3137L28.2663 24.4303C28.9953 22.01 31.2243 20.3534 33.752 20.3534H37.0652C36.28 21.2757 35.676 22.3681 35.3161 23.5833C34.6398 25.8665 33.7972 28.7034 32.9033 31.6935L31.7352 35.5707C31.0061 37.9908 28.7771 39.6472 26.2496 39.6472ZM33.752 17.2284C32.5074 17.2284 31.3097 17.4883 30.2188 17.9634C30.3117 17.6594 30.4036 17.359 30.4945 17.0627L30.5919 16.7447C31.0803 15.1503 31.5173 13.7236 31.9824 12.4726C32.4803 11.1333 32.9725 10.1036 33.5137 9.36493C34.0132 8.68326 34.8201 8.125 36.0054 8.125C38.0615 8.125 39.0865 8.74662 39.7356 9.49612C40.4784 10.3538 40.902 11.5616 41.3725 13.1266C41.4081 13.2453 41.4443 13.3668 41.4811 13.4909C41.8282 14.6592 42.2391 16.0421 42.9424 17.2284L33.752 17.2284ZM26.2496 42.7722C27.494 42.7722 28.6915 42.5124 29.7822 42.0374C29.6891 42.3422 29.5969 42.6434 29.5058 42.9404L29.4084 43.2582C28.9201 44.8521 28.483 46.2786 28.0179 47.5293C27.5201 48.8682 27.0279 49.8976 26.4867 50.636C25.9873 51.3174 25.1803 51.8756 23.9949 51.8756C21.9388 51.8756 20.9138 51.254 20.2646 50.5045C19.5218 49.6468 19.0983 48.439 18.6278 46.874C18.5921 46.7554 18.556 46.6338 18.5191 46.5098C18.172 45.3414 17.7612 43.9585 17.0578 42.7722H26.2496Z\" fill=\"url(#paint0_linear_208_693)\"/>\n<defs>\n<linearGradient id=\"paint0_linear_208_693\" x1=\"30.0001\" y1=\"5\" x2=\"30.0001\" y2=\"55.0006\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#218AE4\"/>\n<stop offset=\"0.473958\" stop-color=\"#33BFB5\"/>\n<stop offset=\"1\" stop-color=\"#49CFA3\"/>\n</linearGradient>\n</defs>\n</svg>\n\n</td>\n <td style=\"border:none;\">\n <b>Self-paced AI-assisted learning</b>\n </td>\n </tr>\n <tr class=\"transparent\" style=\"border:none;\">\n <td style=\"border:none;\">\n Quantum katas are self-paced learning tutorials assisted by Copilot in Azure Quantum.\n </td>\n </tr>\n <tr class=\"transparent\" style=\"border:none;\">\n <td rowspan=\"2\" style=\"border:none;\">\n<svg width=\"61\" height=\"60\" viewBox=\"0 0 61 60\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M39.8865 30.3697C39.8865 31.3851 39.112 32.5816 37.2448 33.597C35.4256 34.5863 32.827 35.2368 29.8883 35.2368C26.9495 35.2368 24.3509 34.5863 22.5318 33.597C20.6645 32.5816 19.8901 31.3851 19.8901 30.3697C19.8901 29.3543 20.6645 28.1579 22.5318 27.1424C24.3509 26.1532 26.9495 25.5027 29.8883 25.5027C32.827 25.5027 35.4256 26.1532 37.2448 27.1424C39.112 28.1579 39.8865 29.3543 39.8865 30.3697Z\" stroke=\"url(#paint0_linear_144_926)\" stroke-width=\"2.5\"/>\n<path d=\"M30.0916 40.2027C29.0762 40.2027 27.8798 39.4282 26.8643 37.561C25.8751 35.7418 25.2246 33.1432 25.2246 30.2045C25.2246 27.2657 25.8751 24.6671 26.8643 22.848C27.8798 20.9808 29.0763 20.2063 30.0916 20.2063C31.107 20.2063 32.3035 20.9808 33.3189 22.848C34.3082 24.6671 34.9587 27.2657 34.9587 30.2045C34.9587 33.1432 34.3082 35.7418 33.3189 37.561C32.3035 39.4282 31.107 40.2027 30.0916 40.2027Z\" stroke=\"url(#paint1_linear_144_926)\" stroke-width=\"2.5\"/>\n<path d=\"M30.1231 32.2192C31.0649 32.2192 31.8283 31.4557 31.8283 30.514C31.8283 29.5723 31.0649 28.8088 30.1231 28.8088C29.1814 28.8088 28.418 29.5723 28.418 30.514C28.418 31.4557 29.1814 32.2192 30.1231 32.2192Z\" stroke=\"url(#paint2_linear_144_926)\" stroke-width=\"2\"/>\n<path d=\"M42.7327 15.4275H17.2871C16.0445 15.4275 15.0371 16.4348 15.0371 17.6775V43.1231C15.0371 44.3657 16.0445 45.3731 17.2871 45.3731H42.7327C43.9753 45.3731 44.9827 44.3657 44.9827 43.1231V17.6775C44.9827 16.4348 43.9753 15.4275 42.7327 15.4275Z\" stroke=\"url(#paint3_linear_144_926)\" stroke-width=\"3.5\"/>\n<path d=\"M34.3481 56.9988C34.3481 57.9653 35.1316 58.7488 36.0981 58.7488C37.0646 58.7488 37.8481 57.9653 37.8481 56.9988H34.3481ZM34.3481 49.6211V56.9988H37.8481V49.6211H34.3481Z\" fill=\"url(#paint4_linear_144_926)\"/>\n<path d=\"M28.127 56.9988C28.127 57.9653 28.9105 58.7488 29.877 58.7488C30.8435 58.7488 31.627 57.9653 31.627 56.9988H28.127ZM28.127 49.6211V56.9988H31.627V49.6211H28.127Z\" fill=\"url(#paint5_linear_144_926)\"/>\n<path d=\"M21.9058 56.9988C21.9058 57.9653 22.6893 58.7488 23.6558 58.7488C24.6223 58.7488 25.4058 57.9653 25.4058 56.9988H21.9058ZM21.9058 49.6211V56.9988H25.4058V49.6211H21.9058Z\" fill=\"url(#paint6_linear_144_926)\"/>\n<path d=\"M56.6096 37.5481C57.5761 37.5481 58.3596 36.7646 58.3596 35.7981C58.3596 34.8316 57.5761 34.0481 56.6096 34.0481V37.5481ZM49.2319 37.5481H56.6096V34.0481H49.2319V37.5481Z\" fill=\"url(#paint7_linear_144_926)\"/>\n<path d=\"M56.6096 31.3267C57.5761 31.3267 58.3596 30.5432 58.3596 29.5767C58.3596 28.6102 57.5761 27.8267 56.6096 27.8267V31.3267ZM49.2319 31.3267H56.6096V27.8267H49.2319V31.3267Z\" fill=\"url(#paint8_linear_144_926)\"/>\n<path d=\"M56.6096 25.1052C57.5761 25.1052 58.3596 24.3217 58.3596 23.3552C58.3596 22.3887 57.5761 21.6052 56.6096 21.6052V25.1052ZM49.2319 25.1052H56.6096V21.6052H49.2319V25.1052Z\" fill=\"url(#paint9_linear_144_926)\"/>\n<path d=\"M3.60986 21.605C2.64336 21.605 1.85986 22.3885 1.85986 23.355C1.85986 24.3215 2.64336 25.105 3.60986 25.105V21.605ZM10.9876 21.605H3.60986V25.105H10.9876V21.605Z\" fill=\"url(#paint10_linear_144_926)\"/>\n<path d=\"M3.60986 27.8264C2.64336 27.8264 1.85986 28.6099 1.85986 29.5764C1.85986 30.5429 2.64336 31.3264 3.60986 31.3264V27.8264ZM10.9876 27.8264H3.60986V31.3264H10.9876V27.8264Z\" fill=\"url(#paint11_linear_144_926)\"/>\n<path d=\"M3.60986 34.0471C2.64336 34.0471 1.85986 34.8306 1.85986 35.7971C1.85986 36.7636 2.64336 37.5471 3.60986 37.5471V34.0471ZM10.9876 34.0471H3.60986V37.5471H10.9876V34.0471Z\" fill=\"url(#paint12_linear_144_926)\"/>\n<path d=\"M37.8481 4C37.8481 3.0335 37.0646 2.25 36.0981 2.25C35.1316 2.25 34.3481 3.0335 34.3481 4H37.8481ZM37.8481 11.3777V4H34.3481V11.3777H37.8481Z\" fill=\"url(#paint13_linear_144_926)\"/>\n<path d=\"M31.627 4C31.627 3.0335 30.8435 2.25 29.877 2.25C28.9105 2.25 28.127 3.0335 28.127 4H31.627ZM31.627 11.3777V4H28.127V11.3777H31.627Z\" fill=\"url(#paint14_linear_144_926)\"/>\n<path d=\"M25.4058 4C25.4058 3.0335 24.6223 2.25 23.6558 2.25C22.6893 2.25 21.9058 3.0335 21.9058 4H25.4058ZM25.4058 11.3777V4H21.9058V11.3777H25.4058Z\" fill=\"url(#paint15_linear_144_926)\"/>\n<defs>\n<linearGradient id=\"paint0_linear_144_926\" x1=\"29.8883\" y1=\"24.2527\" x2=\"29.8883\" y2=\"36.4868\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#238DE1\"/>\n<stop offset=\"1\" stop-color=\"#49CFA3\"/>\n</linearGradient>\n<linearGradient id=\"paint1_linear_144_926\" x1=\"36.2087\" y1=\"30.2045\" x2=\"23.9746\" y2=\"30.2045\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228BE3\"/>\n<stop offset=\"1\" stop-color=\"#47CFA4\"/>\n</linearGradient>\n<linearGradient id=\"paint2_linear_144_926\" x1=\"30.1231\" y1=\"27.8088\" x2=\"30.1231\" y2=\"33.2192\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#218AE4\"/>\n<stop offset=\"1\" stop-color=\"#48CFA3\"/>\n</linearGradient>\n<linearGradient id=\"paint3_linear_144_926\" x1=\"13.9784\" y1=\"14.7144\" x2=\"44.3932\" y2=\"46.8572\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228BE2\"/>\n<stop offset=\"1\" stop-color=\"#4AD0A2\"/>\n</linearGradient>\n<linearGradient id=\"paint4_linear_144_926\" x1=\"38.6748\" y1=\"55.2712\" x2=\"36.1597\" y2=\"52.3849\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228CE2\"/>\n<stop offset=\"1\" stop-color=\"#48CFA3\"/>\n</linearGradient>\n<linearGradient id=\"paint5_linear_144_926\" x1=\"32.4537\" y1=\"55.2712\" x2=\"29.9386\" y2=\"52.3849\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228CE2\"/>\n<stop offset=\"1\" stop-color=\"#48CFA3\"/>\n</linearGradient>\n<linearGradient id=\"paint6_linear_144_926\" x1=\"26.2325\" y1=\"55.2712\" x2=\"23.7174\" y2=\"52.3849\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228CE2\"/>\n<stop offset=\"1\" stop-color=\"#48CFA3\"/>\n</linearGradient>\n<linearGradient id=\"paint7_linear_144_926\" x1=\"54.882\" y1=\"33.2214\" x2=\"51.9957\" y2=\"35.7365\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228DE1\"/>\n<stop offset=\"1\" stop-color=\"#48CFA3\"/>\n</linearGradient>\n<linearGradient id=\"paint8_linear_144_926\" x1=\"54.882\" y1=\"27\" x2=\"51.9957\" y2=\"29.5151\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228DE1\"/>\n<stop offset=\"1\" stop-color=\"#48CFA3\"/>\n</linearGradient>\n<linearGradient id=\"paint9_linear_144_926\" x1=\"54.882\" y1=\"20.7786\" x2=\"51.9957\" y2=\"23.2936\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#2492DD\"/>\n<stop offset=\"1\" stop-color=\"#47CFA4\"/>\n</linearGradient>\n<linearGradient id=\"paint10_linear_144_926\" x1=\"5.33745\" y1=\"25.9317\" x2=\"8.22376\" y2=\"23.4166\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228CE2\"/>\n<stop offset=\"1\" stop-color=\"#41CCA7\"/>\n</linearGradient>\n<linearGradient id=\"paint11_linear_144_926\" x1=\"5.33745\" y1=\"32.1531\" x2=\"8.22376\" y2=\"29.638\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228CE2\"/>\n<stop offset=\"1\" stop-color=\"#41CCA7\"/>\n</linearGradient>\n<linearGradient id=\"paint12_linear_144_926\" x1=\"5.33745\" y1=\"38.3738\" x2=\"8.22376\" y2=\"35.8587\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228CE2\"/>\n<stop offset=\"1\" stop-color=\"#41CCA7\"/>\n</linearGradient>\n<linearGradient id=\"paint13_linear_144_926\" x1=\"33.5215\" y1=\"5.72759\" x2=\"36.0365\" y2=\"8.6139\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228DE1\"/>\n<stop offset=\"1\" stop-color=\"#4AD0A2\"/>\n</linearGradient>\n<linearGradient id=\"paint14_linear_144_926\" x1=\"27.3004\" y1=\"5.72759\" x2=\"29.8154\" y2=\"8.6139\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228DE1\"/>\n<stop offset=\"1\" stop-color=\"#4AD0A2\"/>\n</linearGradient>\n<linearGradient id=\"paint15_linear_144_926\" x1=\"21.0792\" y1=\"5.72759\" x2=\"23.5942\" y2=\"8.6139\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228DE1\"/>\n<stop offset=\"1\" stop-color=\"#4AD0A2\"/>\n</linearGradient>\n</defs>\n</svg>\n\n</td>\n <td style=\"border:none;\">\n <b>Focused on quantum computing and programming</b>\n </td>\n </tr>\n <tr class=\"transparent\" style=\"border:none;\">\n <td style=\"border:none;\">\n The Quantum katas focus on teaching quantum computing concepts and quantum programming using the Q# language.\n </td>\n </tr>\n <tr class=\"transparent\" style=\"border:none;\">\n <td rowspan=\"2\" style=\"border:none;\">\n<svg width=\"61\" height=\"60\" viewBox=\"0 0 61 60\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M52.0728 4.5H8.60986C7.78144 4.5 7.10986 5.17157 7.10986 6V54.0428C7.10986 54.8712 7.78144 55.5428 8.60986 55.5428H52.0728C52.9012 55.5428 53.5728 54.8712 53.5728 54.0428V6C53.5728 5.17157 52.9012 4.5 52.0728 4.5Z\" stroke=\"url(#paint0_linear_144_946)\" stroke-width=\"3\"/>\n<path d=\"M7.44189 11.5767H54.1569\" stroke=\"url(#paint1_linear_144_946)\" stroke-width=\"3\"/>\n<path d=\"M10.6484 9.41176C11.4072 9.41176 12.0224 8.79661 12.0224 8.03779C12.0224 7.27897 11.4072 6.66382 10.6484 6.66382C9.88956 6.66382 9.27441 7.27897 9.27441 8.03779C9.27441 8.79661 9.88956 9.41176 10.6484 9.41176Z\" fill=\"url(#paint2_linear_144_946)\"/>\n<path d=\"M15.228 9.41176C15.9868 9.41176 16.6019 8.79661 16.6019 8.03779C16.6019 7.27897 15.9868 6.66382 15.228 6.66382C14.4692 6.66382 13.854 7.27897 13.854 8.03779C13.854 8.79661 14.4692 9.41176 15.228 9.41176Z\" fill=\"url(#paint3_linear_144_946)\"/>\n<path d=\"M19.8076 9.41176C20.5664 9.41176 21.1815 8.79661 21.1815 8.03779C21.1815 7.27897 20.5664 6.66382 19.8076 6.66382C19.0487 6.66382 18.4336 7.27897 18.4336 8.03779C18.4336 8.79661 19.0487 9.41176 19.8076 9.41176Z\" fill=\"url(#paint4_linear_144_946)\"/>\n<path d=\"M21.6099 18L16.6099 21.1818L21.6099 25\" stroke=\"url(#paint5_linear_144_946)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M32.6099 25L36.6099 21.8182L32.6099 18\" stroke=\"url(#paint6_linear_144_946)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M25.1816 16.5952L28.3165 26\" stroke=\"url(#paint7_linear_144_946)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M15.6934 33.8157L20.8201 33.8552\" stroke=\"url(#paint8_linear_144_946)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M15.6177 39L20.7443 39.0395\" stroke=\"url(#paint9_linear_144_946)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M15.6177 44L20.7443 44.0395\" stroke=\"url(#paint10_linear_144_946)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M23.6099 33.8684L39.6232 34.0001\" stroke=\"url(#paint11_linear_144_946)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M23.6934 39L39.7067 39.1317\" stroke=\"url(#paint12_linear_144_946)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<path d=\"M23.6934 44L39.7067 44.1317\" stroke=\"url(#paint13_linear_144_946)\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n<defs>\n<linearGradient id=\"paint0_linear_144_946\" x1=\"30.3414\" y1=\"3\" x2=\"30.3414\" y2=\"57.0428\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228BE3\"/>\n<stop offset=\"1\" stop-color=\"#46CEA4\"/>\n</linearGradient>\n<linearGradient id=\"paint1_linear_144_946\" x1=\"-nan\" y1=\"-nan\" x2=\"-nan\" y2=\"-nan\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#238EE0\"/>\n<stop offset=\"1\" stop-color=\"#3DCAAA\"/>\n</linearGradient>\n<linearGradient id=\"paint2_linear_144_946\" x1=\"10.6484\" y1=\"6.66382\" x2=\"10.6484\" y2=\"9.41176\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#2390DF\"/>\n<stop offset=\"1\" stop-color=\"#49CFA2\"/>\n</linearGradient>\n<linearGradient id=\"paint3_linear_144_946\" x1=\"15.228\" y1=\"6.66382\" x2=\"15.228\" y2=\"9.41176\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#2390DF\"/>\n<stop offset=\"1\" stop-color=\"#49CFA2\"/>\n</linearGradient>\n<linearGradient id=\"paint4_linear_144_946\" x1=\"19.8076\" y1=\"6.66382\" x2=\"19.8076\" y2=\"9.41176\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#2390DF\"/>\n<stop offset=\"1\" stop-color=\"#49CFA2\"/>\n</linearGradient>\n<linearGradient id=\"paint5_linear_144_946\" x1=\"19.1099\" y1=\"18\" x2=\"19.1099\" y2=\"25\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228BE3\"/>\n<stop offset=\"1\" stop-color=\"#44CDA6\"/>\n</linearGradient>\n<linearGradient id=\"paint6_linear_144_946\" x1=\"34.6099\" y1=\"25\" x2=\"34.6099\" y2=\"18\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#218AE4\"/>\n<stop offset=\"1\" stop-color=\"#43CDA6\"/>\n</linearGradient>\n<linearGradient id=\"paint7_linear_144_946\" x1=\"26.749\" y1=\"21.2976\" x2=\"25.8004\" y2=\"21.6138\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228DE1\"/>\n<stop offset=\"1\" stop-color=\"#48CFA3\"/>\n</linearGradient>\n<linearGradient id=\"paint8_linear_144_946\" x1=\"18.2491\" y1=\"34.8354\" x2=\"18.2414\" y2=\"35.8354\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#238EE0\"/>\n<stop offset=\"1\" stop-color=\"#46CEA4\"/>\n</linearGradient>\n<linearGradient id=\"paint9_linear_144_946\" x1=\"18.1733\" y1=\"40.0197\" x2=\"18.1656\" y2=\"41.0198\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228AE3\"/>\n<stop offset=\"1\" stop-color=\"#46CEA4\"/>\n</linearGradient>\n<linearGradient id=\"paint10_linear_144_946\" x1=\"18.1733\" y1=\"45.0197\" x2=\"18.1656\" y2=\"46.0198\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#228AE3\"/>\n<stop offset=\"1\" stop-color=\"#46CEA4\"/>\n</linearGradient>\n<linearGradient id=\"paint11_linear_144_946\" x1=\"31.6093\" y1=\"34.9342\" x2=\"31.6011\" y2=\"35.9342\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#218AE4\"/>\n<stop offset=\"1\" stop-color=\"#48CFA3\"/>\n</linearGradient>\n<linearGradient id=\"paint12_linear_144_946\" x1=\"31.6928\" y1=\"40.0658\" x2=\"31.6846\" y2=\"41.0658\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#218AE4\"/>\n<stop offset=\"1\" stop-color=\"#48CFA3\"/>\n</linearGradient>\n<linearGradient id=\"paint13_linear_144_946\" x1=\"31.6928\" y1=\"45.0658\" x2=\"31.6846\" y2=\"46.0658\" gradientUnits=\"userSpaceOnUse\">\n<stop stop-color=\"#218AE4\"/>\n<stop offset=\"1\" stop-color=\"#48CFA3\"/>\n</linearGradient>\n</defs>\n</svg>\n\n</td>\n <td style=\"border:none;\">\n <b>Tutorials with theory and interactive hands-on exercises</b>\n </td>\n </tr>\n <tr class=\"transparent\" style=\"border:none;\">\n <td style=\"border:none;\">\n Each tutorial includes relevant theory and supporting interactive exercises designed to test knowledge.\n </td>\n </tr>\n </tbody>\n</table>"
|
|
16
16
|
}
|
|
17
17
|
]
|
|
18
18
|
},
|
|
@@ -41,7 +41,12 @@ export declare class QSharpLanguageService implements ILanguageService {
|
|
|
41
41
|
private languageService;
|
|
42
42
|
private eventHandler;
|
|
43
43
|
private code;
|
|
44
|
-
|
|
44
|
+
private readFile;
|
|
45
|
+
private backgroundWork;
|
|
46
|
+
constructor(wasm: QscWasm, readFile?: (uri: string) => Promise<string | null>, listDir?: (uri: string) => Promise<[string, number][]>, getManifest?: (uri: string) => Promise<{
|
|
47
|
+
manifestDirectory: string;
|
|
48
|
+
} | null>);
|
|
49
|
+
loadFile(uri: string): Promise<string | null>;
|
|
45
50
|
updateConfiguration(config: IWorkspaceConfiguration): Promise<void>;
|
|
46
51
|
updateDocument(documentUri: string, version: number, code: string): Promise<void>;
|
|
47
52
|
updateNotebookDocument(notebookUri: string, version: number, metadata: INotebookMetadata, cells: {
|
|
@@ -65,6 +70,6 @@ export declare class QSharpLanguageService implements ILanguageService {
|
|
|
65
70
|
removeEventListener<T extends LanguageServiceEvent["type"]>(type: T, listener: (event: Extract<LanguageServiceEvent, {
|
|
66
71
|
type: T;
|
|
67
72
|
}>) => void): void;
|
|
68
|
-
onDiagnostics(uri: string, version: number | undefined, diagnostics: VSDiagnostic[]): void
|
|
73
|
+
onDiagnostics(uri: string, version: number | undefined, diagnostics: VSDiagnostic[]): Promise<void>;
|
|
69
74
|
}
|
|
70
75
|
export {};
|
|
@@ -5,12 +5,25 @@ import { log } from "../log.js";
|
|
|
5
5
|
import { mapDiagnostics, mapUtf16UnitsToUtf8Units, mapUtf8UnitsToUtf16Units, } from "../vsdiagnostic.js";
|
|
6
6
|
export const qsharpLibraryUriScheme = "qsharp-library-source";
|
|
7
7
|
export class QSharpLanguageService {
|
|
8
|
-
constructor(wasm) {
|
|
8
|
+
constructor(wasm, readFile = () => Promise.resolve(null), listDir = () => Promise.resolve([]), getManifest = () => Promise.resolve(null)) {
|
|
9
9
|
this.eventHandler = new EventTarget();
|
|
10
10
|
// We need to keep a copy of the code for mapping diagnostics to utf16 offsets
|
|
11
11
|
this.code = {};
|
|
12
12
|
log.info("Constructing a QSharpLanguageService instance");
|
|
13
|
-
this.languageService = new wasm.LanguageService(
|
|
13
|
+
this.languageService = new wasm.LanguageService();
|
|
14
|
+
this.backgroundWork = this.languageService.start_background_work(this.onDiagnostics.bind(this), readFile, listDir, getManifest);
|
|
15
|
+
this.readFile = readFile;
|
|
16
|
+
}
|
|
17
|
+
async loadFile(uri) {
|
|
18
|
+
const result = this.code[uri];
|
|
19
|
+
if (result === undefined || result === null) {
|
|
20
|
+
return await this.readFile(uri);
|
|
21
|
+
}
|
|
22
|
+
if (result === null || result === undefined) {
|
|
23
|
+
log.error("File", uri, "wasn't in document map when we expected it to be");
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
return result;
|
|
14
27
|
}
|
|
15
28
|
async updateConfiguration(config) {
|
|
16
29
|
this.languageService.update_configuration(config);
|
|
@@ -37,8 +50,8 @@ export class QSharpLanguageService {
|
|
|
37
50
|
this.languageService.close_notebook_document(documentUri, cellUris);
|
|
38
51
|
}
|
|
39
52
|
async getCompletions(documentUri, offset) {
|
|
40
|
-
const code = this.
|
|
41
|
-
if (code ===
|
|
53
|
+
const code = await this.loadFile(documentUri);
|
|
54
|
+
if (code === null) {
|
|
42
55
|
log.error(`getCompletions: expected ${documentUri} to be in the document map`);
|
|
43
56
|
return { items: [] };
|
|
44
57
|
}
|
|
@@ -50,8 +63,8 @@ export class QSharpLanguageService {
|
|
|
50
63
|
return result;
|
|
51
64
|
}
|
|
52
65
|
async getHover(documentUri, offset) {
|
|
53
|
-
const code = this.
|
|
54
|
-
if (code ===
|
|
66
|
+
const code = await this.loadFile(documentUri);
|
|
67
|
+
if (code === null) {
|
|
55
68
|
log.error(`getHover: expected ${documentUri} to be in the document map`);
|
|
56
69
|
return undefined;
|
|
57
70
|
}
|
|
@@ -63,22 +76,22 @@ export class QSharpLanguageService {
|
|
|
63
76
|
return result;
|
|
64
77
|
}
|
|
65
78
|
async getDefinition(documentUri, offset) {
|
|
66
|
-
const sourceCode = this.
|
|
67
|
-
if (sourceCode === undefined) {
|
|
79
|
+
const sourceCode = await this.loadFile(documentUri);
|
|
80
|
+
if (sourceCode === undefined || sourceCode === null) {
|
|
68
81
|
log.error(`getDefinition: expected ${documentUri} to be in the document map`);
|
|
69
82
|
return undefined;
|
|
70
83
|
}
|
|
71
84
|
const convertedOffset = mapUtf16UnitsToUtf8Units([offset], sourceCode)[offset];
|
|
72
85
|
const result = this.languageService.get_definition(documentUri, convertedOffset);
|
|
73
86
|
if (result) {
|
|
74
|
-
let targetCode = this.
|
|
75
|
-
if (targetCode ===
|
|
87
|
+
let targetCode = (await this.loadFile(result.source)) || null;
|
|
88
|
+
if (targetCode === null) {
|
|
76
89
|
// Inspect the URL protocol (equivalent to the URI scheme + ":").
|
|
77
90
|
// If the scheme is our library scheme, we need to call the wasm to
|
|
78
91
|
// provide the library file's contents to do the utf8->utf16 mapping.
|
|
79
92
|
const url = new URL(result.source);
|
|
80
93
|
if (url.protocol === qsharpLibraryUriScheme + ":") {
|
|
81
|
-
targetCode = wasm.get_library_source_content(url.pathname);
|
|
94
|
+
targetCode = wasm.get_library_source_content(url.pathname) || null;
|
|
82
95
|
if (targetCode === undefined) {
|
|
83
96
|
log.error(`getDefinition: expected ${url} to be in the library`);
|
|
84
97
|
return undefined;
|
|
@@ -96,8 +109,8 @@ export class QSharpLanguageService {
|
|
|
96
109
|
return result;
|
|
97
110
|
}
|
|
98
111
|
async getReferences(documentUri, offset, includeDeclaration) {
|
|
99
|
-
const sourceCode = this.
|
|
100
|
-
if (sourceCode === undefined) {
|
|
112
|
+
const sourceCode = await this.loadFile(documentUri);
|
|
113
|
+
if (sourceCode === undefined || sourceCode === null) {
|
|
101
114
|
log.error(`getReferences: expected ${documentUri} to be in the document map`);
|
|
102
115
|
return [];
|
|
103
116
|
}
|
|
@@ -106,13 +119,13 @@ export class QSharpLanguageService {
|
|
|
106
119
|
if (results && results.length > 0) {
|
|
107
120
|
const references = [];
|
|
108
121
|
for (const result of results) {
|
|
109
|
-
let resultCode = this.
|
|
122
|
+
let resultCode = await this.loadFile(result.source);
|
|
110
123
|
// Inspect the URL protocol (equivalent to the URI scheme + ":").
|
|
111
124
|
// If the scheme is our library scheme, we need to call the wasm to
|
|
112
125
|
// provide the library file's contents to do the utf8->utf16 mapping.
|
|
113
126
|
const url = new URL(result.source);
|
|
114
127
|
if (url.protocol === qsharpLibraryUriScheme + ":") {
|
|
115
|
-
resultCode = wasm.get_library_source_content(url.pathname);
|
|
128
|
+
resultCode = wasm.get_library_source_content(url.pathname) || null;
|
|
116
129
|
if (resultCode === undefined) {
|
|
117
130
|
log.error(`getReferences: expected ${url} to be in the library`);
|
|
118
131
|
}
|
|
@@ -133,8 +146,8 @@ export class QSharpLanguageService {
|
|
|
133
146
|
}
|
|
134
147
|
}
|
|
135
148
|
async getSignatureHelp(documentUri, offset) {
|
|
136
|
-
const code = this.
|
|
137
|
-
if (code ===
|
|
149
|
+
const code = await this.loadFile(documentUri);
|
|
150
|
+
if (code === null) {
|
|
138
151
|
log.error(`expected ${documentUri} to be in the document map`);
|
|
139
152
|
return undefined;
|
|
140
153
|
}
|
|
@@ -152,8 +165,8 @@ export class QSharpLanguageService {
|
|
|
152
165
|
return result;
|
|
153
166
|
}
|
|
154
167
|
async getRename(documentUri, offset, newName) {
|
|
155
|
-
const code = this.
|
|
156
|
-
if (code ===
|
|
168
|
+
const code = await this.loadFile(documentUri);
|
|
169
|
+
if (code === null) {
|
|
157
170
|
log.error(`expected ${documentUri} to be in the document map`);
|
|
158
171
|
return undefined;
|
|
159
172
|
}
|
|
@@ -161,7 +174,7 @@ export class QSharpLanguageService {
|
|
|
161
174
|
const result = this.languageService.get_rename(documentUri, convertedOffset, newName);
|
|
162
175
|
const mappedChanges = [];
|
|
163
176
|
for (const [uri, edits] of result.changes) {
|
|
164
|
-
const code = this.
|
|
177
|
+
const code = await this.loadFile(uri);
|
|
165
178
|
if (code) {
|
|
166
179
|
const mappedEdits = edits.map((edit) => {
|
|
167
180
|
updateSpanFromUtf8ToUtf16(edit.range, code);
|
|
@@ -174,8 +187,8 @@ export class QSharpLanguageService {
|
|
|
174
187
|
return result;
|
|
175
188
|
}
|
|
176
189
|
async prepareRename(documentUri, offset) {
|
|
177
|
-
const code = this.
|
|
178
|
-
if (code ===
|
|
190
|
+
const code = await this.loadFile(documentUri);
|
|
191
|
+
if (code === null) {
|
|
179
192
|
log.error(`expected ${documentUri} to be in the document map`);
|
|
180
193
|
return undefined;
|
|
181
194
|
}
|
|
@@ -187,6 +200,8 @@ export class QSharpLanguageService {
|
|
|
187
200
|
return result;
|
|
188
201
|
}
|
|
189
202
|
async dispose() {
|
|
203
|
+
this.languageService.stop_background_work();
|
|
204
|
+
await this.backgroundWork;
|
|
190
205
|
this.languageService.free();
|
|
191
206
|
}
|
|
192
207
|
addEventListener(type, listener) {
|
|
@@ -195,18 +210,21 @@ export class QSharpLanguageService {
|
|
|
195
210
|
removeEventListener(type, listener) {
|
|
196
211
|
this.eventHandler.removeEventListener(type, listener);
|
|
197
212
|
}
|
|
198
|
-
onDiagnostics(uri, version, diagnostics) {
|
|
213
|
+
async onDiagnostics(uri, version, diagnostics) {
|
|
199
214
|
try {
|
|
200
|
-
const code = this.
|
|
215
|
+
const code = await this.loadFile(uri);
|
|
201
216
|
const empty = diagnostics.length === 0;
|
|
202
|
-
if (code ===
|
|
217
|
+
if (code === null && !empty) {
|
|
203
218
|
// We need the contents of the document to convert error offsets to utf16.
|
|
204
219
|
// But the contents aren't available after a document is closed.
|
|
205
|
-
// It is possible to get
|
|
206
|
-
//
|
|
207
|
-
//
|
|
208
|
-
//
|
|
209
|
-
|
|
220
|
+
// It is possible to get diagnostics events for a document after it's been closed,
|
|
221
|
+
// since document events are handled asynchronously by the language service.
|
|
222
|
+
// We just drop those diagnostics, assuming that eventually we will receive further
|
|
223
|
+
// events that will bring the diagnostics up to date.
|
|
224
|
+
// However, if we receive an *empty* array of diagnostics for a document, we don't want
|
|
225
|
+
// to drop that update. It's necessary for the diagnostics to get cleared for a document
|
|
226
|
+
// that has been closed.
|
|
227
|
+
log.warn(`onDiagnostics: received diagnostics for ${uri} which is not in the document map`);
|
|
210
228
|
return;
|
|
211
229
|
}
|
|
212
230
|
const event = new Event("diagnostics");
|
package/dist/main.d.ts
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import { ICompiler, ICompilerWorker } from "./compiler/compiler.js";
|
|
2
2
|
import { ILanguageService, ILanguageServiceWorker, qsharpLibraryUriScheme } from "./language-service/language-service.js";
|
|
3
3
|
import { IDebugService, IDebugServiceWorker } from "./debug-service/debug-service.js";
|
|
4
|
+
import { ProjectLoader } from "../lib/node/qsc_wasm.cjs";
|
|
4
5
|
export { qsharpLibraryUriScheme };
|
|
5
6
|
export declare function getLibrarySourceContent(path: string): Promise<string | undefined>;
|
|
6
7
|
export declare function getCompiler(): ICompiler;
|
|
8
|
+
export declare function getProjectLoader(readFile: (path: string) => Promise<string | null>, loadDirectory: (path: string) => Promise<[string, number][]>, getManifest: (path: string) => Promise<{
|
|
9
|
+
manifestDirectory: string;
|
|
10
|
+
} | null>): ProjectLoader;
|
|
7
11
|
export declare function getCompilerWorker(): ICompilerWorker;
|
|
8
12
|
export declare function getDebugService(): IDebugService;
|
|
9
13
|
export declare function getDebugServiceWorker(): IDebugServiceWorker;
|
|
10
|
-
export declare function getLanguageService():
|
|
14
|
+
export declare function getLanguageService(readFile?: (uri: string) => Promise<string | null>, listDir?: (uri: string) => Promise<[string, number][]>, getManifest?: (uri: string) => Promise<{
|
|
15
|
+
manifestDirectory: string;
|
|
16
|
+
} | null>): ILanguageService;
|
|
11
17
|
export declare function getLanguageServiceWorker(): ILanguageServiceWorker;
|