El Blog de QPath


q_rEngineer_QP_APP_b

Q rEngineer APP beta 1: herramienta de reingeniería de software cuántico (I)

Adaptador de programas cuánticos desarrollados con el SDK de otros proveedores

Introducción

Basado en un diseño conceptual de QST, en el año 2019 comenzamos un proyecto de investigación en el ámbito de la emergente Ingeniería del Software Cuántico con el objetivo de poder definir un entorno metodológico y tecnológico para el desarrollo de software cuántico. Entre las tareas principales de esta investigación está la especializada en la Modernización de Software Cuántico. Desde entonces QST y el grupo de investigadores científicos de aQuantum, compuesto por miembros del Grupo Alarcos, trabaja en estas tareas con el objetivo de definir de un modelo de reingeniería y modernización del software cuántico, así como el determinar la viabilidad técnica del desarrollo de las soluciones que lo hagan posible.

Entre las tareas más relevantes de esta investigación sobre la modernización del software cuántico se destacan las siguientes:

·                 Definición de extensiones KDM para representar sistemas cuánticos

·                 Diseño y desarrollo de parsers para programas cuánticos

·                 Definición de extensiones de diagramas UML para l sistemas de información cuánticos

·                 Definición de mapeo entre modelos KDM y UML

Trasladar la investigación sobre modernización del software cuántico a sus aplicaciones prácticas para el desarrollo de software cuántico ha sido uno de los retos que hemos asumido.

QuantumPath® es una plataforma concebida para ser agnóstica. Esto es, proporcionar la capacidad al usuario de poder concebir activos cuánticos independientes de la plataforma de ejecución vinculada a un determinado proveedor de tecnología. Esta capacidad hace posible reducir el tiempo y el riesgo asociado a la construcción de soluciones cuánticas sobre tecnologías tan disruptivas, simplificando y aumentando la productividad en los procesos de adopción de la computación cuántica al negocio. Este agnosticismo hace posible que todos aquellos que comienzan en este maravillo viaje cuántico puedan ejecutar sus soluciones en múltiples proveedores de hardware cuánticos -actualmente todos los principales, pero también los que llegarán y/o evolucionarán- sin tener que conocer los detalles específicos. Pero… ¿y todos aquellos que han ganado experiencia precisamente con cada uno de los proveedores existentes? Ya han tenido que experimentar el aprender, desplegar, apostar definitivamente por una determinada tecnología entre tantas… una más, es de nuevo una situación que lidiar por muchas ventajas que aporte. De nuevo, los principios de la modernización aplican en este caso: se deben proporcionar utilidades, documentación, aceleradores… en definitiva, herramientas. Herramientas para reutilizar el conocimiento adquirido y que simplifiquen el traspaso a nuevas y diferentes tecnologías y que pueden aportar un valor añadido e incluso reemplazar las inicialmente previstas.

Por esta razón, otra de las características destacables de QuantumPath® es que ha sido diseñada y construida como un integrador de soluciones, que soporta el desarrollo de algoritmos y apps cuánticas en el contexto más adecuado para cada solución y que, a través de diferentes métodos y técnicas, soporta importaciones/exportaciones de algoritmos desarrollados en otros entornos. Teniendo esto presente, el equipo técnico de aQuantum abordó la no menos compleja tarea de “ingenierizar” los resultados de la investigación, lo que dio lugar al inicio del análisis, diseño y desarrollo de Q rEngineer (Ilustración 1) es una APP de QuantumPath® que permite realizar diferentes acciones prácticas desde la perspectiva de la reingeniería del software cuántico para adaptar, con el menor esfuerzo posibles, algoritmos desarrollados en otros entornos a la arquitectura de QPath®.

 Ilustración 1: Arquitectura funcional de Q rEngineer APP

 

La versión beta 1 de QrEngineer APP contiene dos módulos:

·                 Q Provider Factory, para la gestión de las adaptaciones del software cuántico desarrollado con el SDK de otros proveedores (que mostraremos detalladamente en este artículo) para hacerlos compatibles con QuantumPath®.

·                 Q Modernization, para la gestión de modernizaciones de software cuántico que se muestra detalladamente en el libro “Ingeniería del Software Cuántico & QuantumPath®” [1]). 

