
Spanish: 
- Los problemas son un gran lugar 
para comenzar a contribuir
y en particular, si es su primera vez desarrollando
podrían encontrar un buen lugar
para comenzar haciendo clic en esta 
etiqueta "Good First Issue"
(música pop)
¡Hola a todos!
Bienvenidos nuevamente a 
"Coding with Qiskit", soy Abe.
Entonces, en el episodio de hoy,
vamos a estar haciendo nuestra 
primera contribución
al software de código abierto, Qiskit.
La idea aquí es que vamos a
recorrer los problemas en Qiskit,
en particular, en un componente de Qiskit
llamado Qiskit Terra
y entre estos problemas,
vamos a elegir uno interesante
y encontrar posibles soluciones para ello.
Una vez que hemos identificado una solución,
vamos a enviar esa solución de vuelta
al software de código abierto
y de esta manera, nos vamos a transformar en
contribuyentes oficiales al software 
de código abierto.
Esta es una contribución significativa 
que estamos haciendo

English: 
- The issues are a great
place to start contributing
and in particular, if this is
your first time developing,
you might also find it a good place
to start by clicking this
Good First Issue label.
(upbeat pop music)
(upbeat pop music)
(upbeat pop music)
(upbeat pop music)
Hey everyone!
Welcome back to Coding
With Qiskit, this is Abe.
So in today's episode,
we're going to be making
our first contribution
to the open-source software, Qiskit.
The idea here is that we're going to
look through the issues in Qiskit,
in particular, in a component of Qiskit
called Qiskit Terra
and among these issues,
we're going to pick one interesting one
and find possible solutions to it.
Once we've identified a solution,
we're going to submit that solutions back
to the open-source software
and in this way, we're
going to have become
official contributors to
the open-source software.
This is a meaningful
contribution that we're making

Spanish: 
porque impacta no solo el software
sino en toda la comunidad de 
computación cuántica.
Entonces en este video,
recorreremos todos estos pasos individualmente.
Descargaremos Qiskit,
encontraremos las soluciones en nuestra computadora
navegando por el código,
y eventualmente pasaremos por el proceso
de enviar los cambios del código nuevamente a GitHub
¡Entonces empecemos!
Entonces, como hemos mencionado antes,
Qiskit es software de código abierto
y lo que eso significa es que
tienen la habilidad
para contribuir e incluso solucionar problemas
y contribuir al desarrollo de software cuántico.
Entonces, lo que voy a hacer aquí
es comenzar primero en la web "Qiskit.org".
Aquí tengo mi navegador abierto.
Voy a ir a la página de GitHub para Qiskit.
Y GitHub es donde el software 
de código abierto vive.
Cuando vayan a esta página de GitHub,
verán algunos repositorios anclados
y una lista de otros repositorios.
Y vamos a comenzar mirando
los cuatro elementos de Qiskit
entonces Terra, Ignis, Aqua y Aer.
Y la idea aquí es que Terra 
es la capa fundamental

English: 
because it impacts not just the software
but the entire Quantum
computing community.
So in this video,
we'll walk through all of
these steps individually.
We'll download Qiskit,
we will find the solutions on our computer
by navigating through the code,
and eventually we'll
go through the process
of submitting changes to
the code back to get help.
So, let's get started!
So as we've mentioned before,
Qiskit does open-source software
and what that means is
you have the ability
to contribute to it and even fix issues
and contribute to the
development of Quantum Software.
So what I'm going to do here
is start off first at
the Qiskit.org webpage.
Here I have my browser open.
I'm going to go to the
GitHub page for Qiskit.
And GitHub is where the
open-source software lives.
When you go to this GitHub page,
you'll see a few pinned repositories
and a list of other repositories.
And we're going to start off by looking at
the four elements of Qiskit,
so Terra, Ignis, Aqua, and Aer.
And the idea here is that
Terra is the foundational layer

English: 
and this is where we've
been building circuits
in previous videos.
This is how we've been executing things.
This Terra foundation layer
is where we'll be focusing on today.
What I want to do is show
you how we can fix an error,
work through an error with you live,
and submit a change to the code
so that we fix that error in Qiskit Terra.
So the best place to start
is by clicking this
Qiskit Terra repository
and looking here in the issues.
The issues are a great
place to start contributing
and in particular, if this is
your first time developing,
you might also find it
a good place to start
by clicking this good first issue label.
When you do that, now all
the issues that you're seeing
are those that have the
good first issue tag applied to them.
So if you don't find anything that says
good first issue to click on,
you can also just type
this in the search box.
So you can just say is issue "is:open"
and the label is "good first issue",
and then hit search.

Spanish: 
y aquí es donde hemos estado 
construyendo circuitos
en videos anteriores
Así es como hemos estado ejecutando cosas.
Esta capa de base Terra
es donde nos centraremos hoy.
Lo que quiero hacer es mostrarles cómo 
podemos solucionar un error,
trabajar en un error con ustedes en vivo,
y enviar un cambio al código
para que arreglemos ese error en Qiskit Terra.
Entonces, el mejor lugar para comenzar
es haciendo clic en este
repositorio Qiskit Terra
y mirando aquí en los problemas.
Los problemas ("issues") son un gran lugar para comenzar a contribuir
y en particular, si es
su primera vez desarrollando,
también podrán encontrar un buen lugar para comenzar
haciendo clic en esta etiqueta "good first issue"
Cuando haces eso, todos los 
problemas que estás viendo
son los que tienen
la etiqueta "good first issue" aplicada.
Entonces, si no encuentran nada que diga
"good first issue" para hacer clic,
también pueden simplemente escribir
esto en el cuadro de búsqueda.
Entonces pueden decir "is: issue" "is: open"
y la etiqueta es "good first issue",
y luego presionen buscar.

