1. Ana sayfa
  2. İçerik planı
  3. Birleştirme, ekleme ve ters devre · Qiskit
Qiskit · devre modeli

Birleştirme, ekleme ve ters devre — zaman sırası, eşleme ve tersinirlik

Büyük kuantum programlar neredeyse her zaman küçük parçaların birleşiminden oluşur. Qiskit’te bu birleşim iki aileye ayrılır: bütün bir devreyi diğerinin üzerine compose ile oturtmak ve tek tek talimat veya kapı append ile kuyruğa eklemek. Üçüncü eksen ise inverse ile devreyi zamanın tersine okumaktır; bu işlem matematikte çekici görünse de ölçüm ve klasik akış eklendiğinde anında kırılgan hale gelir. Bu sayfa, taşıyıcı modeli QuantumCircuit yapısı sayfasında, hat kimliğini kayıt sistemleri sayfasında anlattık; burada yalnızca birleştirme cebiri ve uygulama disiplinine odaklanıyoruz. Geçiş yöneticisinin agresif yeniden sıralamasıyla çelişmek için bariyer ve akış kontrolü sayfasına da sık dönüş yapılır.

  • compose · zaman yönü · front
  • Eşleme: qubits · clbits
  • Ters: inverse() · ölçüm sınırı

Birleştirme Dili: Modülerlik ve Sözleşme

Kuantum yazılımı yazarken “tek dosyada devasa devre” yaklaşımı hızlı başlar, fakat okunabilirlik, test ve yeniden kullanım açısından çabuk tıkanır. Modüler tasarımın özü, her parçanın giriş–çıkış sözleşmesini netleştirmektir: kaç kübit dokunulur, hangi klasik hatlar okunur veya yazılır, ölçüm içerir mi, dinamik akış taşır mı? Bu sözleşme yazılmadan yapılan compose, çalışır gibi görünen ama anlamı kaymış programlar üretir; hata bazen ilk shot’ta değil, haftalar sonra farklı bir donanımda ortaya çıkar.

Birleştirme dili, yalnızca API çağrıları değil, ekip içi dilbilgisidir: “A modülü B’nin üzerine mi, altına mı oturacak?” sorusu kodda front bayrağına, şemada ise okların yönüne döner. Aynı soru, kütüphane yazarları için “varsayılan yön nedir?” belgesine bağlanır. Bu yüzden iç modüllerinizin dokümantasyonunda yön ve hat eşlemesi tek cümleyle de olsa yazılmalıdır; aksi halde tüketen kod, yanlış varsayımla sessizce yanlış devre kurar.

Sözleşmenin ikinci ayağı, yan etkisizlik veya en azından yan etkinin nerede olduğunun bilinmesidir. compose(..., inplace=True) çağrısı, paylaşılan kayıtlar veya dışarıdan gelen referanslar varsa beklenmedik mutasyon yaratır. Fonksiyonel stil seven ekipler için varsayılan, çoğu zaman kopya üzerinde çalışmak ve yalnızca performans ölçümünde yerinde birleştirmeye geçmektir.

Kütüphane sınırı ve sürüm taahhüdü

Açık kaynakta imza (imzalar) sürümle evrilir. Birleştirme fonksiyonlarının parametre isimleri, dönüş türleri ve varsayılan inplace değeri değişebilir. Üretim kodunda sürüm aralığı kilitlemek ve birleştirme yardımcılarınızı ince bir sarmalayıcıda toplamak, yükseltme gününde diff’i yönetilebilir kılar.

Sarmalayıcı aynı zamanda telemetri ve loglama için uygun yerdir: hangi modülün hangi modülle birleştiği, hangi hat eşlemesiyle yapıldığı kayda geçer. Bu kayıtlar, “bir zamanlar çalışıyordu” sınıfındaki hataları kökten azaltır.

Okuma yönü ve matematiksel çarpım alışkanlığı

Kuantum mekaniğinde bileşke operatörler çarpım sırasıyla yazılır; devre çiziminde ise zaman soldan sağa akar. Bu iki gösterim arasında zihinsel çeviri yaparken hata yapmak doğaldır. Qiskit’in compose sözleşmesini ezberlemek yetmez; her seferinde iki küçük devreyle elle deney yapıp beklenen çıktıyı çizimle doğrulamak uzun vadede daha ucuzdur.

