質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
関数型プログラミング

関数型プログラミングとは、関数を用いて演算子を構築し、算出し、コンピュータプログラムを構成する枠組みです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

受付中

___ got an unexpected keyword argument のエラーの解消

summersault
summersault

総合スコア1

関数型プログラミング

関数型プログラミングとは、関数を用いて演算子を構築し、算出し、コンピュータプログラムを構成する枠組みです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0回答

0評価

0クリップ

571閲覧

投稿2021/10/26 06:00

編集2022/01/12 10:55

前提・実現したいこと

PythonのQiskitで論文(https://iopscience.iop.org/article/10.1088/2058-9565/aba404/meta)の再現をしていたところ、何やら論文の関数(cr_pulse_utils.pyの中のcr_designer関数)とqiskitの方の関数(qiskit.schedule)で齟齬が起きているようです。
論文で使用されたソースコードは(https://doi.org/10.5281/zenodo.3751565)で公開されています。

Errorを解決したいです。
自分はかなりprograming初学者で、必要な情報がここに詰められているかも怪しいので、足りない情報があればリクエストお願いします泣

発生している問題・エラーメッセージ

--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-49-58d3fa8a243e> in <module>() 12 13 transpiled_circuits = transpile(cr_rabi_circs, backend, basis_gates=ext_basis_gates, optimization_level=0) ---> 14 scheds = schedule(transpiled_circuits, backend,ext_inst_map) 15 16 qobj_1_1 = assemble(scheds, backend, meas_level=2, shots=shots) 5 frames /usr/local/lib/python3.7/dist-packages/qiskit/pulse/instruction_schedule_map.py in get(self, instruction, qubits, *params, **kwparams) 197 except TypeError as ex: 198 raise PulseError(_error_message) from ex --> 199 return function(**binds.arguments) 200 201 try: TypeError: cr_designer() got an unexpected keyword argument 'args'

該当のソースコード

Python

from copy import deepcopy from functools import partial import numpy as np import matplotlib.pyplot as plt import multiprocessing as mp import pickle import pprint import scipy.optimize as opt from qiskit import pulse, transpile, assemble, schedule, IBMQ, quantum_info as qi from qiskit.pulse import library as pulse_lib from qiskit.pulse.reschedule import align_measures from qiskit.ignis.verification import randomized_benchmarking as rb import qiskit # utility for pulse schedule generation from MyPythonLibrary.cr_pulse_utils import create_cr_circuit, var_amp, var_phi # utility for quantum process tomography from MyPythonLibrary.qpt_utils import create_qpt_experiment, extract_choi_matrix # utility for randomized benchmarking from MyPythonLibrary.rb_utils import create_rb_experiment, cache_circuit # utility for analysis from MyPythonLibrary.analysis_utils import (cr_3rd_order_perturbation, local_fidelity_optimization, optimize_circuit, expectation_val, hamiltonian_reconstruction, plot_quantum_channel, ExperimentRunner) from google.colab import drive drive.mount('/content/drive') # use cache data use_cache = True # data data_directory data_dir = './data/custom_cnot_experiments' account_provider = IBMQ.load_account() hub = 'ibm-q' group = 'open' project = 'main' # target backend backend_name = 'ibmq_manila' provider = IBMQ.get_provider(group = group) backend = provider.get_backend(backend_name) ######################## # # # Setup of experiments # # # ######################## # control qubit index control = 1 # target qubit index target = 0 # control channel index u_index = 1 # maximum cross resonance amplitude in this experiment max_cr_amplitude = 0.35 # sample number restriction alignment = 16 # initial cross resonance pulse parameters cr_params = {'duration': 53 * alignment, 'amp': var_amp, 'phi': var_phi, 'sigma': 2 * alignment, 'risefall': 4 * alignment} # backend information config = backend.configuration() defaults = backend.defaults() properties = backend.properties() # sorted list of qubits used in the experiments cr_qubits = sorted([control, target]) # quantum registers for handling abstracted schedule qregs = qiskit.QuantumRegister(config.n_qubits) # channels for visualization channels = [pulse.DriveChannel(control), pulse.DriveChannel(target), pulse.ControlChannel(u_index)] shots = 1024 # create QuantumCircuit layer abstraction of CR pulse schedule. # this technique is useful to incorporate pulse schedule with circuit instruction to # program complicated calibration sequence while keeping context of operation. cr_cal_circ, ext_inst_map, ext_basis_gates = create_cr_circuit( cross_resonance_params=cr_params, control=control, target=target, u_index=u_index, q_regs=qregs, inst_map=defaults.instruction_schedule_map, basis_gates=config.basis_gates, use_echo=True) cr_amps = np.linspace(-max_cr_amplitude, max_cr_amplitude, 20) # setup CR Rabi experiment with Z measurement cr_rabi_circ = cr_cal_circ.copy() cr_rabi_circ.measure_active() cr_rabi_circs = [] for cind, cr_amp in enumerate(cr_amps): fixed_cr_circ = cr_rabi_circ.bind_parameters({var_amp: cr_amp, var_phi: 0}) fixed_cr_circ.name = 'cr_rabi_circ_%d' % cind cr_rabi_circs.append(fixed_cr_circ) transpiled_circuits = transpile(cr_rabi_circs, backend, basis_gates=ext_basis_gates, optimization_level=0) scheds = schedule(transpiled_circuits, backend,ext_inst_map)##ここです qobj_1_1 = assemble(scheds, backend, meas_level=2, shots=shots)

試したこと

python

def cr_designer(*args, flip): """create cr pulse schedule.""" # parse parameters for qiskit expression format config = {} for param in __reserved: if param in sched_vars: # NOTE: circuit bind method stores parameters as args. expression = args[list(sched_vars.keys()).index(param)] else: expression = sched_args[param] config[param] = float(expression) if param == 'duration': config[param] = int(config[param]) # cross resonance pulse cr_pulse = _cr_pulse(duration=config['duration'], amp=config['amp'], phi=config['phi'] + np.pi if flip else config['phi'], sigma=config['sigma'], risefall=config['risefall'], name='CR90%s_u_var' % ('m' if flip else 'p'))

python

def get( self, instruction: Union[str, Instruction], qubits: Union[int, Iterable[int]], *params: Union[complex, ParameterExpression], **kwparams: Union[complex, ParameterExpression], ) -> Union[Schedule, ScheduleBlock]: """Return the defined :py:class:`~qiskit.pulse.Schedule` or :py:class:`~qiskit.pulse.ScheduleBlock` for the given instruction on the given qubits. If all keys are not specified this method returns schedule with unbound parameters. Args: instruction: Name of the instruction or the instruction itself. qubits: The qubits for the instruction. *params: Command parameters for generating the output schedule. **kwparams: Keyworded command parameters for generating the schedule. Returns: The Schedule defined for the input. Raises: PulseError: When invalid parameters are specified. """ instruction = _get_instruction_string(instruction) self.assert_has(instruction, qubits) generator = self._map[instruction][_to_tuple(qubits)] _error_message = ( f"*params={params}, **kwparams={kwparams} do not match with " f"the schedule generator signature {generator.signature}." ) function = generator.function if callable(function): try: # callables require full binding, but default values can exist. binds = generator.signature.bind(*params, **kwparams) binds.apply_defaults() except TypeError as ex: raise PulseError(_error_message) from ex return function(**binds.arguments)

get関数の一番下のソースコードを見るとfunctionに**argを入れているが、cr_designer関数の引数は*argなので悪さが起こっているのかと思って色々試してみたが、知識不足が祟ってerrorが増えるだけだった。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

etherbeg

2021/10/26 12:39

「該当のソースコード」にはソースコードの一部ではなく、すべて(ソースコードの1行目から最後の行まで)を貼ってください。 「論文自作の関数」とあるのは、論文にPythonのコードが記載されていたということでしょうか。その論文のURLも質問文に記載してください。
summersault

2021/10/26 15:33

ご指摘ありがとうございます! 一応colabで動かしていた全てのソースコードを追加しました。 また論文のURLとその論文で使用されたソースコードが公開されているURLも記載しました。
etherbeg

2021/10/27 22:30

追記していただいた論文のソースコードでは qiskit 0.18.0 を使用しているようですが、追試の環境で使用されているqiskitのバージョンも合わせていらっしゃいますか。 追記していただいた論文のソースコードの公開後に新たに、より新しいqiskitのバージョンの使用とバグフィクスやバックエンドの変更をしたソースコードも公開されているようですが、そちらも試されましたか。
summersault

2021/10/29 15:27 編集

疎すぎてバージョンを合わせる脳がありませんでした。 ありがとうございます! 一方で新しいバージョン使用のソースコードを !pip install qiskit==0.23.4 で合わせたのですが、errorは増えるし__got an unexpected は出るしで... 改善自体は諦めますが、バージョンを揃えたにも関わらずerrorが吐かれる原因として考えられるものってありますか?今後使う知識としてあれば教えてもらいたいです。
etherbeg

2021/10/29 14:02

ソースコードの中のREADME.mdファイルを見ていただいたらそこにも書いてありますが、本当に論文の筆者たちの環境と合わせようと思ったら、 pip install -r requirements.txt を実行して必要なライブラリをインストールします。 requirements.txtには、論文の筆者たちが実際にそのソースコードで使用したライブラリが、そのバージョンとともにリストアップされているはずなので、先のコマンドを実行すれば論文の筆者たちの環境と同じ環境が再現できるはずなのです(Pythonのバージョンに関してはまた別ですが…)。 しかし私が試してみたところ(Google Colaboratoryには不案内なのでローカル環境でですが)、いくつかのライブラリのインストールの準備段階で、どれも同じエラーが出ました。 ちょっと調べてみた限りでは、ライブラリのパッケージングのためのライブラリであるsetuptoolsのバージョンの問題、とのことなのですが、私の環境ではそのバージョンの問題はクリアしているはずなので、本当の原因は分からずじまいです。 Google Colaboratoryだとどうなるか分かりませんが…。 これらのエラーが出るライブラリについては、requirements.txtに記載されたバージョンではなく、現在の最新バージョンをインストールする(そのようにrequirements.txtを書き換える)ことによってエラーを回避できたので、とりあえずその方法ですべてのライブラリのインストールを済ませました。 その上でJupyter notebook環境でcustom_cnot_experiments.ipynbの実行を試みましたが、バックエンドをセットアップするところでエラーが出て中断しました。アカウントが必要なようですね? ローカルで使用可能なバックエンドで実行できないか試してみましたが、もう少し進んだところで別のエラーで中断しました。これを解決するqiskitの知識も量子計算の知識もありませんので、ここで断念しました。ちなみにこのエラーは TypeError: cr_designer() got an unexpected keyword argument 'args' とはまた別のエラーでした。 以上はVersion 1.0のソースコードでの試行です。 Version 2.0のソースコードはrequirements.txtの更新がされていない(1.0のまま)ので、同じ環境を作ることができません。一応上で作ったのと同じ環境と、個別に最低限のライブラリのみ pip install qiskit==0.23.4 といった感じでインストールした環境の、ふたつの環境で2.0の実行を試行してみましたが、上とはまた別のエラーでやはり断念しました。 > バージョンを揃えたにも関わらずerrorが吐かれる原因 上で書いたように、厳密な意味でバージョンを揃えるなら、pip install -r requirements.txtでライブラリをインストールして、qiskitの依存ライブラリやその他のライブラリのバージョンなども合わせます。 しかしその状態で論文著者の提供するソースコードを、手を加えることなくそのまま実行してエラーが出たら、その原因はどこにあるか、正直よく分からないです。 ライブラリ以外だと、バックエンドは違うでしょうし、Pythonのバージョンも違う可能性もありますが、エラーの感じからはそれらが原因ということはないような気がしますが…。 以上、少しでも参考になればと思い、こちらでの試行の様子なども報告してみました。 量子計算にもqiskitにもまったく詳しくないのに、安易に首を突っ込んでしまい、まったくお力になれず申し訳ありません。
summersault

2021/10/29 15:25

いえいえ、とんでもないです! ある問題に対して自分よりもプログラミングに詳しい人の見解を教えていただけただけでもめちゃめちゃ勉強になりました! etherbegさんに回答していただけなかったら、盲点にも気づかず、何より自分が疎いせいだとして1週間以上時間を潰してしまうところでした。 どうやら自分にはまだ再現がしにくい論文を選んでしまったみたいです。 時が経ってから再挑戦します。 また自分が変な質問をあげた時、見解や意見だけでも投稿していただけたら幸いです。 ありがとうございました!

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

関数型プログラミング

関数型プログラミングとは、関数を用いて演算子を構築し、算出し、コンピュータプログラムを構成する枠組みです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。