Spanish: 
Entonces estos "good first issue"
son geniales para trabajar
y para comenzar a contribuir a Qiskit.
Y hoy lo que quiero hacer es
trabajar en uno de ellos con ustedes.
Entonces, mirando la lista,
pueden ver una lista con cuales trabajar.
Entonces digamos tal vez este.
Entonces la idea aquí es que alguien 
ha informado este problema
y el problema dice que hay una inconsistencia
en cómo los parámetros de la compuerta
se muestran en el gráfico del circuito.
Entonces parece que este código,
con el que ya deberías estar familiarizado,
está agregando una compuerta U3 
y una compuerta CU3
y los está graficando
Entonces esta es la salida
de la función para graficar
y pueden ver que la persona está informando
la inconsistencia entre cómo estos números
no tienen ningún paréntesis a 
su alrededor, pero estos sí.
Bien, entonces el problema que tenemos que solucionar
es descubrir por qué existe esta inconsistencia.
La persona dice
"Si tengo que elegir, yo
iría con la eliminación
del paréntesis en todas partes.
Pero seguro
debería ser igual en todas partes".

English: 
So these good first issues
are great to work on
and to get started contributing to Qiskit
and today what I want to do is
work through one of them with you.
So looking down the list,
you can see a list of ones to work on.
So let's say maybe this one.
So the idea here is that
someone has reported this issue
and the issue says there
is an inconsistency
in how the parameters of the gate
are showed in the circuit plot.
So it looks like this code,
which by now you should be familiar with,
is adding a u3 gate and a cu3 gate
and is drawing them.
So this is the output
of the drawing function
and you can see the person is reporting
the inconsistency
between how these numbers
don't have any parenthesis
around them, but these ones do.
Okay, so the issue we have to fix
is figuring out why
there's this inconsistency.
The person is saying,
"If I have to choose, I
would go with removing
the parenthesis everywhere. But for sure,
it should be everywhere the same."

English: 
Okay, mmhmm.
So the person is reporting
another inconsistency
so he's now saying
"circuit_all.draw(output=mpl"
and it looks like if you're
passing the argument,
use pi format,
you get pi's here, but you
get nothing on this gate.
If you don't use pi,
you get back the previous plot,
but you have this inconsistency
with the parenthesis.
Okay, so it looks like generally,
we're going to be trying
to fix this problem.
One good habit to have is
to look through what progress
has been made so far.
So someone here commented
that they're interested
in trying to solve.
Before shooting this video,
I took a look at the issues
and decided to maybe try
and work on this one.
So I asked for permission to work on this
and I said, "How's this going?"
and once I got permission to go ahead,
I'm going to be working on this.
So, it's just a good
idea to make sure that
you're contributing but you're also not
stepping on other people's toes.

Spanish: 
De acuerdo, mmhmm.
Entonces la persona está informando
otra inconsistencia
así que ahora está diciendo
"circuit_all.draw (salida = 'mpl')"
y parece que si estás pasando el argumento,
"usepiformat"
obtienes "pi" aquí, pero nada en esta compuerta.
Si no usas "pi",
vuelves al gráfico anterior,
pero tienes esta inconsistencia
con el paréntesis.
Ok, parece que en general,
vamos a intentar solucionar este problema.
Una buena costumbre es
mirar cuál es el progreso
se ha hecho hasta ahora
Entonces alguien aquí comentó
que está interesado
en intentar resolverlo.
Antes de grabar este video,
di una mirada a los problemas
y decidí quizás intentar y trabajar en este
Entonces pedí permiso para trabajar en esto
y le dije: "¿Cómo va esto?"
y una vez que obtuve permiso para seguir adelante,
comencé a trabajar en esto.
Entonces, es siempre una buena
idea asegurarse que
estás contribuyendo pero no estás
pisando a otras personas.

Spanish: 
Sigamos adelante con la solución de este problema.
¿Cómo iniciamos?
¿Cómo empezamos?
Entonces, lo que voy a hacer es 
primero comenzar por
intentar de modificar este código, ¿verdad?
Entonces de alguna manera necesitamos
este código en nuestra computadora.
Entonces voy a ir al repositorio Qiskit Terra
y luego voy a hacer un "fork"
en mi GitHub personal.
Entonces hago clic en el enlace "fork"
y le digo hacia mi propio perfil.
Y una vez que el "fork" esté completo,
Tendré una copia del código 
en mi propio perfil.
Como pueden ver ahora,
la página de GitHub es 
mi perfil / Qiskit-Terra.
Entonces esta rama en la que estoy
trabajando en mi propio "fork"
está emparejada con el "master", 
y a partir de aquí
puedo continuar intentando trabajar 
desde mi propia computadora.
Está bien, una vez que hemos hecho 
el "fork" del repositorio
a nuestro propio GitHub,
luego hacemos clic en el enlace 
"Clone or download"
y "copy" sobre el enlace para 
clonar este repositorio
y en nuestra computadora,
vamos a la terminal y escribimos "git clone"

English: 
Let's go ahead with solving this issue.
How do we start?
How do we begin?
So what I'm going to do is first begin by
trying to modify this code, right?
So somehow we need to get
this code onto our computer.
So I'm going to go to the
Qiskit Terra repository
and then I'm going to fork
it into my personal GitHub.
So I click the fork link
and I say to my own profile.
And once this fork is complete,
I'll have a copy of the
code into my own profile.
As you can see now,
the GitHub page is my
profile/Qiskit-Terra.
So this branch that I'm
working on in my own fork
is even with master and from here,
I can continue with trying
to work from my own computer.
Okay so once we forked the repository
to our own personal GitHub,
then we click the clone download link
and copy over the link
to clone this repository
and in our computer,
we go to terminal and type, "git clone"

Spanish: 
y traemos la dirección para el repositorio.
Tengan en cuenta aquí que la dirección
 que estoy pegando aquí
es de mi propia página personal de Git.
Una vez que se completa la clonación,
si miran el directorio,
debería haber una carpeta
llamada "quiskit-terra".
Cambiemos a esa carpeta.
Entonces voy a decir, "cd qiskit-terra"
y voy a decir "git status".
Como ven, nuestra rama está en "master"
y estamos al día con el "origin master"
Y en particular, lo que voy a hacer
es decir: "git remote -v"
y mirar adónde apunta el origen.
Entonces, el origen de esta carpeta apunta
al repositorio donde hicimos nuestro "fork".
También hay un "upstream",
así que voy a agregar el repositorio Qiskit
desde el cual hice "fork" al "upstream".
Entonces voy a decir
"git remote add upstream"
y luego voy a traer
la dirección de Qiskit Terra,

