Development ★ 3,412

fabll

FabLL (faebryk.core.node), Python node/trait bildirimleri TypeGraph ve instance graph'a nasıl eşlediğini, field/trait invariantlarını ve instantiation desenlerini kapsamasını gösterir. Yeni component veya trait tanımlarken, Node API ile çalışırken veya type registration'ı anlarken kullanın.

cd ~/.claude/skills
git clone https://github.com/atopile/atopile.git atopile

FabLL (Fabric Low Level) Modülü

fabll (esas olarak src/faebryk/core/node.py) donanım bileşenleri tanımlamak ve bunlarla çalışmak için yüksek seviyeli Python API'sidir. Python sınıfları ile temel TypeGraph ve instance grafiği arasındaki boşluğu kapatır.

Hızlı Başlangıç

import faebryk.core.faebrykpy as fbrk
import faebryk.core.graph as graph
import faebryk.core.node as fabll

g = graph.GraphView.create()
tg = fbrk.TypeGraph.create(g=g)

class _App(fabll.Node):
    pass

app = _App.bind_typegraph(tg=tg).create_instance(g=g)

İlgili Dosyalar

  • src/faebryk/core/node.py (Node/Traits/alanlar, tür kaydı, bağlama/örnekleme yardımcıları)
  • src/faebryk/core/faebrykpy.py (FabLL tarafından arka planda kullanılan edge türleri)
  • src/faebryk/core/graph.py (örnekler tarafından kullanılan GraphView sarıcısı)

Bağımlılar (Çağrı Siteleri)

  • Kütüphane (src/faebryk/library/): Her bileşen (Resistor, Capacitor, vb.) Node sınıfından türetilir.
  • Derleyici: ato dosyalarından dinamik olarak Node alt sınıfları oluşturur.
  • Çözücüler: Parametreleri ve kısıtlamaları çıkarmak için Node örnekleri üzerinde çalışır.

Nasıl Çalışılır / Geliştirme / Test

Temel Konseptler

  • Nodlar graf örneklerinin sarıcılarıdır: bir fabll.Node bir graph.BoundNode ile oluşturulur.
  • Sınıf öznitelikleri aracılığıyla bildiri:
    • yapısal alt öğeler: SomeType.MakeChild(...)
    • trait ekleri: Traits.MakeEdge(SomeTrait.MakeChild().put_on_type()) (veya benzer)
  • Bağlama:
    • tür bağlama: MyType.bind_typegraph(tg)
    • instance oluşturma: .create_instance(g)
  • Tür tanımlayıcıları:
    • kütüphane türleri (faebryk.library.*) ato içeri aktarmaları için kasıtlı olarak kısa tanımlayıcılara (sınıf adı) sahiptir
    • kütüphane olmayan türler modülden türetilmiş bir sonek içerir; tür ID'leri benzersiz olmalıdır (Node._register_type içinde zorunlu kılınır)

Geliştirme İş Akışı

  1. Davranış eklemeyi sınıf hiyerarşilerini derinleştirmek yerine bir Trait olarak tercih edin.
  2. Yeni bir yapısal ilişki/alan türüne ihtiyacınız varsa, src/faebryk/core/node.py içinde bulunur (alan sistemi).
  3. Sınıf oluşturma sırasında zorunlu kılınan değişmezlere dikkat edin (metaclass + __init_subclass__).

Test

  • Çekirdek testler: ato dev test --llm test/core/test_node.py -q ve ato dev test --llm test/library/test_traits.py -q

En İyi Uygulamalar

  • Traits'i Tercih Edin: Node alt sınıflarına bir Trait olabilecek metotlar eklemeyin. Bu, onların farklı bileşen aileleri için uygulanmasına olanak tanır.
  • Derin kalıtımdan Kaçının: FabLL node türleri için tek seviyeli alt sınıflamayı zorunlu kılar (Node.__init_subclass__).
  • Türe güvenli geçiş: trait edge'lerini manuel olarak geçerken EdgeTrait.traverse(trait_type=...) tercih edin.

İç Yapı ve Çalışma Zamanı Davranışı

Örnekleme ve Yaşam Döngüsü

  • Argüman olmadan MyNode() çağırmayın: örnekler bağlı bir tür aracılığıyla bind_typegraph(...).create_instance(...) ile oluşturulur.
  • TypeGraph bağlamı gereklidir:
    import faebryk.core.graph as graph
    import faebryk.core.faebrykpy as fbrk
    
    g = graph.GraphView.create()
    tg = fbrk.TypeGraph.create(g=g)
    inst = MyNode.bind_typegraph(tg).create_instance(g=g)
    
  • Tek seviyeli alt sınıflama değişmezi: Node.__init_subclass__ node türleri için "birden fazla seviye derinliğinde" kalıtımı yasaklar.

Trait Uygulaması

  • Traitler Noddur: Traitler sadece Python mixin'leri değildir; tipik olarak bir ImplementsTrait edge içeren Node alt sınıflarıdır.
  • Trait Tanımı:
    class MyTrait(Node):
        is_trait = Traits.MakeEdge(ImplementsTrait.MakeChild().put_on_type())
    
  • Çözünürlük: Bir trait örneğini almak için node_instance.get_trait(TraitType) kullanın. Bu bir graf geçişi gerçekleştirir.

Performans ve Bellek

  • Tür Oluşturma: Bir tür oluşturmanın önemli yükü vardır (alanları yürütme, bağımlılıkları çözme). Oluşturulduktan sonra, örnekleri örneklemek daha hızlıdır ancak yine de Zig arka uçunda tahsisi içerir.
  • Ağaç Yapısı: Nodlar EdgeComposition aracılığıyla bağlanır. add_child bu edge'i oluşturur. Büyük ağaçlar (10k+ düğüm) Python döngü yükünden kaçınmak için dikkatli bir şekilde inşa edilmelidir; temel graf verimlidir, ancak Python etkileşimleri zaman maliyeti vardır.

Benzer skill'ler

Daha fazla: Development →