You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Introduces the frequency_within_block statistical test plugin and its corresponding test suite. Updates documentation to reference the new plugin and makes minor improvements to linear_complexity and maurers_universal plugins and their tests.
Copy file name to clipboardExpand all lines: docs/plugin-developer-guide.md
+79Lines changed: 79 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -98,6 +98,85 @@ Ek referans
98
98
99
99
Bu kılavuz, hızlı bir başlangıç sağlar. İleri seviye konu veya örnek isterseniz ayrı bir doküman eklenebilir.
100
100
101
+
## Yeni Test Eklentileri: frequency_within_block, maurers_universal, linear_complexity
102
+
103
+
Aşağıda proje içinde eklenmiş/ güncellenmiş üç test eklentisi için geliştirici notları bulunmaktadır. Her bölümde eklentinin amacı (NIST ile bağlantı), kabul edilen parametreler/varsayılanlar, döndürülen önemli metrikler ve kısa kullanım örneği yer alır.
- Amaç ve NIST bağlantısı: NIST SP 800‑22 içindeki "Frequency Test within a Block" yaklaşımına dayanır. Girdi bit dizisini M boyutlu bloklara ayırır ve her bloktaki 1 oranlarının beklenen 0.5 değerinden sapmasını chi-square benzeri bir istatistik ile değerlendirir.
108
+
- Parametreler ve varsayılanlar:
109
+
-`block_size` (int): açıkça verilirse kullanılır (M).
- Amaç ve NIST bağlantısı: Berlekamp–Massey algoritması ile bit dizisinin GF(2) üzerindeki lineer kompleksitesini hesaplar. NIST SP 800‑22'deki lineer kompleksite testine benzer istatistikler ve yaklaşık p-değerleri sunar; proje içinde diagnostic amaçlı kullanılabilir.
161
+
- Parametreler ve varsayılanlar:
162
+
-`alpha` (float, default 0.01)
163
+
- Girdi uzunluğu n==0 ise test hata/uyarı içeren bir TestResult döndürür.
164
+
- Hesaplama ve çıktı:
165
+
-`linear_complexity` (L), `n` (bit uzunluğu)
166
+
- Ayrıca NIST‑tarzı yaklaşık `mu`, `sigma`, `T`, `z`, `p_value_backend` (hangi yöntemin kullanıldığı)
167
+
- P-değeri için SciPy varsa `scipy.stats.norm` kullanılır, yoksa `math.erfc` fallback.
168
+
- Kullanım örneği:
169
+
```python
170
+
# python
171
+
from patternlab.plugins.linear_complexity import LinearComplexityTest
Bu eklemeler geliştirici rehberi içinde yeni eklentilerin hızlı anlaşılması ve doğru parametrelerle kullanılabilmesi için tasarlanmıştır. Aşağıdaki bölümde (örnek eklenti) orijinal içerik korunmuştur.
101
180
## Örnek: Tam Bir Test Eklentisi
102
181
103
182
Aşağıda proje içinde doğrudan kullanılabilecek minimal, test edilebilir bir TestPlugin örneği bulunmaktadır. Bu dosyayı [`patternlab/plugins/my_test.py`](patternlab/plugins/my_test.py:1) olarak ekleyebilirsiniz.
Copy file name to clipboardExpand all lines: docs/test-reference.md
+76Lines changed: 76 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -111,6 +111,82 @@ Linear Complexity (diagnostic)
111
111
- NIST SP 800‑22'de linear complexity testindeki gibi L için normalize istatistik ve p-değeri hesaplanabilir; kod mevcut haliyle genelde diagnostic sonuç döndürüyor (p_value=1.0 ile uyumluluk amacıyla).
112
112
- SciPy bağımlılığı: yok tipik olarak (algoritma doğrudan bit düzeyinde çalışır).
113
113
114
+
## Frequency Test within a Block (frequency_within_block.py)
- Amaç ve NIST bağlantısı: NIST SP 800‑22'deki "Frequency Test within a Block" yaklaşımına dayanır. Girdi bit dizisini M-boyutlu bloklara ayırıp her bloktaki 1 oranlarının 0.5'ten sapmasını chi-square benzeri bir istatistik ile değerlendirir. Block Frequency ile benzer amaç taşır ancak implementasyon ve parametre seçimi farklılıkları olabilir.
117
+
- Parametreler / varsayılanlar:
118
+
-`block_size` (int): açıkça verilirse kullanılır (M).
119
+
-`default_block_size` (int, default 128): `block_size` yoksa kullanılır.
120
+
-`alpha` (float, default 0.01)
121
+
- Seçme heuristiği: eğer toplam bit sayısı n % 100 == 0 ise otomatik olarak M = n // 100 seçilebilir.
122
+
- Çıktı metrikleri:
123
+
-`block_count`, `block_size`, `total_bits`
124
+
-`ones_counts` (blok başına 1 sayıları), `proportions` (blok başına 1 oranları)
125
+
-`chi_square`
126
+
- Kullanım örneği:
127
+
```python
128
+
# python
129
+
from patternlab.plugins.frequency_within_block import FrequencyWithinBlockTest
130
+
from patternlab.plugin_api import BytesView
131
+
132
+
plugin = FrequencyWithinBlockTest()
133
+
res = plugin.run(BytesView(b'\xff\x00\xaa'), {"block_size": 8, "alpha": 0.01})
- Amaç ve NIST bağlantısı: NIST SP 800‑22'de tanımlanan Maurer’s Universal Statistical Test ile uyumlu bir uygulamadır. Desen tekrar uzaklıklarının log2 ortalaması üzerinden dizinin sıkılık/karmaşıklık ölçülür.
140
+
- Parametreler / varsayılanlar:
141
+
-`L` (int, default 6): blok uzunluğu (NIST önerisi 6..16).
- Amaç ve NIST bağlantısı: Berlekamp–Massey ile bit dizisinin GF(2) üzerindeki lineer kompleksitesini hesaplar. NIST SP 800‑22'deki linear complexity testine benzer istatistiksel normalize etme ve p-değeri hesaplamaları uygulanır (yaklaşmalar).
167
+
- Parametreler / varsayılanlar:
168
+
-`alpha` (float, default 0.01)
169
+
- Girdi uzunluğu n == 0 ise TestResult içinde error bilgisi döner ve passed=False.
170
+
- Hesaplama özeti:
171
+
- Berlekamp–Massey algoritması ile L hesaplanır.
172
+
- Yaklaşık beklenen değer mu ve varyans sigma NIST-tarzı formüllerden türetilir:
0 commit comments