English: 
and bring in the address
for the repository.
Keep in mind here that the
address that I'm pasting here
is from my own personal Git page.
Once the cloning is complete,
if you look at the directory,
there should be a folder
called Qiskit Terra.
Let's change into that folder.
So I'm going to say, "cd qiskit terra"
and I'm going to say, "git status".
So you see, our branch is on master
and we're up to date with origin master.
And in particular, what I'm going to do
is say, "git remote -v"
and look at where origin points.
So origin of this folder points to the
repository where we did our fork.
There's also an upstream,
so I'm going to add the Qiskit repository
from which I forked to upstream here.
So I'm going to say,
"git remote add upstream"
and then I'm going to bring in
the address of Qiskit Terra,

Spanish: 
copiar este enlace en particular y pegarlo aquí.
Tengan en cuenta que esta vez,
el "upstream" está señalando al
repositorio original de Qiskit.
Una vez que hagan eso, entonces
digan: "git remote -v"
y deberían ver que el origen está apuntando
a mi repositorio personal
y "upstream" está apuntando
al repositorio de Qiskit.
Es una buena idea también trabajar en ramas,
entonces lo que voy a hacer es decir
"git branch"
 y voy a decir la rama
va a ser "fixissue"
y si no recuerdo mal
El número de asunto es 2822.
Entonces voy a decir el
nombre de la rama es,
"fixissue2822branch"
y luego voy a decir
"git checkout fixissue2822branch"
y eso significa que he
cambiado a esta rama
que acabo de crear
y puedo decir "git status"
y verán que estoy en esta rama ahora,

English: 
copy this particular
link, and paste it here.
Notice that this time,
the upstream is point to the
original Qiskit repository.
Once you do that, then
say, "git remote -v"
and you should see that
the origin is pointing
to my personal repository
and the upstream is pointing
to the Qiskit repository.
It's a good idea also to work on branches,
so what I'm going to do is say,
"git branch" and I'm
going to say the branch
is going to be, "fixissue"
and if I remember correctly,
the issue number is 2822.
So I'm going to say the
name of the branch is,
"fixissue2822branch"
and then I'm going to say,
"git checkout fixissue2822branch"
and that means I've
changed over to this branch
that I just created
and I can say, "git status"
and you see I'm on this branch now,

English: 
instead of previously we were on master
when we started this work.
All right, now we're
ready to start working.
So, in order to see any changes
that I'm making in the code,
what I like to do is
work in an environment
for Python that's different.
So I'm going to also
create a new environment.
So to create the new environment,
I'm going to go to
Qiskit.org/documentation
and I'm going to follow the instructions
in the installing page
and building Qiskit packages from source.
So we'll put a link to this page
in the description as well.
But the link that you're looking for,
the instructions that
you're looking for are here.
So, "conda create -y -n QiskitDevenv".
So that's the instruction
that we're going to
type into our terminal.
So I'm going to say, "conda create -y -n".
I'm going to change the
name of the environment to,

Spanish: 
en lugar de que anteriormente estábamos en "master"
cuando empezamos este trabajo
Muy bien, ahora estamos listos para empezar a trabajar.
Entonces, para ver cualquier cambio
que esté haciendo en el código,
lo que me gusta hacer es
trabajar en un entorno
para Python que es diferente.
Así que también voy a
crear un nuevo entorno
Entonces, para crear el nuevo entorno,
iré a
"Qiskit.org/documentation"
y voy a seguir las instrucciones
en la página de instalación
y compilar los paquetes Qiskit desde la fuente.
Entonces pondremos un enlace a esta página
en la descripción también.
Pero el enlace que están buscando,
las instrucciones que
están buscando están aquí.
Entonces, "conda create -y -n QiskitDevenv".
Entonces esa es la instrucción
que vamos a escribir en nuestra terminal.
Entonces voy a decir: "conda create -y -n".
Voy a cambiar el nombre del entorno a:

Spanish: 
"fixissueenviornment".
Y voy a decir, "python = 3"
y Conda sigue adelante y
crea ese entorno.
Y ahora podemos activar ese entorno.
Simplemente pueden pegar las instrucciones aquí.
"conda activate fixissueenviornment"
y ahora verán que esto cambia desde "base"
hacia "fixissueenvironment".
El siguiente paso es instalar
Qiskit Terra desde la fuente.
Entonces ya estamos en el
directorio de Qiskit Terra.
Entonces las instrucciones para hacer eso están también
en esta página en nuestro navegador.
Así que vamos a ir a esta sección,
que dice: "Install Terra from source"
y vamos a correr esta lista de cosas.
Entonces, en particular, hemos
hecho nuestro propio clon,
entonces vamos a ignorar esta línea.
Ya nos cambiamos al directorio
así que solo voy
a comenzar desde esta línea en
particular que dice:
"pip install cython".
Que se instaló con éxito.
Y luego voy a decir:

English: 
"fixissueenviornment".
And I'm going to say, "python=3"
and Conda goes ahead and
creates that environment.
And now we can activate that environment.
You can simply paste the instruction here.
"conda activate fixissueenviornment"
and now you see this changes from base
to the fix issue environment.
The next step is to install
Qiskit Terra from source.
So we are already in the
Qiskit Terra directory.
So the instruction to do that is also
on this page in our browser.
So we're going to go down to this section,
which says, "Install Terra from source"
and we're going to run
this list of things.
So, in particular, we've
done our own clone,
so we're going to ignore this line.
We're changed into the directory
already so I'm just going
to start from this
particular line which says,
"pip install cython".
That successfully installed.
And then I'm going to say,

