Skip to main content
IBM Quantum Platform

Qiskit 0.14 リリースノート


0.14.0

Terra 0.11.0

前奏曲

0.11.0 リリースにはいくつかの新機能とバグ修正が含まれている。 今回のリリースの最大の変更点は、パルススケジューラーの追加だ。 これにより、ユーザーは量子プログラムを QuantumCircuit 、それを回路を実装する量子ハードウェアを制御する基礎となるパルス命令にマッピングすることができる。

新機能

  • BackendProperties からユーザー固有のデータを簡単に取得できる 5 つの新しいコマンドを追加: gate_property gate_error, gate_length, qubit_property, t1, t2, readout_error and frequency. これらは、バックエンドのプロパティの特定の値を返します。 例:

    from qiskit.test.mock import FakeOurense
    backend = FakeOurense()
    properties = backend.properties()
    
    gate_property = properties.gate_property('u1')
    gate_error = properties.gate_error('u1', 0)
    gate_length = properties.gate_length('u1', 0)
    qubit_0_property = properties.qubit_property(0)
    t1_time_0 = properties.t1(0)
    t2_time_0 = properties.t2(0)
    readout_error_0 = properties.readout_error(0)
    frequency_0 = properties.frequency(0)
  • 命令オブジェクトがパラメータ化されているかどうかをチェックするメソッド Instruction.is_parameterized() が追加されました。 このメソッドは、インストラクションが ParameterExpression または Parameter オブジェクトをパラメタのひとつに持つ場合にのみ、 True を返す。

  • 新しい分析パスを追加 Layout2qDistance. このパスでは、 property_set['layout'] が設定されると、レイアウトの選択に「得点」をつけることができる。 スコアは、回路内の各2量子ビットゲートが直接接続されていない場合の距離の合計となる。 この採点では、カップリングマップの方向性は考慮されない。 数字が小さいほど、より良いレイアウトを選択できる。

    例えば、線形結合マップ [0]--[2]--[1] 、次のような回路を考える:

    qr = QuantumRegister(2, 'qr')
    circuit = QuantumCircuit(qr)
    circuit.cx(qr[0], qr[1])

    レイアウトが {qr[0]:0, qr[1]:1} の場合、 Layout2qDistanceproperty_set['layout_score'] = 1 を設定する。 レイアウトが {qr[0]:0, qr[1]:2} の場合、結果は property_set['layout_score'] = 0 となる。 スコアは低ければ低いほどいい。

  • QuantumCircuitcx メソッドのエイリアスとして qiskit.QuantumCircuit.cnot を追加。 cnot 」と「 cx 」はしばしば同じ意味で使われるが、cxメソッドはどちらの名前でも呼び出すことができる。

  • QuantumCircuitccx メソッドのエイリアスとして qiskit.QuantumCircuit.toffoli を追加。 toffoli 」と「 ccx 」はしばしば同じ意味で使われるが、ccxメソッドはどちらの名前でも呼び出せる。

  • QuantumCircuitcswap メソッドのエイリアスとして qiskit.QuantumCircuit.fredkin を追加。 fredkincswap という名前はしばしば同じ意味で使われるが、cswapメソッドはどちらの名前でも呼び出すことができる。

  • qiskit.visualization.circuit_drawer()latex 出力モードと qiskit.circuit.QuantumCircuit.draw() メソッドに、ゲートラベルとパラメーターから生のラテックスをパススルーするモードが追加された。 このための構文は、matplotlibの mathtextモードの構文に似ている。 ラベル文字列の' $'文字のペアの間の任意の部分は、生のラテックスとして扱われ、生成された出力ラテックスに直接渡される。 これは、latexドロワーで生成された回路図に、より高度な書式を追加するために活用できます。

    このリリース以前は、すべてのゲート・ラベルは utf8 -> latex変換にかけられ、出力されるlatexが期待通りに文字列をコンパイルすることを確認していた。 これは、' $' ペアの外にあるラベルのすべての部分で起こることである。 また、ラベルにドル記号を使用する場合は、ラベル文字列の中でドル記号をエスケープしてください(例: '\$' )。

    このパススルーと、 utf8 -> latex変換をミックス&マッチすることで、例えば、欲しいラベルを正確に作成することができる:

    from qiskit import circuit
    circ = circuit.QuantumCircuit(2)
    circ.h([0, 1])
    circ.append(circuit.Gate(name='α_gate', num_qubits=1, params=[0]), [0])
    circ.append(circuit.Gate(name='α_gate$_2$', num_qubits=1, params=[0]), [1])
    circ.append(circuit.Gate(name='\$α\$_gate', num_qubits=1, params=[0]), [1])
    circ.draw(output='latex')

    は、最初のカスタム・ゲートのラベルを α_gate とレンダリングし、2番目は添え字が2で α_gate となり、最後のカスタム・ゲートのラベルは $α$_gate となる。

  • 制御されたゲートを表現するための ControlledGate クラスを追加。 コントロールゲートのインスタンスは、 Gate オブジェクトの control(n) メソッドで作成される。 n はコントロールの数を表す。 新しいゲートでは、制御された量子ビットの前に制御量子ビットが来る。 例:

    from qiskit import QuantumCircuit
    from qiskit.extensions import HGate
    hgate = HGate()
    circ = QuantumCircuit(4)
    circ.append(hgate.control(3), [0, 1, 2, 3])
    print(circ)

    以下が生成されます。

    q_0: |0>──■──
    
    q_1: |0>──■──
    
    q_2: |0>──■──
            ┌─┴─┐
    q_3: |0>┤ H ├
            └───┘
  • meas_level パラメータおよびフィールドの許容値には、 IntEnum クラス qiskit.qobj.utils.MeasLevel のメンバを使用できるようになりました。 これは、 execute (または meas_level が指定されている他の場所)をパルス実験で呼び出すときに使用できる。 例:

    from qiskit import QuantumCircuit, transpile, schedule, execute
    from qiskit.test.mock import FakeOpenPulse2Q
    from qiskit.qobj.utils import MeasLevel, MeasReturnType
    
    backend = FakeOpenPulse2Q()
    qc = QuantumCircuit(2, 2)
    qc.h(0)
    qc.cx(0,1)
    qc_transpiled = transpile(qc, backend)
    sched = schedule(qc_transpiled, backend)
    execute(sched, backend, meas_level=MeasLevel.CLASSIFIED)

    この例では、 meas_level=MeasLevel.CLASSIFIEDmeas_level=2

  • 制約解決に基づく新しいレイアウト・セレクターを搭載。 CSPLayoutはレイアウトを見つける問題を制約問題としてモデル化し、それを解くために再帰的バックトラックを使用する。

    cmap16 = CouplingMap(FakeRueschlikon().configuration().coupling_map)
    
    qr = QuantumRegister(5, 'q')
    circuit = QuantumCircuit(qr)
    circuit.cx(qr[0], qr[1])
    circuit.cx(qr[0], qr[2])
    circuit.cx(qr[0], qr[3])
    
    pm = PassManager(CSPLayout(cmap16))
    circuit_after = pm.run(circuit)
    print(pm.property_set['layout'])
    Layout({
    1: Qubit(QuantumRegister(5, 'q'), 1),
    2: Qubit(QuantumRegister(5, 'q'), 0),
    3: Qubit(QuantumRegister(5, 'q'), 3),
    4: Qubit(QuantumRegister(5, 'q'), 4),
    15: Qubit(QuantumRegister(5, 'q'), 2)
    })

    パラメータ CSPLayout(...,strict_direction=True) はより制限的だが、 CXDirection の後に実行する必要がないことを保証する。

    pm = PassManager(CSPLayout(cmap16, strict_direction=True))
    circuit_after = pm.run(circuit)
    print(pm.property_set['layout'])
    Layout({
    8: Qubit(QuantumRegister(5, 'q'), 4),
    11: Qubit(QuantumRegister(5, 'q'), 3),
    5: Qubit(QuantumRegister(5, 'q'), 1),
    6: Qubit(QuantumRegister(5, 'q'), 0),
    7: Qubit(QuantumRegister(5, 'q'), 2)
    })

    制約系が解けない場合、レイアウト・プロパティは設定されない。

    circuit.cx(qr[0], qr[4])
    pm = PassManager(CSPLayout(cmap16))
    circuit_after = pm.run(circuit)
    print(pm.property_set['layout'])
    None
  • PulseBackendConfiguration (通常は backend.configuration ()としてアクセス)は、そのデータと PulseChannelSpec に存在する機能を探索するための便利なメソッドで拡張されている。 PulseChannelSpec は将来的に非推奨となる。 例:

    backend = provider.get_backend(backend_name)
    config = backend.configuration()
    q0_drive = config.drive(0)  # or, DriveChannel(0)
    q0_meas = config.measure(0)  # MeasureChannel(0)
    q0_acquire = config.acquire(0)  # AcquireChannel(0)
    config.hamiltonian  # Returns a dictionary with hamiltonian info
    config.sample_rate()  # New method which returns 1 / dt
  • PulseDefaults (通常のアクセスは backend.defaults() )には、 circuit_instruction_map という属性があり、 CmdDef のメソッドを持つ。 新しいcircuit_instruction_mapは、 CmdDef が持っていたものを超える3つの新しい関数を持つ InstructionScheduleMap オブジェクトである:

    • qubit_instructions(qubits)は、量子ビットに定義された操作を返す
    • opが定義されていない場合、assert_has(instruction, qubits)はエラーを発生する
    • remove(命令, qubits) popと同様だが、パラメータを必要としない

    とは若干の違いがある。 CmdDef:

    • __init__ 引数を取らない
    • cmds および cmd_qubits は非推奨となり、 instructions および qubits_with_instruction

    例:

    backend = provider.get_backend(backend_name)
    inst_map = backend.defaults().circuit_instruction_map
    qubit = inst_map.qubits_with_instruction('u3')[0]
    x_gate = inst_map.get('u3', qubit, P0=np.pi, P1=0, P2=np.pi)
    pulse_schedule = x_gate(DriveChannel(qubit))
  • qiskit.visualization.pulse_drawer() 関数と qiskit.pulse.Schedule.draw() メソッドに、新しい kwarg パラメータ show_framechange_channels が追加され、パルスの視覚化でフレームチェンジインストラクションのみを持つチャンネルの表示をオプションで無効にできるようになった。 この新しいkwargが False に設定されている場合、出力パルススケジュールの視覚化には、フレーム変化のみを含むチャンネルは含まれません。

    例:

    from qiskit.pulse import *
    from qiskit.pulse import library as pulse_lib
    
    gp0 = pulse_lib.gaussian(duration=20, amp=1.0, sigma=1.0)
    sched = Schedule()
    channel_a = DriveChannel(0)
    channel_b = DriveChannel(1)
    sched += Play(gp0, channel_a)
    sched = sched.insert(60, ShiftPhase(-1.57, channel_a))
    sched = sched.insert(30, ShiftPhase(-1.50, channel_b))
    sched = sched.insert(70, ShiftPhase(1.50, channel_b))
    
    sched.draw(show_framechange_channels=False)
  • 新しい効用関数( qiskit.result.marginal_counts() )が追加され、関心のあるいくつかの指標に対するカウントのマージナル化が可能になった。 これは、必要以上に多くの量子ビットが測定され、その一部分だけの観測カウントを得たい場合に有効である。

  • passmanager.run(...) 、複数の回路が呼び出された場合、これらの回路のトランスピレーションは並行して実行される。

  • PassManagers は、角括弧演算子を使用して、パスのサブセットを含む新しい PassManager を作成するためにスライスできるようになりました。 これにより、 PassManager の一部を実行または描画することができ、テストや視覚化が容易になる。 例えば、 PassManager pmの最初の3つのパスを描画したり、サーキットの2番目のパスだけを実行してみましょう:

    pm[0:4].draw()
    circuit2 = pm[1].run(circuit)

    また、 PassManagers を2つ追加するか、 PassManager にパス/パスリストを直接追加することで、 PassManagers を作成できるようになった。

    pm = pm1[0] + pm2[1:3]
    pm += [setLayout, unroller]
  • Qiskitに基本的な scheduler モジュールが追加されました。 スケジューラは、入力されたトランスパイル QuantumCircuit をパルス Schedule にスケジューリングする。 スケジューラは入力として、 Schedule とパルス Backend、または特定の量子ビットの回路 Instruction オブジェクトをパルスに関連付ける CmdDef 、およびどの測定が一緒に行われなければならないかを決定する meas_map のいずれかを受け付ける。

    スケジューリングの例:

    from qiskit import QuantumCircuit, transpile, schedule
    from qiskit.test.mock import FakeOpenPulse2Q
    
    backend = FakeOpenPulse2Q()
    qc = QuantumCircuit(2, 2)
    qc.h(0)
    qc.cx(0,1)
    qc_transpiled = transpile(qc, backend)
    schedule(qc_transpiled, backend)

    現在、スケジューラは、as_late_as_possible (alap) と as_soon_as_possible (asap) という2つのスケジューリング・ポリシーをサポートしており、それぞれ、回路内の量子ビットをまたいでパルス命令ができるだけ遅く発生するように、またはできるだけ早く発生するようにスケジューリングする。 スケジューリングポリシーは、例えば、入力引数 method で選択することができる:

    schedule(qc_transpiled, backend, method='alap')

    パルス Schedule を、 QuantumCircuit で使用されるゲートなどのカスタム回路命令にマッピングすることで、 QuantumCircuit 内で使用することは容易である。 これを行うには、まずカスタムゲートを定義し、ゲートが適用される各クビットについて、 CmdDef 。 このゲートは、 QuantumCircuit。 スケジューリング時に、ゲートは基礎となるパルス・スケジュールにマッピングされる。 このテクニックを使うと、Ignisなどの既存のqiskitモジュールと簡単に統合できます。

    例:

    from qiskit import pulse, circuit, schedule
    from qiskit.pulse import pulse_lib
    
    custom_cmd_def = pulse.CmdDef()
    
    # create custom gate
    custom_gate = circuit.Gate(name='custom_gate', num_qubits=1, params=[])
    
    # define schedule for custom gate
    custom_schedule = pulse.Schedule()
    custom_schedule += pulse_lib.gaussian(20, 1.0, 10)(pulse.DriveChannel)
    
    # add schedule to custom gate with same name
    custom_cmd_def.add('custom_gate', (0,), custom_schedule)
    
    # use custom gate in a circuit
    custom_qc = circuit.QuantumCircuit(1)
    custom_qc.append(custom_gate, qargs=[0])
    
    # schedule the custom gate
    schedule(custom_qc, cmd_def=custom_cmd_def, meas_map=[[0]])