La herramienta Q rEngineer es parte del conjunto de aplicaciones de la plataforma QuantumPath®. En las versiones comerciales de Q rEngineer APP el Administrador de cada organización de QPath® será quien dará permiso a los miembros de sus equipos de prueba para acceder a la APP pero, para comenzar a trabajar con la versión 1 de la beta de Q rEngineer APP, es imprescindible tener una cuenta de usuario en QuantumPath®. Si no dispone de una cuenta de QuantumPath® deberá crear una cuenta de usuario Free Developer.

El acceso a esta beta 1 de la aplicación está soportado para todos los tipos de suscripción, incluido laFree Developer”. 

El acceso a la beta 1 de Q rEngineer APP, se puede acceder desde la propia aplicación web de QPath®, en la sección QAPPS > QrEngineer:

Ilustración 2: Acceso a la APP Q rEngineer desde QuantumPath®

 

Si ya se dispone de una cuenta de usuario en QuantumPath® también se puede acceder directamente a través del siguiente enlace con las credenciales de QPath®:

                https://core.quantumpath.app/QAPPSRENGINEER  

Al acceder a QrEngineer APP estaremos en condiciones de trabajar con las herramientas de la APP.

Ilustración 3. Página de inicio de Q rEngineer APP

 

 

Adaptación de programas cuánticos desarrollados con otros proveedores con QuantumPath®

La adaptación de programas cuánticos desarrollados con el SDK de otros proveedores con la plataforma QuantumPath® facilita a los desarrolladores poder hacer uso de todas las funcionalidades y ventajas de la plataforma, sin que el usuario tenga que renunciar a trabajar con su SDK favorito. Las bondades de la plataforma para el desarrollo de software cuántico se ponen de manifiesto a través de un amplio catálogo capacidades [2] puestas a disposición de los desarrolladores, entre las que destacan las siguientes:

Originalmente estas capacidades, que también asisten en la aplicación de buenas prácticas de la ingeniería del software cuántico, solo estaban disponibles para las soluciones desarrolladas nativamente en QuantumPath®, aunque, como hemos comentado, hemos sido conscientes que las mismas deberían poder ser extendidas a soluciones de software cuántico desarrolladas en las plataformas de otros proveedores. Veamos a continuación cómo integrar los desarrollos externos a QuantumPath® para que funcionen como nativos.

La aplicación web de Q rEngineer APP ofrece al usuario un punto de acceso, con información y tutoriales, a las opciones de trabajo que la conformen en cada momento de su evolución. En la beta 1 el módulo Q Provider Factory presenta las siguientes opciones de trabajo:

·             Q Provider Factory Python SDK:

Módulo de Q rEngineer SDK que permite transpilar y ejecutar a través de QuantumPath® circuitos cuánticos desarrollados con el SDK de otros proveedores.

·                 Q Provider Factory Web UI:

Aplicación web que proporciona un repositorio de circuitos cuánticos y que asiste al usuario en la reescritura de sus programas cuánticos para su integración con QuantumPath®.

Ilustración 4. Página de inicio de Q Provider Factory

 

Q Provider Factory Python SDK

Q Provider Factory es una librería Python que permite migrar al ecosistema QuantumPath® programas cuánticos desarrollados con los SDKs de los principales proveedores cuánticos:

·                 El usuario desarrolla programas cuánticos con su software favorito.

·                 Haciendo uso de las clases de Q Provider Factory, el usuario puede ejecutar sus circuitos cuánticos a través de QuantumPath®, en un gran catálogo de simuladores y dispositivos cuánticos basados en la nube de diferentes proveedores.

·                 El usuario puede acceder a la plataforma QuantumPath® para trabajar visualmente con los circuitos migrados y explorar los resultados de las diferentes ejecuciones.

En su versión beta 1, Q Provider Factory puede utilizarse en programas cuánticos desarrollados con las siguientes librerías basadas en Python:

·                 Amazon Braket SDK

·                 D-Wave Ocean SDK

·                 Google Cirq SDK

·                 IBM Qiskit SDK

 

Instalación

Para trabajar con Q Provider Factory se debe instalar Q rEngineer SDK, para lo que es necesario ejecutar la siguiente instrucción en una consola de comandos:

 pip install Q rEngineer SDK

Este comando instalará el SDK y todas sus dependencias, entre ellas QPath® Python SDK.

 

Uso de Q Provider Factory

Ilustración 5. Página de inicio de Q Provider Factory

 

Para ejecutar un circuito a través de QuantumPath® usando Q Provider Factory, un usuario tiene que seguir los siguientes pasos:

·                 Editar su programa cuántico, escrito en uno de los SDKs soportados.