English: 
"pip install -r requirementsdev".
And once that completes,
I'm going to go to the
editable mode instructions
and do, "pip install -e .".
So, "pip install -e .".
So the -e tag here,
allows us to install pip
in editable mode,
which means we can edit the code
and we don't have to do
this installation over
and over again in order to see changes
from the code reflecting in our work.
Okay, and once that completes,
now we have Terra installed
in this particular environment called,
"fix issue environment"
and now we're ready to start working.
So what I'm going to do
is quickly double check
that Terra is installed
so I'll say, "python".
You can see that there's Python 3.7.4
in my environment
and what I'm going to do is say,
"import Qiskit" and run that line.
And you see we get an error that says,

Spanish: 
"pip install -r requirementsdev".
Y una vez que eso se complete,
Voy a ir al modo editable
y hacer, "pip install -e.".
Entonces, "pip install -e.".
Entonces la etiqueta -e aquí,
nos permite instalar pip
en modo editable,
lo que significa que podemos editar el código
y no tenemos que hacer
esta instalación una y otra vez
para ver que los cambios
del código se reflejen en nuestro trabajo.
De acuerdo, y una vez que eso se complete,
ahora tenemos Terra instalado
en este entorno particular llamado,
"fixissueenvironment"
y ahora estamos listos para comenzar a trabajar.
Entonces lo que voy a hacer es
 verificar rápidamente
que Terra esté instalado
entonces diré "python".
Pueden ver que hay un Python 3.7.4
en mi entorno
y lo que voy a hacer es decir
"import qiskit" y ejecutar esa línea.
Y ven que recibimos un error que dice:

Spanish: 
"No hay proveedor IBMQ y
no existe Qiskit Aer".
Eso está bien porque no hemos instalado
estos paquetes en particular
pero parece que Terra en sí está instalado
De nuevo, lo que voy a hacer es decir:
"qiskit .__ qiskit_version__"
y eso me dice que yo tengo 
esta versión de Terra,
la cual es la rama de desarrollo
y no tengo ninguno de los otros paquetes,
que es exactamente lo que esperábamos
dado que acabamos de instalar Terra solo.
Así que pensemos dónde estamos ahora.
Entonces hemos hecho "fork" del
repositorio de Qiskit
a nuestro propio perfil de GitHub,
y luego hemos descargado
ese código en nuestra computadora
clonándolo a través de GitHub,
y, ¿qué más hemos hecho?
También hemos instalado
esta versión particular de
Qiskit Terra que hemos descargado
en este entorno particular que hemos creado.
Bien, ¿qué significa eso?
Ahora estamos listos para comenzar a ejecutar cosas
con esta versión de Qiskit Terra.
Entonces personalmente me gusta escribir
código en Jupyter Notebooks.
Entonces, lo que eso significa es que ahora

English: 
"There's no IBMQ provider and
there's not Qiskit error".
That's fine because we haven't installed
these particular packages
but it looks like Terra
itself is installed.
So again, what I'm going to do is say,
"qiskit.__qiskit_version__"
and that tells me that I
have this Terra version,
which is the development branch
and I have none of the other packages,
which is exactly what we expect,
given that we just installed Terra only.
So lets think about where we are now.
So we have forked the
repository from Qiskit
to our own GitHub profile,
and then we have downloaded
that code onto our computer
by cloning using GitHub,
and what else have we done?
We also have installed
this particular version of
Qiskit Terra that we've downloaded
into this particular
environment that we've created.
Okay so what does that mean?
Now we're ready to start running things
with this version of Qiskit Terra.
So I personally like to write
code in Jupyter Notebooks.
So what that means is now

Spanish: 
Necesito lanzar Jupyter Notebooks y
 empezar a escribir código.
Lo que voy a hacer para mantener las cosas claras
es también crear un kernel
en el que correremos código
en los Jupiter Notebooks
Entonces, las instrucciones para crear un nuevo kernel
están disponibles desde esta página
y también crearemos un enlace a estas
en la descripción a continuación.
Entonces, si se desplazan hacia abajo
a la sección de kernels para diferentes
entornos dentro de esta página
y usan esta instrucción particular,
esta es la que voy usar en mi línea de comandos.
Así que voy a copiar esto.
Voy a salir de esta instancia de Python.
Así que ahora estoy en la carpeta Qiskit Terra.
Voy a ir una hacia arriba
y luego voy a pegar
ese fragmento de código de la web.
Y voy a decir el nombre del entorno es,
"fixissueenviornment"
y el nombre nuevamente vendrá aquí.
Este es el nombre del entorno
en el que estoy instalando el kernel

English: 
I need to launch Jupyter
Notebooks and start writing code.
What I'm going to do to keep things clean
is to also create a kernel
on which we'll run code
in the Jupiter Notebooks.
So the instructions to create a new kernel
are available from this page
and we will also create a link to this
in the description below.
So if you scroll down to
kernels for different
environments section of this page
and you use this particular instruction,
this is the one that I'm going
to use in my command line.
So I'm going to copy this over.
I'm going to exit out
of this Python instance.
So right now I'm in the
Qiskit Terra folder.
I'm going to go one above it
and then I'm going to paste in
that piece of code from the web.
And I'm going to say the
name of the environment is,
"fixissueenviornment"
and the name is again going to come here.
So this is the name of
the environment that
I'm installing the kernel in

English: 
and this is the display name
that will be seen in the Jupyter Notebook.
So type that in and we
have the kernel installed.
So what I'm going to do then is just say,
"jupyter notebook".
So that creates a new Jupyter instance
and what I can then say is,
"new fixissueenviornment",
so this is the one that we just created.
I'm going to create a new Jupyter Notebook
and this is the kernel
that's going to run.
So let's do the same thing as before.
I'm going to say, "import
qiskit", hit enter.
Again we got the same errors that we did--
that we got on the command line,
which is we need to install Qiskit Aer
and Qiskit IBMQ provider
and if we say,
"qiskit.__qiskit_version__",
we get the version of Terra
and nothing else is installed.
So far, so good.
So now we are able to write
code using this particular