既知の問題

  • 複数の回路で passmanager.run(...) を起動したときに並列にトランスパイルする機能は、Windows ではサポートされていません。 詳細は #2988を参照。

アップグレードの注意

  • qiskit.pulse.channels.SystemTopology クラスは PulseChannelSpec のヘルパークラスとして使用された。 PulseChannelSpec の非推奨化に伴い削除され、 BackendConfiguration の変更により不要となった。
  • 0.9 リリースで非推奨とされていた、量子ビットと古典ビットのタプル表現は削除されました。 QubitClbit オブジェクトの使用は、量子ビットと古典ビットを表現する新しい方法である。
  • 以前は非推奨とされていた、単一文字列としての基本セットの表現は削除された。 文字列のリストが新しい望ましい方法だ。
  • 0.9 リリースで非推奨とされたメソッド BaseModel.as_dict は削除され、メソッド BaseModel.to_dict が採用された。
  • PulseDefaults ( backend.defaults ()として通常アクセス)において、 qubit_freq_estmeas_freq_est が GHz ではなく Hz で返されるようになった。 これは、新しい戻り値が 1e9 ㊟その前の値であることを意味する。
  • ディルは必要条件として加えられた。 これは、 passmanager.run() を2つ以上の回路で並列動作させるために必要である。
  • 0.9 リリースで非推奨とされていたゲート UBase は削除された。 代わりにゲート U3Gate
  • 0.9 リリースで非推奨とされていたゲート CXBase は削除された。 代わりにゲート CnotGate
  • snapshot label パラメータを暗黙のうちに文字列に変換するために使用される命令。 この変換は削除され、文字列が提供されない場合はエラーが発生します。
  • 0.9 リリースで非推奨とされていたゲート U0Gate は削除された。 ディレイを挿入するには、代わりにゲート IdGate

