diff --git a/docs/api/functions/qunova-chemistry.mdx b/docs/api/functions/qunova-chemistry.mdx index 1463cb7dd15..3085269ec2f 100644 --- a/docs/api/functions/qunova-chemistry.mdx +++ b/docs/api/functions/qunova-chemistry.mdx @@ -198,7 +198,7 @@ Whether or not to use configuration [`recovery`](/docs/api/qiskit-addon-sqd/conf #### `ansatz_entanglement` -This specifies the entanglement scheme that should be used within the quantum circuit, following common Qiskit and [ffsim conventions for the LUCJ ansatz](https://qiskit-community.github.io/ffsim/how-to-guides/simulate-lucj.html). +This specifies the entanglement scheme that should be used within the quantum circuit, following common Qiskit and [ffsim conventions for the LUCJ ansatz](https://qiskit-community.github.io/ffsim/how-to-guides/qiskit-lucj.html). - Valid range: Any one of `"linear"`, `"reverse_linear"`, `"pairwise"`, `"circular"`, `"full"`, or `"sca"`. If using the `"lucj"` ansatz, `"lucj_default"` is also an option. diff --git a/docs/guides/multiverse-computing-singularity.ipynb b/docs/guides/multiverse-computing-singularity.ipynb index 601259fc336..1e5d2432165 100644 --- a/docs/guides/multiverse-computing-singularity.ipynb +++ b/docs/guides/multiverse-computing-singularity.ipynb @@ -179,7 +179,7 @@ "Perform the following steps:\n", "\n", "1) Create the synthetic dataset using the [`make_moons`](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.make_moons.html) function from [scikit-learn](https://scikit-learn.org/).\n", - "2) Upload the generated synthetic dataset to the [shared data directory](https://qiskit.github.io/qiskit-serverless/getting_started/experimental/manage_data_directory.html).\n", + "2) Upload the generated synthetic dataset to the [shared data directory](https://qiskit.github.io/qiskit-serverless/function_features/experimental/manage_data_directory.html).\n", "3) Create the quantum-enhanced classifier using the [`create`](/docs/api/functions/multiverse-computing-singularity#create) action.\n", "4) Enlist your classifiers using the [`list`](/docs/api/functions/multiverse-computing-singularity#list) action.\n", "5) Train the classifier on the train data using the [`fit`](/docs/api/functions/multiverse-computing-singularity#fit) action.\n", @@ -247,7 +247,7 @@ "id": "639f459f", "metadata": {}, "source": [ - "**Step 2.** Save the labeled training and test datasets on your local disk, and then upload them to the [shared data directory](https://qiskit.github.io/qiskit-serverless/getting_started/experimental/manage_data_directory.html)." + "**Step 2.** Save the labeled training and test datasets on your local disk, and then upload them to the [shared data directory](https://qiskit.github.io/qiskit-serverless/function_features/experimental/manage_data_directory.html)." ] }, { diff --git a/docs/responsible-quantum-computing.mdx b/docs/responsible-quantum-computing.mdx index b63d1b5c45c..dfb0f28df6b 100644 --- a/docs/responsible-quantum-computing.mdx +++ b/docs/responsible-quantum-computing.mdx @@ -38,5 +38,5 @@ Finally, as part of our responsible quantum effort, we are committed to fosterin - [IBM Quantum Safe](https://www.ibm.com/quantum/quantum-safe) - [Blog: The era of quantum utility must also be the era of responsible quantum computing](https://www.ibm.com/quantum/blog/responsible-quantum) - - [IBM Research Responsible and Inclusive Tech](https://research.ibm.com/projects/responsible-and-inclusive-tech-research) + - [Topic: Responsible Technology (IBM Research)](https://research.ibm.com/topics/responsible-technology) \ No newline at end of file diff --git a/docs/tutorials/quantum-kernel-training.ipynb b/docs/tutorials/quantum-kernel-training.ipynb index 2d07485ef08..9ca5223336d 100644 --- a/docs/tutorials/quantum-kernel-training.ipynb +++ b/docs/tutorials/quantum-kernel-training.ipynb @@ -322,7 +322,7 @@ "source": [ "## Deploy the Qiskit pattern to the cloud\n", "\n", - "To do this, move the source code above to a file, `./source/generate_kernel_entry.py`, wrap the code in a script which takes inputs returns the final solution, and finally upload it to a remote cluster using the `QiskitFunction` class from `Qiskit Serverless`. For guidance on specifying external dependencies, passing input arguments, and more, check out the [Qiskit Serverless guides](https://qiskit.github.io/qiskit-serverless/getting_started/index.html).\n", + "To do this, move the source code above to a file, `./source/generate_kernel_entry.py`, wrap the code in a script which takes inputs returns the final solution, and finally upload it to a remote cluster using the `QiskitFunction` class from `Qiskit Serverless`. For guidance on specifying external dependencies, passing input arguments, and more, check out the [Qiskit Serverless guides](https://qiskit.github.io/qiskit-serverless/function_features/index.html#function-features).\n", "\n", "The input to the Pattern is a pair of data samples, `x1` and `x2`. The output is the fidelity between the two samples. This value will be used to populate the kernel matrix entry corresponding to these two samples." ] diff --git a/learning/courses/quantum-business-foundations/business-impacts.mdx b/learning/courses/quantum-business-foundations/business-impacts.mdx index ee79245e713..feee0762cc3 100644 --- a/learning/courses/quantum-business-foundations/business-impacts.mdx +++ b/learning/courses/quantum-business-foundations/business-impacts.mdx @@ -133,7 +133,7 @@ Review the resources listed here to learn more about how IBM Quantum computers a As part of its decarbonization efforts, E.ON has partnered with IBM to explore the potential of quantum computing to [optimize the world’s increasingly decentralized energy infrastructure](https://www.eon.com/en/about-us/media/press-release/2021/2021-09-02-eon-allies-with-ibm-quantum.html). “You plug in your electric car to charge the battery, and you might have a solar panel that powers your house and car. But can you sell that excess energy to your neighbors down the road? Why do you have to get energy from thousands of kilometers away that was made in the power plant burning gas?” asks Corey O’Meara, E.ON digital technology quantum computing lead (see [“IBM Panel Highlights Quantum Role in Sustainability”](https://www.iotworldtoday.com/smart-cities/ibm-panel-highlights-quantum-role-in-sustainability)). Quantum computing algorithms could hold the key to managing the complexity that results when additional assets are plugged into the grid. -The potential for quantum computing to aid in the discovery of new materials designed to improve the generation, transfer, and storage of energy is one reason why bp is allying with IBM Quantum to [achieve its net-zero goals](https://newsroom.ibm.com/2021-02-15-bp-joins-the-IBM-Quantum-Network-to-advance-use-of-quantum-computing-in-energy). +The potential for quantum computing to aid in the discovery of new materials designed to improve the generation, transfer, and storage of energy is one reason why bp is allying with IBM Quantum to achieve its net-zero goals. Woodside Energy, an IBM partner, is experimenting with new algorithms to reduce the overhead of data transfers between classical and quantum systems, making it possible to [apply quantum kernels to streaming data](https://arxiv.org/abs/2112.08449). diff --git a/scripts/js/lib/api/updateLinks.ts b/scripts/js/lib/api/updateLinks.ts index 70f32ff584d..009f4cb5e57 100644 --- a/scripts/js/lib/api/updateLinks.ts +++ b/scripts/js/lib/api/updateLinks.ts @@ -57,6 +57,19 @@ function lowerCaseIfMarkdownAnchor(url: string): string { return `${base}#${newAnchor}`; } +function hasDefinitionAncestor(node: any): boolean { + let current = node.parent; + + while (current) { + if (current.type === "definition") { + return true; + } + current = current.parent; + } + + return false; +} + export function normalizeUrl( url: string, resultsByName: { [key: string]: HtmlToMdResultWithUrl }, @@ -210,21 +223,38 @@ export async function updateLinks( .use(remarkGfm) .use(remarkMdx) .use(() => async (tree: Root) => { + function isBracketedLiteralLink(textNode?: { value?: string }) { + if (!textNode?.value) { + return false; + } + + const value = textNode.value.trim(); + return value.startsWith("[") && value.endsWith("]"); + } + visit(tree, "link", (node) => { const textNode = node.children?.[0]?.type === "text" ? node.children?.[0] : undefined; + + // ✅ NEW: Skip external links inside reference definitions + if (/^https?:\/\//.test(node.url) && hasDefinitionAncestor(node)) { + return; + } + const relativizedLink = relativizeLink({ url: node.url, text: textNode?.value, }); + if (relativizedLink) { node.url = relativizedLink.url; if (textNode && relativizedLink.text) { textNode.value = relativizedLink.text; } } + node.url = normalizeUrl(node.url, resultsByName, itemNames, kwargs); }); }) diff --git a/scripts/js/lib/links/ExternalLink.ts b/scripts/js/lib/links/ExternalLink.ts index 98c0866e312..c9586eebce9 100644 --- a/scripts/js/lib/links/ExternalLink.ts +++ b/scripts/js/lib/links/ExternalLink.ts @@ -25,8 +25,13 @@ export class ExternalLink { ); } - // We strip anchors. - this.value = linkString.split("#", 2)[0]; + // Strip anchors and unescape Markdown-only escapes. + // Markdown allows escaping characters like `_` in link text. + // These escapes are not valid in actual URLs and must be removed + // before performing external validation. + this.value = linkString.split("#", 2)[0].replace(/\\([_*()[\]])/g, "$1"); + ``; + this.originFiles = new Set(originFiles); } diff --git a/scripts/js/lib/links/ignores.ts b/scripts/js/lib/links/ignores.ts index 622897ab8cf..453bffdaada 100644 --- a/scripts/js/lib/links/ignores.ts +++ b/scripts/js/lib/links/ignores.ts @@ -111,6 +111,7 @@ const FORBIDS_OUR_USER_AGENT = [ "https://www.science.org/doi/full/10.1126/science.aad9480", "https://www.science.org/doi/full/10.1126/science.abq0225", "https://www.science.org/doi/full/10.1126/science.abq0225#supplementary-materials", + "https://dl.acm.org/doi/abs/10.5555/3179330.3179331", ]; // These links work when last tested in a browser @@ -120,14 +121,40 @@ const FETCH_RETURNS_405 = [ "https://forms.cloud.microsoft/e/3Wi9cbjQPK", "https://forms.office.com/r/zN3hvMTqJ1", "https://pmc.ncbi.nlm.nih.gov/articles/PMC4878865/", + "https://crates.io/crates/log", + "https://journals.aps.org/prresearch/abstract/10.1103/PhysRevResearch.5.033193", + "https://medium.com/qiskit/improving-a-quantum-compiler-48410d7a7084", + "https://docs.q-ctrl.com/fire-opal/discover/hardware-providers/how-to-migrate-from-performance-management-on-ibm-cloud", + "https://nlopt.readthedocs.io/en/latest/NLopt_Algorithms/", // redirects + "https://journals.aps.org/prresearch/pdf/10.1103/PhysRevResearch.5.043117", // Points to a PDF, which the link checker does not seem to like + "https://www.cs.tau.ac.il/\~nogaa/PDFS/r.pdf", // Points to a PDF, which the link checker does not seem to like + "https://www.biorxiv.org/content/early/2024/02/17/2024.01.08.574600.full.pdf", // Points to a PDF, which the link checker does not seem to like + "https://qiskit.github.io/qiskit-serverless/migration/migration_from_qiskit_runtime_programs.html", // broken link in very old API ref release notes for Qiskit Runtime, so ignoring + "https://qureca.com/quantum-initiatives-worldwide", // link works sometimes, and times out other times + "https://www.gao.gov/assets/gao-22-104422.pdf", // Points to a PDF, which the link checker does not seem to like + "https://www.eurekanetwork.org/programmes-and-calls/network-projects/network-projects-applied-quantum-technologies-2025/", // loads a popup, which might be breaking the checker + "https://www.eurekanetwork.org/programmes-and-calls/network-projects/network-projects-applied-quantum-technologies-2025/", // loads a popup, which might be breaking the checker + "https://www.mckinsey.com/capabilities/mckinsey-technology/our-insights/solving-chemistrys-toughest-problems-the-quantum-computing-advantage", // loads a popup, which might be breaking the checker + "http://www.ibm.com/downloads/documents/us-en/131cf87ab63319bf", // PDF ]; // Fetching these links throws an error, but they work in-browser. Not sure why. const FETCH_FAILS = [ + "https://catalog.skills.network/2766", + "https://www.sciencedirect.com/science/article/pii/S0045790622003743", + "https://medium.com/qiskit/the-variational-quantum-eigensolver-43f7718c2747", + "https://pyqml.medium.com/what-problem-does-a-variational-quantum-eigensolver-solve-3b91c47af23b", + "https://mitpress.mit.edu/9780262539531/quantum-computing-for-everyone/", + "https://www.science.org/doi/10.1126/sciadv.adu9991", + "https://www.hpcwire.com/off-the-wire/gordon-bell-prize-awarded-to-ibm-and-leading-university-researchers/", "https://www.cs.tau.ac.il/~nogaa/PDFS/r.pdf", "https://www.mckinsey.com/business-functions/mckinsey-digital/our-insights/quantum-computing-use-cases-are-getting-real-what-you-need-to-know", "https://www.mckinsey.com/capabilities/mckinsey-digital/our-insights/quantum-computing-just-might-save-the-planet", "https://www.mckinsey.com/industries/chemicals/our-insights/the-next-big-thing-quantum-computings-potential-impact-on-chemicals?cid=eml-web", + "https://www.mckinsey.com/capabilities/tech-and-ai/our-insights/the-year-of-quantum-from-concept-to-reality-in-2025", + "https://www.eda.gov/funding/programs/regional-technology-and-innovation-hubs", // performed security verification in a popup first, probably what broke it + "https://www.oecd.org/en/publications/a-quantum-technologies-policy-primer_fd1153c3-en.html", + "https://medium.com/qiskit/what-can-a-quantum-computer-actually-do-4daed0691f6b", // The following link is only accessible through IBM VPN "https://w3.ibm.com/w3publisher/w3-privacy-notice", ]; @@ -176,6 +203,7 @@ const ALWAYS_IGNORED_URLS__SHOULD_FIX: string[] = [ // Other links that don't seem to exist any more "https://www.cs.bham.ac.uk/~xin/papers/published_tec_sep00_constraint.pdf", "https://www.globaldataquantum.com/en/quantum-portfolio-optimizer/#form", + "https://www.cs.tau.ac.il/\~nogaa/PDFS/r.pdf", ]; export const ALWAYS_IGNORED_URLS = new Set([