Spanish: 
y este es el nombre para mostrar
eso se verá en Jupyter Notebook.
Así que escriban eso y tendremos 
el kernel instalado
Entonces, lo que voy a hacer es decir:
"jupyter notebook".
Entonces eso crea una nueva instancia de Jupyter
y lo que puedo decir es,
"new fixissueenviornment",
así que este es el que acabamos de crear.
Voy a crear un nuevo Jupyter Notebook
y este es el kernel que va a correr.
Así que hagamos lo mismo que antes.
Voy a decir: "import qiskit ",
 presionar enter.
Nuevamente obtuvimos los mismos errores
que obtuvimos en la línea de comandos,
que necesitamos  instalar Qiskit Aer
y Qiskit IBMQ provider
y si decimos
"qiskit.__ qiskit_version__",
tenemos la versión de Terra
Y nada más está instalado.
Hasta ahora todo perfecto.
Así que ahora podemos escribir
código usando esta 

Spanish: 
versión de Terra en particular en
este kernel en particular.
Muy bien, ahora
volvamos al tema en el que estábamos 
a punto de trabajar
Entonces el problema era
en los "good first issues",
Creo que era el número 2822.
Sí.
Este es el código que
la persona ha informado
Esto está creando el circuito.
Así que copiemos eso en 
nuestro Jupyter Notebook
y veamos qué pasa cuando lo ejecutamos.
Tan pronto como lo ejecutamos,
nos sale un error, ¿verdad?
Entonces dice nombre "QuantumRegister" 
no está definido.
Eso es porque no hemos hecho
"from quiskit import *"
Si hacemos eso, ahora tenemos un nuevo error
que dice que el nombre "pi" no está definido
y este error parece que viene
porque la persona no ha dicho
"import numpy as np"
y luego dijo "pi = np.pi".
Entonces, cuando ejecutamos este código,

English: 
version of Terra in
this particular kernel.
All right so now,
let's go back to the issue
that we were about to work on.
So the issue was
in the good first issues,
I think it was number 2822.
Yep.
So this is the piece of code that
the person has reported,
that's creating the circuit.
So let's copy that over
into our Jupyter Notebook
and see what happens when we run it.
So as soon as we run it,
we get an error, right?
So it says name quantum
register is not defined.
So that's because we haven't done from
Qiskit import everything.
If we do that, now we get a new error
which says name pi is not defined
and this error looks like it's coming
because the person has not said,
"import numpy as np"
and then said, "pi = np.pi".
So now when we run this code,

English: 
we're able to get the
print out without errors
and it looks like this issue
is showing up now, right?
So we see pi, pi, pi,
and we see nothing in this gate.
Both gates are taking
in the same parameters
for the angles so it looks
like there's some issue
that's cause the single cubic gates
not to get the print out of the angles,
but the two cubic gates seem to be fine.
Okay, so my instinct when
I see something like this
is to first see if it's localized
to just a matplotlib plot
or to all kinds of circuit plots.
So, I'm going to copy this code over
and just remove this argument and run it.
So now this is the ascii
draw version of the circuit.
So you see here, the angles are
showing fine for both gates.
So it looks like this issue is limited to
the matplotlib version of the code.

Spanish: 
somos capaces de obtener gráfico sin errores
y parece que este problema está 
apareciendo ahora, ¿verdad?
Entonces vemos "pi", "pi", "pi",
y no vemos nada en esta compuerta.
Ambas compuertas están tomando los mismos parámetros
para los ángulos, entonces parece como si 
hubiera algún problema
que está causando que las compuertas simples
no impriman los ángulos,
pero las compuertas de dos qubits parecen estar bien.
Bien, entonces mi instinto cuando  veo algo así
es ver primero si está localizado
a solo la gráfica a través de "matplotlib"
o para todo tipo de gráficas de circuitos.
Entonces, voy a copiar este código
y simplemente eliminar este argumento y ejecutarlo.
Así que ahora este es la version ASCII
 del gráfico del circuito.
Entonces vean aquí, los ángulos se muestran correctamente para ambas compuertas.
Parece que este problema está limitado a
La versión matplotlib del código.

English: 
Okay, that's a hint as to
what the problem might be.
So now what I want to know is
how this function.draw works
so that I can see how it
does things without arguments
and with arguments.
So I'm going to take this
and I'm going to ask for help on it.
So one of the best things about Qiskit
is that there are docstrings
and they're very helpful
in these functions.
So if you just ask for help,
you should see something
that's very useful.
So you see here, there's
something that says,
"Help on TextDrawing in module
qiskit.visulalization.text"
Okay so,
this thing takes arguments
and gives these outputs
so let's look in this file,
qiskit.visualization.text.
So what I'm going to do
is open a finder window
and navigate to this
particular piece of code.
So this is the directory
where we're working now,
so this is the Qiskit Terra
folder that was cloned
and looking inside we're looking for

Spanish: 
Bien, eso es una pista de
cuál podría ser el problema.
Así que ahora lo que quiero saber es
cómo funciona este "function.draw"
para que pueda ver cómo se ejecuta sin argumentos
y con argumentos.
Entonces voy a tomar esto
y voy a pedir ayuda al respecto.
Entonces, una de las mejores cosas de Qiskit
es que hay "docstrings"
y son muy útiles
en estas funciones
Entonces, si solo pides ayuda,
deberías ver algo que es muy útil.
Entonces ven aquí, hay
algo que dice
"Help on TextDrawing in module qiskit.visulalization.text"
Bueno entonces,
esta cosa lleva argumentos
y da estos resultados
así que echemos un vistazo a este archivo,
"qiskit.visualization.text".
Entonces que voy a hacer es abrir 
una ventana de "finder"
y navegar hacia esta porción 
particular de código.
Entonces este es el directorio donde
 estamos trabajando ahora
así que este es la carpeta Qiskit Terra
que fue clonada
y mirando adentro estamos buscando

Spanish: 
Qiskit, visualización, textos.
Entonces iré a Qiskit,
Iré a la visualización,
y miraré en el código de texto.
Entonces, lo que estoy viendo aquí es
algo que dibuja el código de texto.
Ok, estos son todos los detalles
que están involucrados en
dibujar el circuito cuántico
y probablemente sea fascinante
mirar a través de todo esto.
Lo que voy a hacer es preguntar
dónde existe la línea "mpl".
En ninguna parte. Todo bien.
Buscando en la misma carpeta,
Tenemos algo para graficar y escribir.
La gráfica "matplotlib" que usé probablemente usa
este archivo en particular llamado "matplotlib"
así que abramos eso aquí también.
Miremos aquí dentro.
(música pop)