非推奨のメモ

  • qiskit.pulse.CmdDef クラスは廃止されました。 代わりに、 qiskit.pulse.InstructionScheduleMap。 パルス対応システムの InstructionScheduleMap オブジェクトは backend.defaults().instruction_schedules でアクセスできる。

  • PulseChannelSpec は非推奨となっている。 代わりに BackendConfiguration 。 バックエンドの設定には、通常 backend.configuration() としてアクセスします。 コンフィグは、 PulseChannelSpec, の機能のほとんどを拡張したもので、以下のように若干の変更が加えられている。0は例示的な量子ビットインデックスである:

    pulse_spec.drives[0]   -> config.drive(0)
    pulse_spec.measures[0] -> config.measure(0)
    pulse_spec.acquires[0] -> config.acquire(0)
    pulse_spec.controls[0] -> config.control(0)

    デバイスに存在しない量子ビットのチャンネルを取得しようとすると、 BackendConfigurationError

    PulseChannelSpec のメソッド memoryslotsregisterslots は、バックエンド設定に移行されていない。 これらの古典的なリソースは、バックエンドシステムの物理的な構成によって制約されることはない。 直接インスタンス化してください:

    pulse_spec.memoryslots[0] -> MemorySlot(0)
    pulse_spec.registerslots[0] -> RegisterSlot(0)

    qubits メソッドはバックエンド設定に移行されない。 qubits の結果はこのように構築できる:

    [q for q in range(backend.configuration().n_qubits)]
  • Qubit pulse.channels 。 使うべきではない。 BackendConfiguration (または backend.configuration ()) を通して、チャンネル <=> の量子ビットマッピングを得ることが可能である。

  • 関数 qiskit.visualization.circuit_drawer.qx_color_scheme() は廃止されました。 この関数はもう内部的には使われておらず、現在の IBM QX スタイルを反映していない。 この関数を使用してローカルにスタイル辞書を生成していた場合は、その出力を保存し、その辞書を直接使用する必要があります。

  • Exception TranspilerAccessError は廃止されました。 同じ機能を提供するために、代わりに代替関数 TranspilerError 。 この代替関数は、まったく同じ機能を提供するが、より汎用性が高い。

  • Pulseのバッファは非推奨。 バッファが0でない場合は、代わりにDelayを使うように警告が出される。 その他のオプションとしては、パルス命令( 0.+0.j )にサンプルを追加したり、次のパルスの開始時間を schedule.duration + buffer に設定したりすることができる。

  • sympy.Basicsympy.Exprsympy.Matrix 型を命令パラメータとして渡すことは非推奨であり、将来のリリースで削除される予定である。 入力を、サポートされているタイプのいずれかに変換する必要がある:

    • int
    • float
    • complex
    • str
    • np.ndarray