Çarpım alışkanlığı ayrıca tensör sırası ile ilişkilidir: iki alt sistemi birleştirirken hangi kübitin hangi indekste durduğu, transpile sonrası yerel kapı sırasından bağımsız bir karar değildir. Bu yüzden birleştirme sözleşmesi bazen “matematiksel tensör sırası” cümlesini de içermelidir.

Test piramidi

Birim testi, alt devreyi yalnız başına doğrular; entegrasyon testi ise birleşmiş devreyi doğrular. İkisi aynı değildir: birim doğru olsa bile yanlış eşleme ile birleşince anlam kayar. Bu yüzden birleştirme noktalarında ince “altın devre” referansları tutmak, regresyon maliyetini düşürür.

Altın devre seçerken aşırı büyük boyutlardan kaçının; fakat ölçüm, klasik koşul veya parametre bağlama gibi riskli yüzeyleri mutlaka temsil eden minimal örnekler seçin. Böylece birleştirme sözleşmesi de test edilmiş olur.

compose ve Zaman Yönü: front Bayrağı

self.compose(other) çağrısının anlamı, “iki devreyi tek metinde birleştir” cümlesinden fazlasıdır: other devresinin zaman içinde self’ten önce mi sonra mı uygulanacağı front ile seçilir. Varsayılan davranışta other çoğu kullanıcı beklentisine uygun biçimde sonraya eklenir; yani çizimde sağa doğru akışta self’i izler. Bu küçük ayrıntı, kütüphane içinde doğru görünüp üst seviyede ters çevrilmiş gibi hissedilen hataların ana kaynağıdır.

front=True seçildiğinde other öne alınır; bu, hazırlık katmanını ana gövdeden önce çalıştırmak veya kontrol kübitlerini veri yolundan önce başlatmak gibi desenlerde kullanılır. Yanlış seçildiğinde ise oracle ile veri yolu arasındaki sıra tersine döner ve algoritma sessizce bozulur. Bu yüzden front bayrağını kod incelemesinde özellikle vurgulamak iyi bir kültürdür.

Birleştirme yönü seçildikten sonra bile, compose içinde verilen hat eşlemesi aynı yönü koruyacak şekilde tutarlı olmalıdır. Yön doğru, eşleme yanlışsa yine yanlış devre elde edilir; bu hata türü gözle fark edilmesi en zor olanlardandır çünkü çoğu kapı “yerel olarak doğru” görünür.

Çizimle kod arasında çift kontrol

İnsan gözü çizimde soldan sağa okur; diff aracı ise metin sırasını gösterir. compose sonrası her iki görünümü üst üste koymak, yön hatasını erken yakalar. Otomasyon için küçük bir görsel regresyon adımı ağır gelebilir; fakat kritik modüllerde denemeye değer.

Çizim çıktısı sürüme duyarlıdır; aynı devre farklı çizim seçenekleriyle farklı satır kırılımları verebilir. Bu yüzden tek doğruluk kaynağı çizim değil, .data dökümü olmalıdır.

İç içe birleştirmeler

Üç veya daha fazla modülü zincirlerken, ara sonuçların her adımda anlamlı kalıp kalmadığını düşünmek gerekir. Ara adımda geçici olarak ölçüm içeren bir devre oluşturuluyorsa, sonraki compose çağrıları ünite analizini zorlaştırır. Bu risk, planlama aşamasında “ölçüm nerede sabitlenecek?” sorusuyla yönetilir.

İç içe birleştirmede front bayrağının her katmanda ayrı düşünülmesi gerekir; tek bir üst seviye karar alt katmanların tümünü otomatik düzeltmez.

Kübit ve Klasik Hat Eşlemesi

compose çağrısında qubits ve clbits argümanları, other devresindeki hatların self üzerinde hangi fiziksel çizgilere oturacağını belirler. Liste uzunlukları uyuşmazsa çoğu zaman anında hata alırsınız; uyuşup anlam yanlışsa ise sessiz hata alırsınız. İkinci durum, özellikle simetrik görünen ancak etiketleri farklı olan hatlarda sık görülür.

Nesne kimliği ile indeks eşlemesi arasındaki fark kayıt sistemleri sayfasında açılmıştı: mümkünse Qubit ve Clbit örnekleriyle eşleyin; zorunlu değilseniz düz indeks kullanın ve o kararı dosya başlığında belgelleyin.