English: 
Qiskit, visualization, texts.
So I'll go to Qiskit,
I'll go to visualization,
and I'll look in the text code.
So what I'm seeing here is
something that draws the text code.
Okay, so these are all the details
that are involved in
drawing the Quantum circuit
and it's probably fascinating
to look through all of this.
What I'm going to do is ask
for where the NPL line exists.
Nowhere. All right.
Looking in the same folder,
we have something for plotting and text.
The matplotlib plot that
I used probably uses
this particular file called matplotlib
so let's open that here as well.
Look inside here.
(upbeat pop music)

Spanish: 
(música pop)
Bien, esto parece prometedor.
Entonces, esto parece el fragmento de código
que dibuja compuertas de un solo qubit
y parece que tenemos compuertas 
de múltiples qubits también.
Veamos el código de compuertas simples.
Ah, está bien.
Creo que podríamos haber encontrado 
nuestro problema.
Entonces, estoy viendo "self._gate" aquí
y hay texto que muestra
qué tipo de compuerta es.
Entonces este es probablemente el nombre 
de la compuerta,
y luego hay subtexto.
Creo que estos son los argumentos "pi", "pi", "pi"
que supuestamente deberíamos estar mostrando.
Así que asegurémonos antes que nada.
Entonces imprimamos "prm",
y guardemos esto rápidamente.
Parece que cuando la longitud es inferior a 20

English: 
(upbeat pop music)
Okay, so this looks promising.
So, this looks like the fragment of code
that draws single cubic gates
and looks like we have
multiple cubic gates as well.
Let's look in the single
cubic k agates code.
Ahh, okay.
I think me might have found our issue.
So, I'm seeing self.gate here
and there's text that displays
what kind of gate it is.
So this is probably the name of the gate
and then there's subtext.
I think these are the pi, pi, pi arguments
that we're supposed to be trying.
So let's make sure first of all.
So let's print PRN
and just save that very quickly.
It looks like this is length less than 20

English: 
is when this shows.
If length is bigger than 20,
then this section of code
runs without subtext.
So let's also see what the length
of PRM is that we're trying to work with.
So I'm going to say
print the length as well.
So I'm going to then go back
and restart the kernel
and run everything again.
Okay!
So we are in the right
section of code at least.
So this is the PRM parameter
and it's length is 23.
Okay, I think now we know
what the error is, right?
So, if the length is less than 20,
we show the subtext.
Otherwise, we don't show the subtext.
So if I make this number
something like maybe,
28, I don't know, and
rerun the piece of code,
then we should see the parameters, right?
- [Student] Sounds correct.
- [Instructor] Ahh, there we go!

Spanish: 
es cuando esto se muestra.
Si la longitud es mayor que 20,
entonces esta sección de código
se ejecuta sin subtexto.
Entonces, veamos también cuál es la longitud
de "prm" con la que estamos intentando trabajar.
Entonces voy a decir imprime 
la longitud también.
Entonces voy a volver
y reiniciar el kernel y ejecutar todo nuevamente.
¡Bueno!
Entonces estamos en la sección de código
correcta al menos.
Entonces este es el parámetro "prm"
y su longitud es 23.
Bien, creo que ahora sabemos
cuál es el error, ¿verdad?
Entonces, si la longitud es inferior a 20,
Mostramos el subtexto.
De lo contrario, no mostramos el subtexto.
Entonces si hago este número
algo como tal vez
28, no lo sé, y vuelvo a ejecutar el código,
entonces deberíamos ver los parámetros, ¿verdad?
- [Estudiante] Suena correcto.
- [Instructor] Ahh, ahí vamos!

Spanish: 
Bien, ahora tenemos los números para mostrar
entonces arreglamos al menos esa parte.
En términos de consistencia,
hay paréntesis aquí y ninguno aquí.
Entonces probablemente sea por esto,
así que eliminemos esto
y volvamos al código
kernel, reiniciar y ejecutar todo.
- [Estudiante] Suena correcto.
- [Instructor] Sí, ahora no tenemos paréntesis
y parece que las cosas son consistentes.
Entonces eso soluciona el problema que se informó.
Entonces, una cosa más que voy a hacer es,
este número 28 es algo que solo elegí al azar.
Asegurémonos de que podamos mostrar
algo así como "pi" sobre dos, "pi" sobre dos,
y "pi" sobre dos.
Entonces, vamos a hacer eso
clickear "Cell", ejecuta todo.
Parece que 28 es capaz de acomodar
esto porque 25 es la longitud
cuando tienes un dígito
en todos los denominadores.

English: 
Okay so, now we get the numbers to show up
so we fixed at least that part.
In terms of consistency,
there is parenthesis here and none here.
So that's probably because of this,
so let's remove this
and go back to the code,
kernel, restart, and run all.
- [Student] Sounds Correct.
- [Instructor] Yeah, now
we have no parenthesis
and it looks like things are consistent.
So that fixes the issue that was reported.
So, one more thing I'm going to do is,
this number 28 is something
I just randomly picked.
Let's make sure that we can display
something like pi over two, pi over two,
and pi over two.
So, we're going to do that
and hit cell, run all.
So it looks like 28 is able to accommodate
this because 25 is the length
when you have one digit
in all the denominators.

Spanish: 
Bien, entonces 25 es un número razonable.
Voy a decir 28 para estar a salvo.
Voy a eliminar los "print" del código
porque los inserté para depurar.
Y ahora estamos listos para informar
que solucionamos este problema.
Así que un último chequeo.
Voy a reiniciar el kernel 
y ejecutar todo.
No hay salidas "print" en la depuración
y obtenemos la consistencia
que estábamos buscando al principio.
Muy bien, en este punto,
estamos listos para enviar este código
de vuelta a GitHub e informar que 
solucionamos el problema.
Para estar seguro, una de las cosas 
que tenemos que hacer
es asegurarnos de no haber roto nada
en el proceso de solucionar un problema.
Así que vamos a correr algunas pruebas.
Entonces voy a volver a 
la línea de comandos
y volver al directorio donde estoy trabajando.
Entonces voy a
activar el directorio para solucionar el problema