バグ修正

  • トランスパイラの Collect2qBlocks と CommutationAnalysis パスは、Parameterized ゲートを含む回路を処理できず、Parameterized 回路を最適化レベル2以上でトランスパイルできなかった。 これらのパスは、パラメータ化されたゲートを不透明として扱うように修正された。
  • align_measures関数に、Measure刺激パルスがAcquireパルスと正しく整列されず、エラーになる問題があった。 現在では、修正されています。
  • numpy.random.seed の使用は削除され、qiskit 関数の呼び出しが今後 numpy.random
  • job.queue_position()None を返すとき、ジョブ・モニターで発生するレースコンディションを修正した。 Nonejob.queue_position() からの有効なリターンである。
  • memory=True 、kwargが渡されたときにバックエンドのサポートがチェックされるようになった。 QiskitError サポートされていない場合は、その結果が表示される。
  • カップリングマップなしでトランスパイルした場合、トランスパイルする回路の量子ビット数のチェックはなかった。 トランスパイル・プロセスは、バックエンドに回路を割り当てるのに十分な量子ビットがあるかどうかをチェックする。

その他の注意事項

  • qiskit.result.marginal_counts() 関数は、 qiskit-ignis qiskit.ignis.verification.tomography.marginal_counts() の同様のユーティリティ関数を置き換えるもので、 将来の qiskit-ignis リリースでは非推奨となる予定です。
  • すべてのsympyパラメータ出力型のサポートがqiskit-terraから削除されました(または、指摘されているように非推奨となりました)。 これには、 QuantumCircuit オブジェクト、qasm astノード、 Qobj オブジェクトのsympy型パラメータが含まれる。