Klasik hatların eşlenmesi, ölçüm yazımının hangi sonuç bloğuna düşeceğini belirler. Yanlış klasik eşleme, histogramı “düzeltilmiş” gibi gösterirken aslında farklı bir deney ölçüyor olabilir. Bu yüzden birleştirme sonrası ilk test, mümkünse tek shot ve bilinen durumla yapılmalıdır.

Genişlik ve ölçüm uyumu

other devresi, self’te bulunmayan ek klasik hatlar gerektiriyorsa, birleştirme öncesi kayıtların açılmış olması gerekir. Aksi halde oluşturucu reddeder veya beklenmedik genişletme yapar; davranış sürüme bağlıdır. Bu kontrol, modül sınırında yapılmalıdır, çağıranın ortasında değil.

Ölçüm satırlarının hedefleri birleştirme sonrası yeniden sıralandığında, sonuç anahtarlarının yorumu da değişebilir (ölçüm mantığı).

Paylaşılan kayıt nesnesi riski

Aynı QuantumRegister örneğini iki devrede paylaşmak, birleştirme sırasında beklenmedik bağlar doğurabilir. Modüler tasarımda taze kayıt veya açık kopyalama tercih edilir; paylaşım yalnızca kasıtlı ve belgelenmişse kabul edilir.

Birleştirme sonrası çizimde hatların “aynı çizgide” görünmesi, paylaşımın doğru olduğu anlamına gelmez; yalnızca görsel birleşmedir. Doğruluk için nesne kimliği veya tutarlı indeks şeması gerekir.

append ve Talimat Kuyruğu

append, tek bir Instruction veya uyumlu nesneyi kuyruğun sonuna ekler. Bütün alt devreyi gömmek için genellikle önce alt devreyi talimata çevirip ardından append etmek gerekir; bu, compose ile bütün devreyi oturtmaktan farklı ergonomiye sahiptir. Hangi yolun seçileceği, alt devrenin kayıtlarını dış dünyaya nasıl açmak istediğinize bağlıdır.

Kuyruk düşüncesi, hata ayıklamayı kolaylaştırır: her ekleme sonrası len(qc.data) ve son birkaç satırı incelemek, beklenen sırayı yakalamanın ucuz yoludur. Büyük devrelerde ise yalnızca son kısmı değil, aralıklı örnekleme yapmak gerekir; aksi halde log şişer.

extend benzeri toplu ekleme yolları sürüme göre bulunabilir; fikir aynıdır: mevcut metnin sonuna yeni talimatlar eklemek. Önemli olan, ekleme yönünün compose(..., front=True) ile karıştırılmamasıdır; biri kuyruk sonuna yazar, diğeri bütün devre ilişkisini kurar.

Kapı nesnesi ve devre talimatı

append ile eklenen nesnenin türü, transpile ve çizim davranışını etkiler. Örneğin özel bir alt sınıf, optimizasyon geçişleri tarafından tanınmayabilir. Bu yüzden kütüphane içi yardımcılar, mümkün olduğunca kanonik kapı veya devre temsiline indirgenmelidir (kapılar ve ünite mantığı).

Alt devreyi talimata çevirirken iç kayıt adlarının dış dünyadan izole edildiğini unutmayın; dışarıdan verilen hat listesi olmadan append edilen iç devre anlamsız kalır.

Performans ve bellek

Çok sayıda küçük append, çok sayıda ara nesne üretir. Yoğun döngülerde toplu oluşturma veya önceden ayrılmış yapılar tercih edilebilir. Bu mikro optimizasyon, çoğu eğitim kodunda gereksizdir; fakat büyük derin öğrenme döngülerinde fark edilir hale gelir.

Ölçüm ve dinamik talimatlar eklendikçe, kuyruk uzunluğu ile log maliyeti birlikte büyür; üretimde log seviyesini ayarlamak gerekir.

Kopya, inplace ve Paylaşılan Kayıtlar

Yerinde birleştirme, bellek tahsisini azaltır ve çoğu zaman daha hızlıdır; fakat çağıranın elindeki referansı beklenmedik şekilde mutasyona uğratır. Fonksiyonel stil seven ekipler için bu, “saf fonksiyon” beklentisiyle çatışır. Bu yüzden genel kütüphane API’lerinde varsayılanın ne olacağı, ekibin risk iştahına bağlıdır; tutarlılık, bireysel tercihten daha önemlidir.

