프로젝트 작업 Q#
Azure Quantum Development Kit릴리스를 사용하면 서로의 리소스에 액세스할 수 있는 여러 Q# 파일이 있는 폴더 구조인 프로젝트를 정의Q#할 수 있습니다. 프로젝트는 재사용 가능한 라이브러리를 만들고 소스 코드를 논리적으로 구성하는 데 유용합니다.
프로젝트에는 Q#Q# 매니페스트 파일( qsharp.json)과 지정된 폴더 구조에 있는 하나 이상의 *.qs 파일이 포함됩니다. 사용자가 VS Code에서 *.qs 파일을 열거나 Jupyter Notebook 또는 Python 파일에서 를 설정 project_root
하면 컴파일러는 주변 폴더 계층 구조에서 매니페스트 파일을 검색하고 프로젝트의 scope 결정합니다. 매니페스트 파일을 찾을 수 없는 경우 컴파일러는 단일 파일 모드에서 작동합니다. Q# 프로젝트를 VS Code에서 수동으로 또는 직접 만들 수 있습니다.
사전 요구 사항
- Azure 구독의 Azure Quantum 작업 영역. 작업 영역을 만들려면 Azure Quantum 작업 영역 만들기를 참조하세요.
- Python 및 Pip가 설치된 Python 환경.
- Azure Quantum Development Kit 및 Python 확장이 설치된 Visual Studio Code.
- Azure Quantum
qsharp
및azure-quantum
패키지.
Q# 프로젝트 정의
Q# 프로젝트는 프로젝트의 루트 폴더에 있어야 하는 qsharp.json 매니페스트 파일 및 src 폴더(원본 파일 포함Q#)가 있는 것으로 정의됩니다. 프로그램의 Q# 경우 Q# 컴파일러는 프로젝트 폴더를 자동으로 검색합니다. Python 프로그램 및 Jupyter Notebook의 경우 호출을 사용하여 Q# 프로젝트 폴더를 qsharp.init
지정해야 합니다. 그러나 프로젝트의 폴더 구조 Q# 는 모든 유형의 프로그램에서 동일하게 유지됩니다.
프로젝트 폴더 정의(Q# 프로그램)
VS Code Q# 에서 *.qs 파일을 열면 컴파일러는 폴더 구조에서 위쪽으로 검색하여 qsharp.json 매니페스트 파일을 검색합니다. 매니페스트 파일을 찾으면 컴파일러는 src 디렉터리의 모든 하위 폴더에서 *.qs 파일을 검색하고 모든 작업 또는 함수를 캐시하고 매니페스트 파일의 제외 규칙에 따라 모든 *.qs 파일에서 해당 작업 및 함수를 사용할 수 있도록 합니다.
예를 들어 이 폴더 구조는 다음과 같습니다.
- Teleportation_project
- qsharp.json
- src
- RunTeleport.qs
- TeleportOperations
- Teleport.qs
- PrepareState
- PrepareState.qs
/src/TeleportOperation/PrepareState/PrepareState.qs 파일을 열면 컴파일러:Q#
- qsharp.json 파일의 /src/TeleportOperation/PrepareState/를 확인합니다.
- qsharp.json /src/TeleportOperation을 확인합니다.
- qsharp.json /src를 확인합니다.
- /qsharp.json 확인합니다.
- / 는 프로젝트의 루트 디렉터리로 설정되며 매니페스트 파일의 설정에 따라 프로젝트의 루트 아래에 있는 모든 *.qs 파일을 포함합니다.
매니페스트 파일 만들기
매니페스트 파일은 선택적으로 작성자, 라이선스 및 .ints 필드를 포함할 수 있는 qsharp.json 라는 간단한 .json 파일입니다. 실행 가능한 최소 매니페스트 파일은 문자열 {}
입니다. VS Code에서 프로젝트를 만들 Q# 면 최소 매니페스트 파일이 만들어집니다.
{}
매니페스트 파일 예제
다음은 매니페스트 파일이 프로젝트의 scope 정의하는 방법에 대한 Q# 몇 가지 예입니다.
이 예제에서 작성 자는 지정된 유일한 필드이므로 이 디렉터리의 모든 *.qs 파일과 모든 하위 디렉터리가 프로젝트에 포함 Q# 됩니다.
{
"author":"Microsoft"
}
{
"author":"Microsoft",
"license":"MIT"
}
Q# 프로젝트 내에서 매니페스트 파일을 사용하여 VS Code Q# Linter 설정을 미세 조정할 수도 있습니다. 기본적으로 세 가지 Linter 규칙은 다음과 같습니다.
needlessParens
: default =allow
divisionByZero
: default =warn
redundantSemicolons
: default =warn
매니페스트 파일을 사용하여 각 규칙을 allow
, warn
또는 error
로 설정할 수 있습니다.
{
"author":"Microsoft",
"lints": [
{
"lint": "needlessParens",
"level": "allow"
},
{
"lint": "redundantSemicolons",
"level": "warn"
},
{
"lint": "divisionByZero",
"level": "error"
}
]
}
Q# 프로젝트 요구 사항 및 속성
다음 요구 사항 및 구성은 모든 Q# 프로젝트에 적용됩니다.
- 프로젝트에 포함하려는 모든 *.qs 파일은 src라는 폴더 아래에 있어야 합니다. 이 폴더는 프로젝트 루트 폴더 아래에 Q# 있어야 합니다. VS Code에서 프로젝트를 만들 Q# 면 폴더가
/src
자동으로 만들어집니다. - qsharp.json 매니페스트 파일은 src 폴더와 동일한 수준에 있어야 합니다. VS Code에서 프로젝트를 만들 Q# 면 qsharp.json 파일이 자동으로 만들어집니다.
- 다음 문을 사용하여
open
사용 가능한 원본 파일의 작업 및 함수에 액세스할 수 있습니다.
open MyMathLib;
...
Multiply(x,y);
또는 네임스페이스를 사용하여 참조:
MyMathLib.Multiply(x,y);
Q# 프로그램 전용
- 프로젝트의 *.qs 파일 Q# 하나만 정의할
@EntryPoint()
수 있습니다. - 정의가 있는
@EntryPoint()
*.qs 파일은 매니페스트 파일 아래의 모든 수준에서 찾을 수 있습니다. - 프로젝트의 아무 곳이나 Q# *.qs 파일에서 캐시되는 모든 작업 또는 함수는 VS Code의 예측 텍스트에 표시됩니다.
- 선택한 작업 또는 함수의 네임스페이스가 아직 추가되지 않은 경우 VS Code는 필요한
open
문을 자동으로 추가합니다.
프로젝트를 만드는 Q# 단계
VS Code 파일 탐색기에서 프로젝트 루트 폴더에 Q# 사용할 폴더를 마우스 오른쪽 단추로 클릭하고 Create Q# 프로젝트를 선택하거나 폴더를 열고 명령 팔레트 >Q#보기 > : 프로젝트 Create...를 Q#선택합니다.
VS Code는 폴더에 최소 qsharp.json 매니페스트 파일을 만들고 템플릿 파일이 있는
/src
폴더를Main.qs
추가합니다.필요에 따라 매니페스트 파일을 편집합니다. 매니페스트 파일 예제를 참조하세요.
폴더 아래에 원본 파일을 추가하고 구성합니다 Q#
/src
.Python 프로그램 또는 Jupyter Notebook 프로젝트에 액세스하는 Q# 경우 를 사용하여
qsharp.init
루트 폴더 경로를 설정합니다. 이 예제에서는 프로그램이 프로젝트의 루트 폴더와 동일한 폴더에 있다고 가정합니다.Q#qsharp.init(project_root = './Teleportation_project')
VS Code에서 파일만 Q# 사용하는 경우 파일을 열 Q# 때 컴파일러는 qsharp.json 매니페스트 파일을 검색하고 프로젝트 루트 폴더를 확인한 다음 하위 폴더에서 *.qs 파일을 검색합니다.
참고
2단계에서 매니페스트 파일 및 폴더를 /src
수동으로 만들 수도 있습니다.
예제 프로젝트
이 양자 텔레포트 프로그램은 이전에 표시된 폴더 구조를 기반으로 하는 프로젝트의 예 Q# 이며 VS Code의 로컬 시뮬레이터에서 실행됩니다. Azure Quantum 하드웨어 또는 타사 시뮬레이터에서 프로그램을 실행하려면 프로그램 시작 Q# 및 VSCode 를 참조하여 프로그램을 컴파일하고 Azure 작업 영역에 연결하는 단계를 참조하세요.
이 예제에서는 다음 디렉터리 구조를 사용합니다.
- Teleportation_project
- qsharp.json
- src
- RunTeleport.qs
- TeleportOperations
- Teleport.qs
- PrepareState
- PrepareState.qs
qsharp.json 매니페스트 파일에는 작성자 및 라이선스 필드가 포함됩니다.
{
"author":"Microsoft",
"license":"MIT"
}
Q# 원본 파일
한 가지 사소한 차이점인 @EntryPoint()
문 - 원본 파일은 프로그램, Python 프로그램 또는 Jupyter Notebook 동일합니다Q#.
기본 파일 RunTeleport.qs는 진입점을 포함하고 Teleport.qs의 네임스페이 TeleportLib
스를 참조합니다.
namespace RunTeleport {
open TeleportLib; // references the TeleportLib namespace in Teleport.qs
@EntryPoint() // @EntryPoint() not necessary for Python or Jupyter Notebook programs
operation RunTeleportationExample() : Unit {
use msg = Qubit();
use target = Qubit();
H(msg);
Teleport(msg, target); // calls the Teleport() operation from Teleport.qs
H(target);
if M(target) == Zero {
Message("Teleported successfully!");
Reset(msg);
Reset(target);
}
}
}
Teleport.qs는Teleport()
작업을 정의하고 PrepareState.qs에서 작업을 호출 PrepareBellPair()
합니다.
namespace TeleportLib {
open PrepareBell; // references the PrepareBell namespace in PrepareState.qs
operation Teleport(msg : Qubit, target : Qubit) : Unit {
use here = Qubit();
PrepareBellPair(here, target); // calls the PrepareBellPair() operation from PrepareState.qs
Adjoint PrepareBellPair(msg, here);
if M(msg) == One { Z(target); }
if M(here) == One { X(target); }
Reset(here);
}
}
PrepareState.qs 파일에는 벨 쌍을 만드는 표준 재사용 가능한 작업이 포함되어 있습니다.
namespace PrepareBell {
operation PrepareBellPair(left : Qubit, right : Qubit) : Unit is Adj + Ctl {
H(left);
CNOT(left, right);
}
}
프로그램 실행
프로그램을 실행 중인 환경의 탭을 선택합니다.
이 프로그램을 실행하려면 VS Code에서 RunTeleport.qs 파일을 열고 실행을 선택합니다.
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기