エア 0.3

変更なし

イグニス 0.2

変更なし

アクア 0.6

変更なし

IBM Q プロバイダー 0.4

前奏曲

0.4.0 リリースは、新しい IBM Q API の全機能を使用する最初のリリースである。 特に、 IBM Q からより多くの情報を取得できるように IBMQJob クラスが刷新され、大規模または複雑なジョブをより高レベルでシームレスに使用できるジョブ・マネージャ・クラスが追加されました。 レガシーの IBM Q Experience または QConsole からのアップグレードがまだの場合は、 IBM Q Provider 0.3 (Qiskit 0.11 ) のリリースノートで移行方法の詳細をご確認ください。 レガシーアカウントは本リリースをもってサポート終了となります。

新機能

職務内容の変更

IBMQJob クラスが改訂され、新機能とともにリモート・ジョブの内容をより忠実に模倣するようになった:

  • ジョブ送信時に IBMQBackend.run(..., job_name='...') を指定することで、ジョブに名前を割り当てることができるようになりました。 この名前は IBMQJob.name() 、フィルタリングに使うことができる。
  • ジョブ送信時にオプションのパラメータ( job_share_level )により、ジョブを異なるレベル(グローバル、ハブ毎、グループ毎、プロジェクト毎)の他のユーザーと共有できるようになりました。
  • IBMQJob インスタンスの属性が増え、リモートの IBM Qジョブの内容が反映されるようになった。 このことは、 IBM Q APIによって導入された新しい属性は、自動的に即座に使用可能になることを意味する(例えば、 job.new_api_attribute )。新しい属性は、安定したとみなされた時点でメソッドに昇格します(例えば、 job.name() )。
  • .error_message() ジョブが失敗した理由についての詳細情報を返す。
  • .queue_position() には、更新を強制するための refresh パラメータを指定します。
  • .result() 失敗したジョブの部分的な結果を返すために、オプションの partial パラメータを受け取ります。 get_counts() のような Result メソッドは、失敗した実験に適用すると例外を発生させるので注意すること。