#Example of code of a specific provider : Google Cirq

import cirq

cirqCircuit = cirq.Circuit()

qubits = cirq.LineQubit.range(4)

cirqCircuit.append(cirq.H(q) for q in cirq.LineQubit.range(4))
cirqCircuit.append(cirq.CCNOT(qubits[0],qubits[1],qubits[3]))
cirqCircuit.append(cirq.CNOT(qubits[0],qubits[1]))
cirqCircuit.append(cirq.CCNOT(qubits[1],qubits[2],qubits[3]))
cirqCircuit.append(cirq.CNOT(qubits[1],qubits[2]))
cirqCircuit.append(cirq.CNOT(qubits[0],qubits[1]))
cirqCircuit.append(cirq.measure(qubits[2],qubits[3]))
simulator = cirq.Simulator()

result = simulator.run(circuit, repetitions=20)

print(result)

 ·                 Añadir al comienzo del mismo la sentencia import a la clase principal del SDK.

 from Q rEngineer SDK import QProviderFactory

 ·                 Identificar la línea donde finaliza la creación del circuito cuántico.


cirqCircuit.append(cirq.measure(qubits[2],qubits[3]))

simulator = cirq.Simulator()

result = simulator.run(circuit, repetitions=20)
print(result)

 ·                 Añadir el código necesario para transpilarlo y ejecutarlo a través de QuantumPath®: 

1.               Instanciar el objeto QProviderFactory, indicando el usuario de QuantumPath® y su correspondiente password:

qprovider = QProviderFactory(user = ‘***quantum path user***’,
passwordSHA256=’***sha-256 encrypted password***’)
 

2.               Transpilar el circuito original a un circuito de QuantumPath®:

qpathCircuit = qprovider.transpileCirqCircuit(cirqCircuit) 

3.               Ejecutarlo a través de QuantumPath®, proporcionando el identificador de la solución, el dispositivo cuántico, el namespace, el nombre del circuito y el número de ejecuciones o sampleos a realizar: 

qpathSolutionID = 10622
qpathDeviceID = 14
qPathCircuitName = ‘AdderCirq’
qPathNamespace = ‘Test’
qPathNumRepeats = 100
result =
qprovider.executeQPathCircuit(qpathSolutionID,qpathDeviceID,qPathCircuitName,
qPathNamespace,qPathNumRepeats,qpathCircuit)
 

4.               Comprobar el resultado de la ejecución y mostrarlo por pantalla:

if result.success:
print(str(result.histogram))
else:
print(“Error executing the circuit” + result.error) 

Dado que QuantumPath® proporciona un almacén centralizado de activos y recoge toda su telemetría historificada, una vez finalizada la ejecución, el usuario puede acceder a la plataforma QuantumPath® y visualizar en la solución indicada, el circuito y el flujo generados automáticamente por el SDK, y comprobar el resultado de la ejecución.

Ilustración
6: Circuito generado con Q rEngineer QPath® APP, visto en QuantumPath®

 

 

Q Provider Factory Web UI 

Q Provider Factory Web UI es una herramienta web que pone a disposición del usuario un almacén privado donde guardar circuitos cuánticos. Además, acelera la integración con QuantumPath®, automatizando la refactorización del código original del programa y escribiendo por el usuario el código de Q Provider Factory SDK necesario.

El acceso a esta herramienta se realiza desde la página de inicio de Q rEngineer  APP, accediendo al enlace Q Provider Factory Web.

Para completar el acceso es necesario autenticarse en el sistema con un usuario y password de QuantumPath®.

Ilustración 7: Autenticación en Q rEngineer Manager

 

Una vez autenticado, la aplicación permite al usuario gestionar un repositorio privado de circuitos cuánticos organizado por proyectos

Para crear un nuevo proyecto, el usuario debe hacer clic en el botón “New Project” y proporcionar un nombre y una descripción para el mismo.

Ilustración 8: Creación de un proyecto

 

Dentro de un proyecto, el usuario puede subir un nuevo circuito cuántico haciendo clic en el botón “Add a quantum circuit”.

Esto abrirá un formulario donde el usuario deberá proporcionar los metadatos del circuito:

·                 Nombre

·                 Tecnología usada para su desarrollo

·                 Descripción del circuito

El usuario también deberá proporcionar el código fuente del circuito.

Ilustración 9: Formulario de subida de un circuito cuántico al repositorio

 