copy() ile ayrı bir örnek oluşturup üzerinde birleştirme yapmak, paralel deney üretiminde ve çok iş parçacıklı ortamlarda güvenliği artırır. Kopyanın maliyeti büyük devrelerde hissedilir; bu durumda kopyayı yalnızca mutasyon riskinin olduğu sınırlara yerleştirin.

Paylaşılan kayıt nesneleri, kopyanın bile tam izolasyon sağlamayabileceği bir köşe durumu oluşturur: iki devre aynı QuantumRegister örneğine bağlıysa, birinde yapılan değişiklik diğerinin anlamını değiştirir. Bu yüzden modül sınırlarında paylaşımı ya yasaklayın ya da açıkça “kısıtlı ortak bellek” olarak belgeleyin.

İdempotent yardımcılar

Aynı birleştirmeyi iki kez çağırmak idempotent olmalı mı? Çoğu algoritma için hayır: iki kez aynı bloğu eklemiş olursunuz. Yardımcı fonksiyonlarınızın sözleşmesinde bu açıkça yazılmalıdır; aksi halde çağıran yanlışlıkla çift ekler.

İdempotency gerekiyorsa, ya birleştirme öncesi “imza” kontrolü yapın ya da sonucu önbelleğe alın; her ikisi de ek karmaşıklık getirir.

Derin kopya ihtiyacı

Sığ kopya yeterli değilse, parametre nesneleri veya iç içe yapılar için derin kopya stratejisi gerekir. Bu, performansı düşürür; yalnızca gerektiğinde kullanın.

Parametre paylaşımı detayı parametrik devreler sayfasında işlenir; burada yalnızca birleştirme sırasında kopyanın yüzeyini hatırlatıyoruz.

inverse Çerçevesi

inverse(), devre metnini zamanın tersine okuyarak yeni bir devre üretir: son talimatın tersi önce uygulanacak şekilde sıra kurulur. Ünite kapılar için bu, matematikte alışık olunan U† düzenine karşılık gelir; ölçüm veya klasik yazım içeren satırlar için ise ya anlamsızdır ya da yalnızca kısmi bir ters tanımlanabilir. Bu yüzden ters alma çağrısından önce devrenin “saf ünite + ölçüm” ayrımını yapmak, hayal kırıklığını azaltır.

Ters devre, çoğu zaman yeni bir nesne döndürür; yerinde ters alma seçeneği sürüme göre değişebilir. Çağrı sonrası orijinal devrenin korunup korunmadığını belgelerden doğrulayın; aksi halde paylaşılan referanslarla yarış durumu oluşur.

Global faz, ters çevirmede yeniden seçilebilir; interferometrik devrelerde bu fazın takibi önemlidir, yalnızca olasılık histogramı üreten prototiplerde sık göz ardı edilir. Aynı uyarı, kontrollü kapıların tersinde kontrol hatlarının korunması için de geçerlidir: ters çevirme, yapısal simetriyi bozmamalıdır.

Alt devre ve üst devre tersi

Önce birleştirip sonra ters almak ile önce tersleyip birleştirmek genelde farklı sonuç verir; çünkü birleştirme hat eşlemesini değiştirir. Bu cebirsel mesele, API kullanımında “hangi sırada ters?” sorusuna döner ve testle sabitlenmelidir.

Kütüphane fonksiyonunuz hem build() hem build_inverse() sunuyorsa, ikisinin aynı hat sözleşmesini paylaştığını otomasyonla doğrulayın.

Simetrik olmayan desenler

Çoğu algoritma hazırlık, oracle ve difüzyon gibi simetrik olmayan bloklardan oluşur. Ters çevirme, yalnızca “temizlik” bloğunu üretmek için kullanılırsa, oracle’ın kendisi terslenmeyebilir; bu kasıtlı bir tasarımdır ve okuyucuya yazılmalıdır.

Temizlik bloğunun tersinin gerçekten kimlik yakınında olduğunu küçük boyutta doğrulamak, büyük devrede güven verir.

Ölçüm, Bariyer ve Tersinir Olmayan Parçalar