English: 
Okay, so 25 is a reasonable number.
I'm going to say 28 to be safe.
I'm going to remove these print statements
because I inserted them for debugging.
And now we're ready to report
that we fixed this issue.
So one last check.
I'm going to restart the
kernel and run everything.
No print outs for debugging
and we get the consistencey
that we were looking for at first.
All right, at this point,
we are ready to now submit this code
back to GitHub and report
that we fixed the issue.
So to be safe, one of the
things that we have to do
is make sure that we
haven't broken anything
in the process of fixing an issue.
So we're going to run a few tests.
So I'm going to go back
to the command line
and go back to the
directory where I'm working.
So I'm going to
activate the fix issue directory.

Spanish: 
"fixissueenv"
Y voy a ir, dentro este entorno particular.
Así que ahora, estamos en el Qiskit Terra.
Estamos fuera de la carpeta Qiskit Terra.
Voy a entrar de nuevo
y voy a decir "make style".
Entonces esta es la primer
prueba que estamos corriendo,
y verán lo que va a hacer,
es asegurarse de que el código
es consistente en el estilo.
Que no hayamos agregado tal vez un espacio,
en lugar de dos espacios, ese tipo de cosas.
Así que no hay errores reportados aquí.
También voy a correr, "make lint".
"Lint" es una prueba mucho más exhaustiva
así que va a buscar consistencia a lo largo de todo el código
usando expresiones regulares
Y esto puede tomar unos minutos.
Lo que van a hacer es
una vez que informe cualquier 
problema que encuentre,
van a mirar
y ver si alguno de esos problemas 
fueron causados ​​por ustedes
o si no fueron causados ​​por ustedes.
Si no lo fueron, entonces están 
listos para seguir adelante.
Una vez que se completa el "lint",

English: 
Fix issue end.
And I'm going to, within
this particular environment.
So right now, we're in the Qiskit Terra.
We're outside the Qiskit Terra folder.
I'm going to go inside again
and I'm going to say, "make style".
So this is the first
test that we're running,
and you'll see what it's going to do,
is make sure that the code
is stylistically consistent.
So we haven't added maybe a space,
instead of two spaces, that sort of thing.
So no errors reported here.
I'm also going to run, "make lint".
Lint is a much more thorough test
so it's going to consistently
look throughout the code
using regular expressions
and this can take a few moments.
What you're going to do is,
once it reports whatever issues it finds,
you're going to look through
and see if any of those
issues were caused by you
or if they're not caused by you.
If they're not, then
you're ready to move on.
Once the linting completes,

English: 
you can see that there are no
particular errors that I've caused.
So the code has been rated 10 out of 10
and in particular,
there's this module
that reported one error
but I wasn't working in this folder
so this must be something that
someone else is working on.
So I'll move on to the third
test and that's simply,
"make test" and this is a thorough code
of testing the code itself.
Once your tests finish,
make sure that there are no errors
of the particular files that you changed
and if you see no errors,
we're ready to move on.
So the next step now becomes,
contributing this code back to GitHub.
So I'm going to clear my terminal window.
If you don't know yet,
the keyboard shortcut is command plus K.
And what I'm going to do
then is say, "git status"
to see where things are,
and you see it tells you where
on this particular branch,
we've changed this particular file
and these things are untracked.
They were probably created
during the testing process that we ran.

Spanish: 
pueden ver que no hay
errores particulares que yo haya causado.
Entonces el código ha sido calificado 10 de 10
y en particular,
está este módulo
que informó un error
pero yo no estaba trabajando en esta carpeta
así que esto debe ser algo en lo que
alguien más está trabajando.
Así que pasaré a la tercera
prueba y eso es simplemente,
"make test" y esta es una prueba de completitud
para probar el código en sí.
Una vez que terminen las pruebas,
asegúrense que no haya errores
particularmente en los archivos que cambiaron
y si no ven errores,
Estamos listos para seguir adelante.
Entonces el siguiente paso se convierte ahora,
cargar este código nuevamente a GitHub.
Así que voy a limpiar mi ventana de terminal.
Si aún no lo sabes,
el atajo de teclado es "command" más "K".
Y lo que voy a hacer
entonces es decir, "git status"
para ver dónde están las cosas,
y ven que les dice dónde en 
esta rama en particular,
hemos cambiado este archivo en particular
y estas cosas no están rastreadas.
Probablemente fueron creados
durante el proceso de prueba que ejecutamos.

Spanish: 
Entonces, para enviar
los cambios a estos archivos particulares
y no estos otros
Así que haré, "git add -u"
y luego diré "git status" nuevamente
y ahora ven este archivo de código en particular
que cambié es verde en lugar de rojo.
Muy bien, entonces este archivo todavía 
está sin rastrear.
Lo que voy a decir es "git commit -m"
y voy a agregar un pequeño texto
para describir lo que hice,
soluciono el problema 2822 actualizando,
veamos,
mediante la actualización,
graficador "matplotlib".
¡Bueno! Eso es.
Y ahora de nuevo, hagámos, "git status".
Ven aquí que el estado te muestra

English: 
So in order to just submit
the changes to these particular files
and not these other ones.
So I'll do, "git add -u"
and then I'll say, "git status" again
and now you see this particular code
file that I changed is
green instead of red.
All right, so this file is still on track.
What I'm going to say is, "git commit -m"
and I'm going to add a small piece of text
to describe what I did so,
fixed issue 2822 by updating,
let's see,
by updating,
matplotlib drawer.
Okay! That's it.
And now again, let's do, "git status".
You see here that the status shows you