この変更には、クラスの低レベルの修正が含まれていることに注意してください。 インスタンスを手動で作成していた場合は、その点に注意してほしい:

  • 新機能に対応するため、コンストラクタのシグネチャが変更された。
  • .submit() メソッドを直接呼び出すことはできなくなり、ジョブは同期 IBMQBackend.run() またはジョブ・マネージャー経由で投入されることになります。
ジョブ・マネージャー

複数の回路やパルス・スケジュールで構成されるジョブを処理するための上位メカニズムとして、新しいジョブ・マネージャー(IBMQJobManager)が導入された。 ジョブ・マネージャーは透明なインターフェイスを提供し、インプットを効率的な作業単位にインテリジェントに分割し、さまざまなコンポーネントを最大限に活用することを目指している。 今後のバージョンアップで拡張され、ジョブ提出の推奨エントリーポイントになる予定だ。

その .run() メソッドは、回路またはパルススケジュールのリストを受け取り、 ManagedJobSet instance を返す。これは、これらのジョブのステータスと結果を追跡するために使用できる。 例:

from qiskit.providers.ibmq.managed import IBMQJobManager
from qiskit.circuit.random import random_circuit
from qiskit import IBMQ
from qiskit.compiler import transpile

provider = IBMQ.load_account()
backend = provider.backends.ibmq_ourense

circs = []
for _ in range(1000000):
    circs.append(random_circuit(2, 2))
transpile(circs, backend=backend)

# Farm out the jobs.
jm = IBMQJobManager()
job_set = jm.run(circs, backend=backend, name='foo')

job_set.statuses()    # Gives a list of job statuses
job_set.report()    # Prints detailed job information
results = job_set.results()
counts = results.get_counts(5)   # Returns data for experiment 5
provider.backends 変更

以前はバックエンドのリストを返す関数であった provider.backends メンバは、サービスに昇格した。 このことは、 .backends() メソッドとして、また、機能を拡張した .backends アトリビュートとしても使用できることを意味している:

  • には、そのプロバイダの既存のバックエンドが属性として含まれており、オートコンプリートに使用することができます。 例:

    my_backend = provider.get_backend('ibmq_qasm_simulator')

    上記は、以下と等価です。

    my_backend = provider.backends.ibmq_qasm_simulator
  • provider.backends.jobs() および provider.backends.retrieve_job() メソッドは、プロバイダー全体のジョブを検索するために使用できる。

その他の変更
  • backend.properties() 関数は、オプションの datetime パラメータを受け付けるようになった。 指定された場合、この関数は、指定された datetime フィルタに最も近いがそれより古いバックエンドのプロパティを返します。
  • いくつかの warnings は、 logger.warning メッセージにトーンダウンしている。
このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。