Ölçüm talimatı ünite değildir; dolayısıyla klasik anlamda bir ünite matrisinin “Hermitik eşleniği” yoktur. Qiskit yine de bir ters devre üretmeye çalışabilir; bu noktada davranış sürüme ve iç temsil detayına bağlıdır ve her zaman anlamlı bir fiziksel yorum taşımayabilir. Üretim kodunda ölçüm içeren devreleri terslemek, genelde mimari hata olarak kabul edilir; ölçümü ayıran kopya üzerinde çalışmak daha güvenlidir.

Barrier çoğu analizde kimlikle ilişkilendirilir; fakat geçiş yöneticisi açısından yeniden sıralama sınırıdır (bariyer ve akış kontrolü). Ters çevirme, bariyeri çoğu zaman olduğu gibi bırakır veya eşdeğer konuma taşır; bu taşınma, optimizasyon sonrası şemada beklenmedik görünüme yol açabilir.

Dinamik akış ve klasik koşullu kapılar, tersinirlik tartışmasını tamamen başka bir düzleme taşır: program semantiği. Bu yüzden “ters devre” isteyen modülünüzün ön koşullar listesinde ölçüm ve dinamik talimatları açıkça yasaklamak en temiz sözleşmedir.

Kısmi ters ve ölçüm öncesi prefiks

Ölçümden önceki ünite prefiksinin tersini almak yaygın bir desendir; ölçüm satırını aynı dosyada bırakıp yalnızca prefiksi düşünmek ise kafa karıştırıcıdır. İki ayrı dosya veya iki ayrı fonksiyon çıktısı, zihinsel yükü düşürür.

Kısmi ters üreten yardımcılar, çağırandan “hangi kübit kümesinin ünite altında kaldığını” açıkça ister; bu küme yanlış seçilirse ters matematiksel olarak doğru görünse de protokol olarak yanlıştır.

reset ve ters çevirme

reset ünite değildir; ters çevirme pratiğinde ölçüm ile benzer dikkat gerektirir. Hazırlık ve temizlik bloklarında reset kullanımı sık olsa da, terslenebilir “saf ünite çekirdeği” tanımına reseti dahil edip etmeyeceğinizi ekiple netleştirin.

Bazı eğitim örnekleri reseti “terslenmez” diye işaretler; üretimde ise transpile sonrası ek resetler görülebilir. Bu fark, donanım ve geçiş politikasından kaynaklanır.

Parametre ve Sembolik Ters

Parameter taşıyan kapıların tersi, sembolik cebir katmanında üretilir; sayısal değer atanmadan önce bazı sadeleştirmeler yapılabilir. Bağlama sonrası ters ile önce ters sonra bağlama genelde farklı olabilir; bu yüzden varyasyonel döngülerde sıra disiplini kritiktir. Tam ayrıntı parametrik devreler sayfasında toplanır; burada yalnızca birleştirme ve ters işlemlerinin aynı parametre nesnesini paylaştığı durumlarda ortaya çıkan riski vurguluyoruz.

İki modül aynı Parameter örneğini paylaşıyorsa, birinde yapılan bağlama diğerini de etkiler. Bu, optimizasyon için faydalı olabilir; fakat birleştirme sırasında “hangi modül hangi aşamada bağladı?” sorusu karmaşıklaşır. Paylaşımı ya bilinçli tutun ya da kopyalama ile izole edin.

Gradyan takibi için tersin sembolik olarak doğru üretilmesi gerekir; sayısal gürültüde küçük farklar birikir. Bu yüzden birim testlerde hem sembolik hem birkaç sayısal noktada kontrol yapılması önerilir.

Bağımsız parametre kopyaları

Aynı açıyı iki modülde bağımsız taramak istiyorsanız, parametre nesnelerini çoğaltın ve birleştirme eşlemesinde hangi bloğun hangi parametreyi tükettiğini belgelleyin. Aksi halde optimizasyon beklenmedik şekilde iki bloğu birleştirip tek parametreye indirger.

Parametre adları çakıştığında, geçiş aşamasında yeniden adlandırma yapılabilir; bu da ters çevirme ve birleştirme sırasını etkileyebilir.

Hata Ayıklama ve Test Desenleri

Birleştirme hataları iki gruba ayrılır: yüksek sesle patlayanlar (boyut, kayıt, eşleme uyuşmazlığı) ve sessiz yanlışlar (doğru çalışan ama yanlış protokol). İkinci grup, ünite testleriyle bile yakalanmayabilir; bu yüzden küçük referans devreler ve bilinen histogramlar, entegrasyon testinin ayrılmaz parçası olmalıdır.