English: 
that there's nothing that we're
going to put in the commit.
So now we're ready to push
so we'll say, "git push".
When you do that, you
get this error message
because you're working
on a specific branch
so the fix is very simple,
just copy this line over and run that.
So, let's copy this over.
Okay, so now that that's done,
let's go back to the GitHub page.
So we're going to go to GitHub.com/Qiskit
and Qiskit Terra and you see this message
that says, "Hey, you
just pushed something."
So let's put a pull request
to put these changes forward
and ask for a review.
So I'm going to say,
"compare and pull request".
And now the text that I
wrote in the commit message
comes in here.
So fixed issue 2822 by updating.
I'm going to say in the summary,
"Fixes #2822".

Spanish: 
que no hay nada que vayamos a agregar en el "commit".
Así que ahora estamos listos para empujar
entonces diremos "git push".
Cuando hacen eso, reciben este mensaje de error
porque están trabajando
en una rama específica
entonces la solución es muy simple,
simplemente copien esta línea y ejecútenla.
Entonces, copiemos esto.
Bien, ahora que ya está hecho,
volvamos a la página de GitHub.
Entonces vamos a ir a GitHub.com/Qiskit
y Qiskit Terra y ven este mensaje
que dice: "Oye, tú
has empujado algo ".
Así que hagamos un "pull request"
para presentar estos cambios
y solicitar una revisión.
Entonces voy a decir "compare and pull request".
Y ahora el texto que yo escribí 
en el mensaje de "commit"
entra aquí
Entonces solucionó el problema 2822 actualizando.
Voy a decir en el resumen:
"Fixes #2822".

English: 
So there's a benefit to
doing something like this.
So when you do this, so GitHub
automatically understands
that you're submitting this pull request
to fix this issue
so it goes and closes that issue
once the pull request goes through.
So let's put in some comments.
So I try to be as descriptive as I can
in the details and comments
and in the summary,
I try to say, fixed the issue
number that we're working on.
Okay.
So at this point, it's a good
idea to look at the changes
that you're submitting.
So here you can see Git is telling us
that this used to be the old line of code
and I've submitted this.
So removed the parenthesis
and changed the limit
to 28 characters.
Okay, now we're ready and there we go.
So I'm going to create
a pull request here.
At this point, now that you've
submitted the pull request,
a few things are going to happen.
First, some tests are
going to run automatically

Spanish: 
Entonces hay un beneficio en hacer algo como esto.
Entonces cuando haces esto, GitHub
entiende automáticamente
que está enviando este "pull request"
para solucionar este problema
así que va y cierra ese problema
una vez que se realiza el "pull request"
Así que pongamos algunos comentarios.
Así que trato de ser lo más descriptivo posible
en los detalles y comentarios
y en el resumen,
Intento decir, solucioné el problema número 
en el que estamos trabajando.
Bueno.
En este punto, es una buena
idea mirar los cambios
que estás enviando
Así que aquí puedes ver que Git nos está diciendo
que esta solía ser la antigua línea de código
y yo he enviado esto.
Así quitó el paréntesis y cambió el límite
a 28 caracteres.
Bien, ahora estamos listos y ahí vamos.
Entonces voy a crear un "pull request"
En este punto, ahora que han enviado el "pull request"
Algunas cosas van a suceder.
Primero, algunas pruebas van a correr automáticamente

Spanish: 
y pueden verlas apareciendo en mi pantalla.
Las otras cosas que pueden hacer,
una vez que pasan las pruebas,
es firmar un acuerdo de licencia 
de contribuyente
si aún no lo han firmado aún.
Y eso sucedería aquí en esta línea.
Lo último que sucederá
una vez que todas estas pruebas terminen
es que hay revisores asignados
a este repositorio particular.
Lo revisarán y lo enviarán
y permitirán que sea parte del 
código una vez que sea razonable
Entonces como pueden ver,
hemos pasado por todo el proceso
de arreglar un problema en Qiskit Terra
y lo que hicimos es efectivamente 
encontrar ese problema
en GitHub, descargar ese código 
en nuestra computadora,
hacer esos cambios, correr pruebas 
para asegurarnos que
esos cambios no rompan nada,
y envíar esos cambios a GitHub.
Y los cambios que hemos hecho aquí
tienen bastante impacto, ¿verdad?
Qiskit es un software de código abierto
y esta es una de las partes realmente geniales
sobre trabajar en Qiskit.
Los cambios que están haciendo,
las soluciones que están creando, 
son cambios positivos

English: 
and you can see them
showing up on my screen.
The other things that you can do,
once the tests go through,
is to sign a contributor license agreement
if you haven't signed it already.
And that would happen here in this line.
The final thing that will happen
once all of these tests go through
is that there are reviewers assigned
to this particular repository.
They'll look through this and submit it
and allow it to be part of
the code once it's reasonable.
So as you can see,
we've gone through the entire process
of fixing an issue in Qiskit Terra
and what we did is
effectively find that issue
in GitHub, download that
code to our computer,
make those changes, run
tests to make sure that
those changes don't break anything,
and submit those changes back to GitHub.
And the changes that we've made here
are quite impactful, right?
So Qiskit is open-source software
and this is one of the really cool parts
about working in Qiskit.
The changes that you're making,
the fixes that you're
doing, are positive changes

Spanish: 
a una comunidad de computación cuántica 
mucho más grande.
Y entonces hay oportunidad de hacer
un gran impacto aquí.
Entonces, lo que me gustaría hacer es
terminar pidiéndoles que contribuyan 
a Qiskit también.
Así que vayan a Qiskit Terra,
encuentren un problema que
les parezca interesante
y cuéntennos en los comentarios a continuación,
con qué problema han comenzado a contribuir
y qué "pull requests" han enviado
como resultado de ese trabajo.
¡Nos vemos en los comentarios!
(música pop)

English: 
to a much bigger Quantum
computing community.
And so there's chance to make
a big impact impact here.
So what I'd like to do is
finish off by asking you to
contribute to Qiskit as well.
So go to Qiskit Terra,
find an issue that
looks interesting to you
and tell us in the comments down below,
what issue you've started contributing to
and what pull requests you've submitted
as a result of that work.
We'll see you in the comments!
(upbeat pop music)
(upbeat pop music)
(upbeat pop music)
(upbeat pop music