Una vez proporcionado los datos y pulsado el botón “Save”, el sistema almacena el circuito en la base de datos de la aplicación, protegiendo el código fuente mediante un sistema de encriptación avanzado.

Desde el panel izquierdo, el usuario tiene acceso a todos los circuitos que ha subido al proyecto, pudiendo acceder a su código fuente y eliminándolos del repositorio si lo considera necesario.

Ilustración 10: Selección de un circuito del repositorio y visualización de su código fuente

  

Q Provider Factory Web UI permite generar de forma automática el código necesario para integrar un circuito cuántico del repositorio con QuantumPath®.

Para ello, el usuario debe seleccionar la pestaña “Code migrations” y hacer clic en el botón “Generate code”. Esto abrirá un formulario en el que el usuario proporcionará los parámetros de ejecución del circuito en QuantumPath®:

·                 Namespace y nombre del circuito

·                 Solución

·                 Dispositivo de ejecución

Ilustración 11: Generación de código de migración a QuantumPath® I

 

Gracias al modelo agnóstico de QuantumPath®, un circuito cuántico desarrollado con un SDK específico puede ejecutarse en un dispositivo cuántico de un proveedor diferente, siempre que el dispositivo esté registrado en QuantumPath® y habilitado en la solución indicada por el usuario.

Seguidamente, el usuario debe seleccionar el fichero principal de su programa cuántico y la línea de código donde se insertará el código de Q Provider Factory SDK necesario para transpilar y ejecutar el circuito a través de QuantumPath®.

Ilustración 12: Generación de código de migración a QuantumPath® II

 

Finalmente, el transpilador de Q rEngineer APP modifica el código fuente del fichero y lo muestra al usuario.

Ilustración 13: Generación de código de migración a QuantumPath® III

 

Tras revisar el código generado, el usuario tiene la opción de guardarlo en el repositorio, para visualizarlo y descargarlo cuando desee. 

Ilustración 14: Generación de código de migración a QuantumPath® IV

 

 

Resumen

QuantumPath® es un ecosistema de herramientas, servicios y procesos que simplifican el desarrollo de algoritmos cuánticos integrados en sistemas de información híbridos listos para la industria.

Como parte del plan de proporcionar la industria herramientas para el desarrollo de soluciones de negocio que sacan provecho de la ventaja cuántica, proporcionar herramientas como Q rEngineer APP aportan un valor diferenciador por el cual nuestra tecnología apuesta desde ya. No queremos ir solos de la mano, queremos ofrecer ecosistema a las empresas para que puedan disponer de las mejores herramientas para aplicar esta disruptiva tecnología sin tener que esperar 40 años.

Q rEngineer APP beta 1 ofrece las primeras opciones para que los desarrolladores de software cuántico puedan utilizar todas las bondades que aporta la plataforma sin tener que renunciar a trabajar con sus SDK favoritos. Una de las formas de abordar este reto es utilizar el módulo Q Provider Factory para la adaptación de programas cuánticos y, a través de sus opciones Q Provider Factory Python SDK y Q Provider Factory Web UI, trabajar con el punto de acceso y recibir asistencia en la reescritura de los programas cuánticos para su integración con QuantumPath®.

Trabajar con Q rEngineer APP facilita el proceso de migraciones de algoritmos desarrollados en otros entornos y lenguajes de programación a QPath®. Además del ahorro de tiempo, utilizar las buenas prácticas de la reingeniería contribuye a preservar el conocimiento empresarial, posibilita el mantenimiento evolutivo de los sistemas de información heredados y reduce el riesgo de sus desarrollos y costes. Además, amplía las herramientas de control del riesgo que tiene QuantumPath® en su ADN: si la tecnología del fabricante cambia, podemos ofrecer alternativas tecnológicas que reduzcan el riesgo y por lo tanto reduzca los costes y los tiempos de adaptarse al mercado, teniendo en cuenta el estado del arte de aquí en adelante.

Hoy presentamos la beta 1, por lo que podemos adelantar una interesante hoja de ruta que permitirá trabajar con más SDKs y herramientas que los inicialmente soporta Q rEngineer APP y que, también, añadirá nuevas funcionalidades para ampliar las facilidades de uso. Iremos informando.

[1] Pérez,R. Jiménez, L. Martínez, A. Peterssen, G. Ingeniería del Software Cuántico & QuantumPath®. Cap. 6: Modernización de sistemas cuánticos. aQuantum, 2022.

[2] Capacidades de QuantumPath® – https://www.quantumpath.es/es/capacidades-de-qpath/