Hata ayıklama pratiğinde ilk adım, birleştirme öncesi her iki modülün çizimini ve .data özetini yan yana koymaktır. İkinci adım, birleştirme sonrası aynı çıktıları üretmektir. Üçüncü adım ise transpile sonrası farkı incelemektir; çünkü geçiş, bariyer ve eşdeğerlik kurallarıyla birleştirme öncesi doğruluk bozulabilir.

Loglarda compose çağrısının argümanlarını yapısal olarak yazmak, üretim ortamında “hangi sürüm hangi eşlemeyle” sorusunu yanıtlamayı kolaylaştırır. Kişisel veri taşımadan, yalnızca hat indeksleri ve modül adları yeterlidir.

Altın devre ve tolerans

Küçük boyutta tam simülasyonla elde edilen olasılık vektörü veya sayımlar, altın referans olarak saklanabilir. Sayısal tolerans seçimi, gürültülü donanımda zorlaşır; bu yüzden altın referans çoğu zaman simülatörde, donanımda ise aralık tabanlı kontrollerle eşlenir.

Toleransı çok sıkı seçmek flaky testlere, çok gevşek seçmek ise anlamlı sapmaları kaçırmaya yol açar; ekip içi politika belgesi şarttır.

Regresyon ve özellik bayrakları

Yeni bir birleştirme seçeneği (örneğin farklı front varsayılanı) eklendiğinde, eski testlerin hâlâ geçmesi yetmez; yeni davranış için ek test gerekir. Özellik bayraklarıyla koşullu testler, sürüm matrisini yönetilebilir kılar.

Test verisini üretim verisinden ayırmak, hem güvenlik hem deterministiklik için iyidir; rastgele tohumları testte sabitleyin.

Kod Laboratuvarı

Aşağıdaki örnekler yalnızca kaynak devre üzerinde çalışır; çalıştırıcı veya geçiş eklemeden birleştirme ve tersin yerel cebirini gözlemlemek için yeterlidir. Çıktıları kendi ortamınızda üretin ve çizimle doğrulayın.

compose_inverse_sketch.py Python
from qiskit import QuantumCircuit

a = QuantumCircuit(2)
a.h(0)
a.cx(0, 1)

b = QuantumCircuit(2)
b.rz(0.3, 1)

# Varsayılan: b, a'dan sonra (çizimde sağa) eklenir.
out = a.compose(b, inplace=False)

inv = out.inverse()

print("Birleşik:", out)
print("Ters:", inv)

names = [inst.operation.name for inst in out.data]
print("Birleşik talimat adları:", names)
qiskit compose · inverse · inplace=False UTF-8 · LF
compose_qubit_map.py Python
from qiskit import QuantumCircuit

left = QuantumCircuit(3)
left.h(0)

right = QuantumCircuit(3)
right.cx(0, 1)

# right'ı left'e gömerken kübit permütasyonu: right'ın 0→1, 1→2, 2→0 gibi hayali bir eşleme örneği.
# Gerçek projede qubits listesi, kayıt nesnelerinizle tutarlı olmalıdır.
mapped = left.compose(
    right,
    qubits=[1, 2, 0],
    inplace=False,
)

print(mapped)
qiskit qubits= permütasyonu · örnek iskelet UTF-8 · LF

İleri Okuma ve Özet

Birleştirme ve ters alma, modüler kuantum yazılımının omurgasıdır; hat eşlemesi ve zaman yönü ise omurgadaki eklemlerdir. Geçiş ve ayrıştırma ekonomisi için devre ayrıştırma ve devre optimizasyon mantığı sayfalarına geçilir; dinamik akış için dinamik devreler ve klasik kontrol başlıkları tamamlayıcıdır.

Özet compose iki devreyi zaman ve hat eşlemesiyle birleştirir; front yönünü belirler. append kuyruğa talimat ekler. inverse ünite çekirdeğinde anlamlıdır; ölçüm ve dinamik akış tersi kırılganlaştırır. Yerinde mutasyon ve paylaşılan kayıtlar, sessiz hataların başlıca kaynağıdır; kopya ve açık sözleşme ile yönetilir.