samlpy 0.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. samlpy-0.2.0/LIBRARY.md +180 -0
  2. samlpy-0.2.0/PKG-INFO +207 -0
  3. samlpy-0.2.0/pyproject.toml +55 -0
  4. samlpy-0.2.0/setup.cfg +4 -0
  5. samlpy-0.2.0/src/cadi_saml/__init__.py +57 -0
  6. samlpy-0.2.0/src/cadi_saml/backend/__init__.py +3 -0
  7. samlpy-0.2.0/src/cadi_saml/backend/occt_backend.py +1786 -0
  8. samlpy-0.2.0/src/cadi_saml/core/__init__.py +5 -0
  9. samlpy-0.2.0/src/cadi_saml/core/assembly.py +1648 -0
  10. samlpy-0.2.0/src/cadi_saml/core/ports.py +162 -0
  11. samlpy-0.2.0/src/cadi_saml/core/sketch.py +213 -0
  12. samlpy-0.2.0/src/cadi_saml/core/text_engine.py +203 -0
  13. samlpy-0.2.0/src/cadi_saml/ir/__init__.py +24 -0
  14. samlpy-0.2.0/src/cadi_saml/ir/nodes.py +224 -0
  15. samlpy-0.2.0/src/cadi_saml/ir/parser.py +113 -0
  16. samlpy-0.2.0/src/cadi_saml/reverse/__init__.py +3 -0
  17. samlpy-0.2.0/src/cadi_saml/reverse/step_importer.py +165 -0
  18. samlpy-0.2.0/src/cadi_saml/std_parts/__init__.py +26 -0
  19. samlpy-0.2.0/src/cadi_saml/std_parts/bearings.py +96 -0
  20. samlpy-0.2.0/src/cadi_saml/std_parts/fasteners.py +88 -0
  21. samlpy-0.2.0/src/cadi_saml/std_parts/gears.py +258 -0
  22. samlpy-0.2.0/src/cadi_saml/std_parts/motors.py +170 -0
  23. samlpy-0.2.0/src/cadi_saml/std_parts/motorsport.py +254 -0
  24. samlpy-0.2.0/src/cadi_saml/std_parts/nuts.py +169 -0
  25. samlpy-0.2.0/src/cadi_saml/std_parts/profiles.py +138 -0
  26. samlpy-0.2.0/src/cadi_saml/std_parts/springs.py +249 -0
  27. samlpy-0.2.0/src/cadi_saml/std_parts/washers.py +93 -0
  28. samlpy-0.2.0/src/cadi_saml/validation/__init__.py +3 -0
  29. samlpy-0.2.0/src/cadi_saml/validation/validation_engineer.py +413 -0
  30. samlpy-0.2.0/src/samlpy/__init__.py +77 -0
  31. samlpy-0.2.0/src/samlpy.egg-info/PKG-INFO +207 -0
  32. samlpy-0.2.0/src/samlpy.egg-info/SOURCES.txt +46 -0
  33. samlpy-0.2.0/src/samlpy.egg-info/dependency_links.txt +1 -0
  34. samlpy-0.2.0/src/samlpy.egg-info/requires.txt +7 -0
  35. samlpy-0.2.0/src/samlpy.egg-info/top_level.txt +2 -0
  36. samlpy-0.2.0/tests/test_advanced_features.py +141 -0
  37. samlpy-0.2.0/tests/test_advanced_occt_capabilities.py +77 -0
  38. samlpy-0.2.0/tests/test_advanced_occt_modules.py +143 -0
  39. samlpy-0.2.0/tests/test_aesthetic_shapes.py +199 -0
  40. samlpy-0.2.0/tests/test_ai_engine.py +144 -0
  41. samlpy-0.2.0/tests/test_architectural_improvements.py +218 -0
  42. samlpy-0.2.0/tests/test_e2e_assembly.py +81 -0
  43. samlpy-0.2.0/tests/test_extended_capabilities.py +170 -0
  44. samlpy-0.2.0/tests/test_formula_student_wheel.py +436 -0
  45. samlpy-0.2.0/tests/test_library_upgrades.py +174 -0
  46. samlpy-0.2.0/tests/test_reverse_engineering.py +46 -0
  47. samlpy-0.2.0/tests/test_robustness_and_safety.py +149 -0
  48. samlpy-0.2.0/tests/test_token_reduction.py +193 -0
@@ -0,0 +1,180 @@
1
+ # LLM-Dostu CAD Kütüphanesi ve Montaj Mimarisi Özellikleri (LLM CAD Library Specs)
2
+
3
+ Bu doküman, CADi (`Project-CAD-`) projemiz bünyesinde geliştirilecek LLM-dostu özel CAD kütüphanesi, montaj motoru, veri toplama boru hattı ve AI gateway altyapısının temel mimari gereksinimlerini ve tasarım ilkelerini içerir.
4
+
5
+ ---
6
+
7
+ ## 1. Neden Özel Bir LLM CAD Kütüphanesi / DSL?
8
+
9
+ Genel 3D CAD kütüphaneleri (CadQuery, OpenCASCADE, PythonOCC) insan geliştiriciler için tasarlanmıştır ve LLM'ler (Claude, GPT, DeepSeek) tarafından kodlandığında şu sorunlara yol açar:
10
+ * **Yüksek Token Maliyeti**: Basit bir parça veya montaj için yüzlerce satır detay kod üretilmesi.
11
+ * **Sentaks Hataları & Bağlam Kaybı**: Metod zincirleme (fluent API) yapılarının karmaşıklığı nedeniyle LLM'lerin sentaks hatası yapması.
12
+ * **Topolojik Kararsızlık**: Yüzey, delik ve kenarların adreslenmesinde illüzyon (hallucination) oluşması.
13
+
14
+ ### 💡 Çözüm: LLM-Dostu Bildirimsel (Declarative) Kütüphane / DSL
15
+ LLM-dostu kütüphanemiz, Python tabanlı yalın bir sözdizimine (SAML - Spatial Assembly Modeling Language) sahip olacak ve doğrudan **OpenCASCADE (OCCT / OCP)** motoru üzerine kurulacaktır:
16
+
17
+ ```
18
+ [SAML DSL (LLM Arayüzü)]
19
+
20
+ [SAML Compiler & IR (Kural ve İlişki Çözücü)]
21
+
22
+ [CADi OCCT Backend (Saf OpenCASCADE Çekirdeği)]
23
+ ├── BRep & Topoloji Katmanı (TopoDS_Shape, Faces, Edges)
24
+ ├── Doğrudan Montaj & Eklemler (Joints/Mates Motoru)
25
+ └── Tersine Mühendislik & Import Motoru (STEP/IGES)
26
+ ```
27
+
28
+ **Neden Doğrudan OpenCASCADE (OCCT)?**
29
+ * **Doğrudan B-Rep ve Topoloji Kontrolü**: CadQuery veya üçüncü parti wrapper'ların getirdiği adlandırma (naming) ve kararsızlık hataları kökten çözülür.
30
+ * **Tersine Mühendislik (STEP → SAML)**: STEP dosyalarının en saf haliyle okunup yüzey/delik analizi yapılması doğrudan OpenCASCADE API'leri ile kayıpsız çalışır.
31
+ * **Dış Katman Bağımsızlığı**: Gereksiz bağımlılıklar elenir, doğrudan endüstriyel C++ çekirdeği Python üzerinden kontrol edilir.
32
+
33
+ > **Strateji**: `reference_build123d` kaynak kodları incelenmiş olup; montaj eklemleri, B-Rep selektörleri ve STEP import gibi kritik alt yapılar kopyalanıp kendi OpenCASCADE altyapımıza uyarlanacaktır.
34
+
35
+ ---
36
+
37
+ ## 2. Kütüphanede Olması Gereken Temel Özellikler
38
+
39
+ ### A. Üst Düzey Montaj ve İlişkilendirme (High-Level Assembly & Mates)
40
+ * Parçaları uzayda $X, Y, Z$ koordinatlarıyla elle yerleştirmek yerine CAD standartlarındaki **Montaj İlişkileri (Mates & Constraints)** kullanılır.
41
+ * **Örnek**:
42
+ ```python
43
+ Assembly.connect(partA.face("bottom"), partB.face("top"), mate_type="FLUSH", offset=0)
44
+ Assembly.align_holes(partA.hole("h1"), partB.hole("h1"))
45
+ ```
46
+ * **Kazanım**: LLM'in uzamsal matris hesaplama yükünü sıfırlar, token tüketimini %90 düşürür.
47
+
48
+ ### B. Dahili Standart Parça Kütüphanesi (Built-in Standard Component Library)
49
+ * Cıvata, somun, rulman, alüminyum profil, motor gibi standart endüstriyel bileşenler LLM tarafından sıfırdan çizilmez, tek satırda çağrılır:
50
+ ```python
51
+ bolt1 = Fastener.ISO4762(size="M6", length=20)
52
+ bearing1 = Bearing.SKF("608ZZ")
53
+ motor1 = Component.NEMA17(length=40)
54
+ ```
55
+ * **Kazanım**: 1000 token harcanacak standart bileşenler 5-10 token'a düşer.
56
+
57
+ ### C. Çapa / Bağlantı Noktaları (Anchor Ports & Interfaces)
58
+ * Parçalar kendi üzerinde montaj portları barındırır:
59
+ ```python
60
+ Assembly.attach(motor.port("shaft"), wheel.port("hub"))
61
+ ```
62
+ * **Kazanım**: Parçaların iç içe geçme ve çakışma (clash) hataları engellenir.
63
+
64
+ ### D. Değişken Bağlamalı Parametrik Mimari (Cascading Parametric Variables)
65
+ * Tüm montaj tek bir ana değişkene (`Master Parameter`) bağlanır:
66
+ ```python
67
+ with Assembly("Gearbox") as app:
68
+ app.set_param("box_width", 120)
69
+ # Tüm iç parçalar box_width parametresine göre otomatik ölçeklenir
70
+ ```
71
+ * **Kazanım**: Kullanıcı revizyon istediğinde LLM tüm kodu baştan yazmak yerine sadece 1 parametreyi değiştirir (%98 token tasarrufu).
72
+
73
+ ### E. Dosyadan Koda Dönüşüm / Tersine Mühendislik (Import & Reverse Engineering)
74
+ * Mevcut endüstriyel CAD dosyaları (STEP, IGES, STL, DXF) doğrudan sisteme aktarılıp SAML koduna dönüştürülür:
75
+ ```python
76
+ # Dosyadan SAML kodu üret
77
+ model = Assembly.from_step("gearbox.step")
78
+ dsl_code = model.to_saml() # → LLM-dostu SAML kodu
79
+ params = model.extract_params() # → Parametrik değişkenler
80
+
81
+ # Görsel teknik çizimden (OCR + AI)
82
+ model = Assembly.from_drawing("blueprint.pdf", ocr=True)
83
+ ```
84
+ * **Kazanım**:
85
+ * Mevcut endüstriyel miras (legacy) dosyalar sisteme dahil edilebilir
86
+ * `(STEP dosyası → SAML kodu)` çifti → Fine-tuning veri seti
87
+ * Kullanıcı "bu parçayı al ve şu değişikliği yap" diyebilir (edit workflow)
88
+ * DeepCAD transpiling adımını (Bölüm 3.2) otomatikleştirir
89
+
90
+ ### F. Geometri Doğrulama Katmanı (Validation Engine)
91
+ * Üretilen veya içe aktarılan tüm geometri çalıştırılmadan önce doğrulanır:
92
+ ```python
93
+ validator = ValidationEngineer()
94
+ validator.check_manifold(part) # Su geçirmez kapalı yüzey mi?
95
+ validator.check_tolerances(part) # Üretim toleransları mantıklı mı?
96
+ validator.check_assembly_clash(asm) # Parçalar çakışıyor mu?
97
+ validator.check_units_consistency(asm) # mm/inch karışıklığı var mı?
98
+ ```
99
+ * **Kazanım**: Hatalı geometri LLM'e yapılandırılmış doğal dil geri bildirimi olarak döner (stack trace yerine NL açıklama → LLM'in hatayı anlayıp düzeltmesi kolaylaşır).
100
+
101
+ ### G. Versiyon Kontrolü ve Kısmi Revizyon (Versioning & Diff-Edit)
102
+ * Her SAML kodu commit'i parametreler + hash ile izlenir; LLM tüm kodu baştan yazmak yerine sadece değişen bloğu günceller:
103
+ ```python
104
+ # Parçayı tamamen yeniden yazmak yerine güncelle
105
+ Assembly.update_part("gearbox", "cover", wall_thickness=3.5)
106
+ Assembly.diff(v1, v2) # → Değişen parametreler ve geometri farkı
107
+ ```
108
+ * **Kazanım**: %95+ token tasarrufu, revizyon geçmişi izlenebilir, DPO/RLHF için negatif örnek kaydı.
109
+
110
+ ### H. Zorunlu Metadata Şeması (Required Metadata)
111
+ * Her SAML dosyası üretim için gereken meta bilgileri içerir:
112
+ ```python
113
+ Assembly(
114
+ name="GearboxV2",
115
+ units="mm", # Zorunlu: mm | inch | m
116
+ tolerance_standard="ISO 2768-m", # Zorunlu: üretim toleransı
117
+ material="AlSi10Mg", # Opsiyonel: malzeme
118
+ export=["STEP", "STL", "DXF"], # Çıktı formatları
119
+ )
120
+ ```
121
+ * **Kazanım**: mm/inch karışıklığı ve tolerans hatası CAD'de ölümcüldür; DSL'de first-class citizen yapılması zorunludur.
122
+
123
+ ### I. build123d'den Alınacak ve OpenCASCADE ile Özelleştirilecek Modüller
124
+
125
+ Proje dizinine indirilen (`library/reference_build123d`) kaynak kodlarından kütüphanemize doğrudan adapte edilecek kritik bileşenler:
126
+
127
+ 1. **Montaj ve Eklem Sistemi (`joints.py`):**
128
+ * *Neden gerekli?* `RigidJoint`, `RevoluteJoint`, `LinearJoint` gibi nesnelerin OpenCASCADE matris dönüşümlerine (`gp_Trsf`) nasıl bağlandığı hazır.
129
+ * *Bizim uyarlamamız:* SAML'in `Assembly.connect(mate_type=...)` yapısına doğrudan entegre edilecek.
130
+
131
+ 2. **Topoloji ve Yüzey Seçiciler (`topology/` & `geometry.py`):**
132
+ * *Neden gerekli?* `Face.filter_by()`, `Edge.filter_by()`, en üst yüzeyi bulma (`>Z`), silindirik delikleri ayıklama mantığı.
133
+ * *Bizim uyarlamamız:* Hallucination'ı önlemek için yüzeylere deterministik ID/çapa atayan modül olarak sadeleştirilecek.
134
+
135
+ 3. **İçe Aktarma ve B-Rep Dönüşümü (`importers.py` & `brep_from_stl.py`):**
136
+ * *Neden gerekli?* STEP ve STL dosyalarını OpenCASCADE nesnelerine (`TopoDS_Shape`, `TopoDS_Compound`) dönüştürme fonksiyonları.
137
+ * *Bizim uyarlamamız:* `Assembly.from_step()` ve Tersine Mühendislik (Dosyadan SAML Koda) boru hattının çekirdeği yapılacak.
138
+
139
+ 4. **Dışa Aktarma Motoru (`exporters.py` & `exporters3d.py`):**
140
+ * *Neden gerekli?* Renk, malzeme, montaj hiyerarşisini kaybetmeden STEP/GLTF/STL formatlarına kaydetme algoritmaları.
141
+
142
+ ---
143
+
144
+ ## 3. Veri Toplama ve Fine-Tuning Hazırlık Stratejisi
145
+
146
+ Modeli kendi kütüphanemiz üzerinde eğitmek (Fine-Tune) için gereken `[İstek Metni ──> Bizim DSL Kodu ──> STEP/STL]` verisi 3 kanaldan toplanır:
147
+
148
+ ### 1. Sentetik Veri Üretimi (Synthetic Data Pipeline)
149
+ 1. **Parametrik Şablon Betikleri**: Python ile 50-100 temel parça ve montaj kategorisi (flanşlar, L-braketler, redüktörler, kasalar) yazılır. Parametreler rastgele değiştirilerek 50.000+ hatasız DSL kodu türetilir.
150
+ 2. **Tersine Prompting (Reverse Prompting)**: Bu kodlar büyük bir LLM'e (Claude 3.5 / GPT-4o) verilerek Türkçe ve İngilizce kullanıcı istekleri (*"100x50mm flanş tasarla"*) ürettirilir.
151
+
152
+ ### 2. Açık Kaynak Veri Dönüştürme (Transpiling)
153
+ * **DeepCAD (178.000 Onshape Modeli)** veritabanındaki JSON komut dizileri otomatik script ile kendi DSL formatımıza dönüştürülür.
154
+ * GitHub'daki CadQuery ve build123d repoları taranır.
155
+
156
+ ### 3. Canlı Sistem Logları (Production Telemetry)
157
+ * **Başarılı Çıktılar (`gold_standard.jsonl`)**: OpenCASCADE doğrulamasından (`ValidationEngineer`) geçen hatasız kodlar otomatik veri setine kaydedilir.
158
+ * **Hatalı Çıktılar**: Hatalı üretilip düzeltilen kodlar modelin olumsuz örnekleri öğrenmesi için **DPO/RLHF** veri setine eklenir.
159
+
160
+ ---
161
+
162
+ ## 4. Altyapı & AI Gateway (OmniRoute Entegrasyonu)
163
+
164
+ * **Kesintisiz Çalışma (Auto-Fallback)**: Kotalar veya hız limitleri dolduğunda otomatik alternatif AI sağlayıcısına yönlendirme.
165
+ * **Token Sıkıştırması (RTK + Caveman)**: Bağlam ve prompt boyutu %15-%95 azaltılarak API maliyetleri düşürülür.
166
+ * **Çoklu Model Desteği**: Basit görevler için ücretsiz/ucuz modeller (Gemini Flash, lokal Ollama), karmaşık montajlar için üst düzey modeller (Claude 3.5 Sonnet) çağrılır.
167
+
168
+ ---
169
+
170
+ ## 5. Yol Haritası (Milestones)
171
+
172
+ 1. [x] **Adım 1**: SAML / LLM-DSL sözdizimi ve SAML Compiler IR'ının (`ir/nodes.py`, `ir/parser.py`) netleştirilmesi.
173
+ 2. [x] **Adım 2**: Backend Adapter katmanı (`backend/occt_backend.py` — saf OpenCASCADE/OCP çekirdeği ile bağımsız motor).
174
+ 3. [x] **Adım 3**: Standart parça kütüphanesi (`Fastener.ISO4762`, `Bearing.SKF`, `Nut.DIN934`, `Washer.DIN125`, `Profile.VSlot`, `Motor.NEMA`).
175
+ 4. [x] **Adım 4**: Geometri Doğrulama Motoru (`ValidationEngineer`) — Manifoldluk ve Çakışma (Clash) denetimi.
176
+ 5. [x] **Adım 5**: Tersine Mühendislik pipeline'ı — `STEPReverseEngineer` ile STEP dosyasından otomatik SAML kod üretimi.
177
+ 6. [ ] **Adım 6**: Sentetik veri üreteci (`scripts/synthetic_generator.py`) — 20k+ `(istek, SAML, STEP)` üçlüsü.
178
+ 7. [ ] **Adım 7**: Qwen2.5-Coder veya DeepSeek modelinin LoRA/QLoRA ile eğitilmesi.
179
+ 8. [ ] **Adım 8 (Uzun Vade)**: CADi Native Kernel — kendi geometri çekirdeği ile `build123d` bağımlılığının kaldırılması.
180
+
samlpy-0.2.0/PKG-INFO ADDED
@@ -0,0 +1,207 @@
1
+ Metadata-Version: 2.4
2
+ Name: samlpy
3
+ Version: 0.2.0
4
+ Summary: SamlPy: Semantic Assembly Modeling Language for Python - Deterministic, Zero-Coordinate, LLM-Native CAD Engine built on OpenCASCADE
5
+ Author: CADi Team
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/Omerersen/Project-CAD-
8
+ Project-URL: Repository, https://github.com/Omerersen/Project-CAD-
9
+ Keywords: cad,opencascade,brep,llm,ai,parametric,assembly,3d-modeling,saml,samlpy
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Intended Audience :: Manufacturing
12
+ Classifier: Intended Audience :: Science/Research
13
+ Classifier: Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)
14
+ Classifier: Topic :: Scientific/Engineering :: Mathematics
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Requires-Python: >=3.10
20
+ Description-Content-Type: text/markdown
21
+ Requires-Dist: pyyaml>=6.0
22
+ Requires-Dist: numpy>=1.24.0
23
+ Provides-Extra: dev
24
+ Requires-Dist: pytest>=7.0; extra == "dev"
25
+ Requires-Dist: build>=1.0.0; extra == "dev"
26
+ Requires-Dist: twine>=5.0.0; extra == "dev"
27
+
28
+ # LLM-Dostu CAD Kütüphanesi ve Montaj Mimarisi Özellikleri (LLM CAD Library Specs)
29
+
30
+ Bu doküman, CADi (`Project-CAD-`) projemiz bünyesinde geliştirilecek LLM-dostu özel CAD kütüphanesi, montaj motoru, veri toplama boru hattı ve AI gateway altyapısının temel mimari gereksinimlerini ve tasarım ilkelerini içerir.
31
+
32
+ ---
33
+
34
+ ## 1. Neden Özel Bir LLM CAD Kütüphanesi / DSL?
35
+
36
+ Genel 3D CAD kütüphaneleri (CadQuery, OpenCASCADE, PythonOCC) insan geliştiriciler için tasarlanmıştır ve LLM'ler (Claude, GPT, DeepSeek) tarafından kodlandığında şu sorunlara yol açar:
37
+ * **Yüksek Token Maliyeti**: Basit bir parça veya montaj için yüzlerce satır detay kod üretilmesi.
38
+ * **Sentaks Hataları & Bağlam Kaybı**: Metod zincirleme (fluent API) yapılarının karmaşıklığı nedeniyle LLM'lerin sentaks hatası yapması.
39
+ * **Topolojik Kararsızlık**: Yüzey, delik ve kenarların adreslenmesinde illüzyon (hallucination) oluşması.
40
+
41
+ ### 💡 Çözüm: LLM-Dostu Bildirimsel (Declarative) Kütüphane / DSL
42
+ LLM-dostu kütüphanemiz, Python tabanlı yalın bir sözdizimine (SAML - Spatial Assembly Modeling Language) sahip olacak ve doğrudan **OpenCASCADE (OCCT / OCP)** motoru üzerine kurulacaktır:
43
+
44
+ ```
45
+ [SAML DSL (LLM Arayüzü)]
46
+
47
+ [SAML Compiler & IR (Kural ve İlişki Çözücü)]
48
+
49
+ [CADi OCCT Backend (Saf OpenCASCADE Çekirdeği)]
50
+ ├── BRep & Topoloji Katmanı (TopoDS_Shape, Faces, Edges)
51
+ ├── Doğrudan Montaj & Eklemler (Joints/Mates Motoru)
52
+ └── Tersine Mühendislik & Import Motoru (STEP/IGES)
53
+ ```
54
+
55
+ **Neden Doğrudan OpenCASCADE (OCCT)?**
56
+ * **Doğrudan B-Rep ve Topoloji Kontrolü**: CadQuery veya üçüncü parti wrapper'ların getirdiği adlandırma (naming) ve kararsızlık hataları kökten çözülür.
57
+ * **Tersine Mühendislik (STEP → SAML)**: STEP dosyalarının en saf haliyle okunup yüzey/delik analizi yapılması doğrudan OpenCASCADE API'leri ile kayıpsız çalışır.
58
+ * **Dış Katman Bağımsızlığı**: Gereksiz bağımlılıklar elenir, doğrudan endüstriyel C++ çekirdeği Python üzerinden kontrol edilir.
59
+
60
+ > **Strateji**: `reference_build123d` kaynak kodları incelenmiş olup; montaj eklemleri, B-Rep selektörleri ve STEP import gibi kritik alt yapılar kopyalanıp kendi OpenCASCADE altyapımıza uyarlanacaktır.
61
+
62
+ ---
63
+
64
+ ## 2. Kütüphanede Olması Gereken Temel Özellikler
65
+
66
+ ### A. Üst Düzey Montaj ve İlişkilendirme (High-Level Assembly & Mates)
67
+ * Parçaları uzayda $X, Y, Z$ koordinatlarıyla elle yerleştirmek yerine CAD standartlarındaki **Montaj İlişkileri (Mates & Constraints)** kullanılır.
68
+ * **Örnek**:
69
+ ```python
70
+ Assembly.connect(partA.face("bottom"), partB.face("top"), mate_type="FLUSH", offset=0)
71
+ Assembly.align_holes(partA.hole("h1"), partB.hole("h1"))
72
+ ```
73
+ * **Kazanım**: LLM'in uzamsal matris hesaplama yükünü sıfırlar, token tüketimini %90 düşürür.
74
+
75
+ ### B. Dahili Standart Parça Kütüphanesi (Built-in Standard Component Library)
76
+ * Cıvata, somun, rulman, alüminyum profil, motor gibi standart endüstriyel bileşenler LLM tarafından sıfırdan çizilmez, tek satırda çağrılır:
77
+ ```python
78
+ bolt1 = Fastener.ISO4762(size="M6", length=20)
79
+ bearing1 = Bearing.SKF("608ZZ")
80
+ motor1 = Component.NEMA17(length=40)
81
+ ```
82
+ * **Kazanım**: 1000 token harcanacak standart bileşenler 5-10 token'a düşer.
83
+
84
+ ### C. Çapa / Bağlantı Noktaları (Anchor Ports & Interfaces)
85
+ * Parçalar kendi üzerinde montaj portları barındırır:
86
+ ```python
87
+ Assembly.attach(motor.port("shaft"), wheel.port("hub"))
88
+ ```
89
+ * **Kazanım**: Parçaların iç içe geçme ve çakışma (clash) hataları engellenir.
90
+
91
+ ### D. Değişken Bağlamalı Parametrik Mimari (Cascading Parametric Variables)
92
+ * Tüm montaj tek bir ana değişkene (`Master Parameter`) bağlanır:
93
+ ```python
94
+ with Assembly("Gearbox") as app:
95
+ app.set_param("box_width", 120)
96
+ # Tüm iç parçalar box_width parametresine göre otomatik ölçeklenir
97
+ ```
98
+ * **Kazanım**: Kullanıcı revizyon istediğinde LLM tüm kodu baştan yazmak yerine sadece 1 parametreyi değiştirir (%98 token tasarrufu).
99
+
100
+ ### E. Dosyadan Koda Dönüşüm / Tersine Mühendislik (Import & Reverse Engineering)
101
+ * Mevcut endüstriyel CAD dosyaları (STEP, IGES, STL, DXF) doğrudan sisteme aktarılıp SAML koduna dönüştürülür:
102
+ ```python
103
+ # Dosyadan SAML kodu üret
104
+ model = Assembly.from_step("gearbox.step")
105
+ dsl_code = model.to_saml() # → LLM-dostu SAML kodu
106
+ params = model.extract_params() # → Parametrik değişkenler
107
+
108
+ # Görsel teknik çizimden (OCR + AI)
109
+ model = Assembly.from_drawing("blueprint.pdf", ocr=True)
110
+ ```
111
+ * **Kazanım**:
112
+ * Mevcut endüstriyel miras (legacy) dosyalar sisteme dahil edilebilir
113
+ * `(STEP dosyası → SAML kodu)` çifti → Fine-tuning veri seti
114
+ * Kullanıcı "bu parçayı al ve şu değişikliği yap" diyebilir (edit workflow)
115
+ * DeepCAD transpiling adımını (Bölüm 3.2) otomatikleştirir
116
+
117
+ ### F. Geometri Doğrulama Katmanı (Validation Engine)
118
+ * Üretilen veya içe aktarılan tüm geometri çalıştırılmadan önce doğrulanır:
119
+ ```python
120
+ validator = ValidationEngineer()
121
+ validator.check_manifold(part) # Su geçirmez kapalı yüzey mi?
122
+ validator.check_tolerances(part) # Üretim toleransları mantıklı mı?
123
+ validator.check_assembly_clash(asm) # Parçalar çakışıyor mu?
124
+ validator.check_units_consistency(asm) # mm/inch karışıklığı var mı?
125
+ ```
126
+ * **Kazanım**: Hatalı geometri LLM'e yapılandırılmış doğal dil geri bildirimi olarak döner (stack trace yerine NL açıklama → LLM'in hatayı anlayıp düzeltmesi kolaylaşır).
127
+
128
+ ### G. Versiyon Kontrolü ve Kısmi Revizyon (Versioning & Diff-Edit)
129
+ * Her SAML kodu commit'i parametreler + hash ile izlenir; LLM tüm kodu baştan yazmak yerine sadece değişen bloğu günceller:
130
+ ```python
131
+ # Parçayı tamamen yeniden yazmak yerine güncelle
132
+ Assembly.update_part("gearbox", "cover", wall_thickness=3.5)
133
+ Assembly.diff(v1, v2) # → Değişen parametreler ve geometri farkı
134
+ ```
135
+ * **Kazanım**: %95+ token tasarrufu, revizyon geçmişi izlenebilir, DPO/RLHF için negatif örnek kaydı.
136
+
137
+ ### H. Zorunlu Metadata Şeması (Required Metadata)
138
+ * Her SAML dosyası üretim için gereken meta bilgileri içerir:
139
+ ```python
140
+ Assembly(
141
+ name="GearboxV2",
142
+ units="mm", # Zorunlu: mm | inch | m
143
+ tolerance_standard="ISO 2768-m", # Zorunlu: üretim toleransı
144
+ material="AlSi10Mg", # Opsiyonel: malzeme
145
+ export=["STEP", "STL", "DXF"], # Çıktı formatları
146
+ )
147
+ ```
148
+ * **Kazanım**: mm/inch karışıklığı ve tolerans hatası CAD'de ölümcüldür; DSL'de first-class citizen yapılması zorunludur.
149
+
150
+ ### I. build123d'den Alınacak ve OpenCASCADE ile Özelleştirilecek Modüller
151
+
152
+ Proje dizinine indirilen (`library/reference_build123d`) kaynak kodlarından kütüphanemize doğrudan adapte edilecek kritik bileşenler:
153
+
154
+ 1. **Montaj ve Eklem Sistemi (`joints.py`):**
155
+ * *Neden gerekli?* `RigidJoint`, `RevoluteJoint`, `LinearJoint` gibi nesnelerin OpenCASCADE matris dönüşümlerine (`gp_Trsf`) nasıl bağlandığı hazır.
156
+ * *Bizim uyarlamamız:* SAML'in `Assembly.connect(mate_type=...)` yapısına doğrudan entegre edilecek.
157
+
158
+ 2. **Topoloji ve Yüzey Seçiciler (`topology/` & `geometry.py`):**
159
+ * *Neden gerekli?* `Face.filter_by()`, `Edge.filter_by()`, en üst yüzeyi bulma (`>Z`), silindirik delikleri ayıklama mantığı.
160
+ * *Bizim uyarlamamız:* Hallucination'ı önlemek için yüzeylere deterministik ID/çapa atayan modül olarak sadeleştirilecek.
161
+
162
+ 3. **İçe Aktarma ve B-Rep Dönüşümü (`importers.py` & `brep_from_stl.py`):**
163
+ * *Neden gerekli?* STEP ve STL dosyalarını OpenCASCADE nesnelerine (`TopoDS_Shape`, `TopoDS_Compound`) dönüştürme fonksiyonları.
164
+ * *Bizim uyarlamamız:* `Assembly.from_step()` ve Tersine Mühendislik (Dosyadan SAML Koda) boru hattının çekirdeği yapılacak.
165
+
166
+ 4. **Dışa Aktarma Motoru (`exporters.py` & `exporters3d.py`):**
167
+ * *Neden gerekli?* Renk, malzeme, montaj hiyerarşisini kaybetmeden STEP/GLTF/STL formatlarına kaydetme algoritmaları.
168
+
169
+ ---
170
+
171
+ ## 3. Veri Toplama ve Fine-Tuning Hazırlık Stratejisi
172
+
173
+ Modeli kendi kütüphanemiz üzerinde eğitmek (Fine-Tune) için gereken `[İstek Metni ──> Bizim DSL Kodu ──> STEP/STL]` verisi 3 kanaldan toplanır:
174
+
175
+ ### 1. Sentetik Veri Üretimi (Synthetic Data Pipeline)
176
+ 1. **Parametrik Şablon Betikleri**: Python ile 50-100 temel parça ve montaj kategorisi (flanşlar, L-braketler, redüktörler, kasalar) yazılır. Parametreler rastgele değiştirilerek 50.000+ hatasız DSL kodu türetilir.
177
+ 2. **Tersine Prompting (Reverse Prompting)**: Bu kodlar büyük bir LLM'e (Claude 3.5 / GPT-4o) verilerek Türkçe ve İngilizce kullanıcı istekleri (*"100x50mm flanş tasarla"*) ürettirilir.
178
+
179
+ ### 2. Açık Kaynak Veri Dönüştürme (Transpiling)
180
+ * **DeepCAD (178.000 Onshape Modeli)** veritabanındaki JSON komut dizileri otomatik script ile kendi DSL formatımıza dönüştürülür.
181
+ * GitHub'daki CadQuery ve build123d repoları taranır.
182
+
183
+ ### 3. Canlı Sistem Logları (Production Telemetry)
184
+ * **Başarılı Çıktılar (`gold_standard.jsonl`)**: OpenCASCADE doğrulamasından (`ValidationEngineer`) geçen hatasız kodlar otomatik veri setine kaydedilir.
185
+ * **Hatalı Çıktılar**: Hatalı üretilip düzeltilen kodlar modelin olumsuz örnekleri öğrenmesi için **DPO/RLHF** veri setine eklenir.
186
+
187
+ ---
188
+
189
+ ## 4. Altyapı & AI Gateway (OmniRoute Entegrasyonu)
190
+
191
+ * **Kesintisiz Çalışma (Auto-Fallback)**: Kotalar veya hız limitleri dolduğunda otomatik alternatif AI sağlayıcısına yönlendirme.
192
+ * **Token Sıkıştırması (RTK + Caveman)**: Bağlam ve prompt boyutu %15-%95 azaltılarak API maliyetleri düşürülür.
193
+ * **Çoklu Model Desteği**: Basit görevler için ücretsiz/ucuz modeller (Gemini Flash, lokal Ollama), karmaşık montajlar için üst düzey modeller (Claude 3.5 Sonnet) çağrılır.
194
+
195
+ ---
196
+
197
+ ## 5. Yol Haritası (Milestones)
198
+
199
+ 1. [x] **Adım 1**: SAML / LLM-DSL sözdizimi ve SAML Compiler IR'ının (`ir/nodes.py`, `ir/parser.py`) netleştirilmesi.
200
+ 2. [x] **Adım 2**: Backend Adapter katmanı (`backend/occt_backend.py` — saf OpenCASCADE/OCP çekirdeği ile bağımsız motor).
201
+ 3. [x] **Adım 3**: Standart parça kütüphanesi (`Fastener.ISO4762`, `Bearing.SKF`, `Nut.DIN934`, `Washer.DIN125`, `Profile.VSlot`, `Motor.NEMA`).
202
+ 4. [x] **Adım 4**: Geometri Doğrulama Motoru (`ValidationEngineer`) — Manifoldluk ve Çakışma (Clash) denetimi.
203
+ 5. [x] **Adım 5**: Tersine Mühendislik pipeline'ı — `STEPReverseEngineer` ile STEP dosyasından otomatik SAML kod üretimi.
204
+ 6. [ ] **Adım 6**: Sentetik veri üreteci (`scripts/synthetic_generator.py`) — 20k+ `(istek, SAML, STEP)` üçlüsü.
205
+ 7. [ ] **Adım 7**: Qwen2.5-Coder veya DeepSeek modelinin LoRA/QLoRA ile eğitilmesi.
206
+ 8. [ ] **Adım 8 (Uzun Vade)**: CADi Native Kernel — kendi geometri çekirdeği ile `build123d` bağımlılığının kaldırılması.
207
+
@@ -0,0 +1,55 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "samlpy"
7
+ version = "0.2.0"
8
+ description = "SamlPy: Semantic Assembly Modeling Language for Python - Deterministic, Zero-Coordinate, LLM-Native CAD Engine built on OpenCASCADE"
9
+ authors = [
10
+ { name = "CADi Team" }
11
+ ]
12
+ readme = "LIBRARY.md"
13
+ license = { text = "MIT" }
14
+ requires-python = ">=3.10"
15
+ keywords = [
16
+ "cad",
17
+ "opencascade",
18
+ "brep",
19
+ "llm",
20
+ "ai",
21
+ "parametric",
22
+ "assembly",
23
+ "3d-modeling",
24
+ "saml",
25
+ "samlpy",
26
+ ]
27
+ classifiers = [
28
+ "Development Status :: 4 - Beta",
29
+ "Intended Audience :: Manufacturing",
30
+ "Intended Audience :: Science/Research",
31
+ "Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)",
32
+ "Topic :: Scientific/Engineering :: Mathematics",
33
+ "Programming Language :: Python :: 3",
34
+ "Programming Language :: Python :: 3.10",
35
+ "Programming Language :: Python :: 3.11",
36
+ "Programming Language :: Python :: 3.12",
37
+ ]
38
+ dependencies = [
39
+ "pyyaml>=6.0",
40
+ "numpy>=1.24.0",
41
+ ]
42
+
43
+ [project.optional-dependencies]
44
+ dev = [
45
+ "pytest>=7.0",
46
+ "build>=1.0.0",
47
+ "twine>=5.0.0",
48
+ ]
49
+
50
+ [project.urls]
51
+ Homepage = "https://github.com/Omerersen/Project-CAD-"
52
+ Repository = "https://github.com/Omerersen/Project-CAD-"
53
+
54
+ [tool.setuptools.packages.find]
55
+ where = ["src"]
samlpy-0.2.0/setup.cfg ADDED
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,57 @@
1
+ """
2
+ cadi-saml: Deterministic, LLM-friendly CAD Modeling and Assembly Engine.
3
+ Built natively on OpenCASCADE (OCCT).
4
+ """
5
+
6
+ from .core.assembly import Assembly, PartReference, SafeEvaluator, CircularDependencyError
7
+ from .core.ports import PortStatus, StalePortError, OverConstrainedError, ConstraintStatus
8
+ from .core.sketch import Sketch
9
+ from .std_parts.fasteners import Fastener
10
+ from .std_parts.bearings import Bearing
11
+ from .std_parts.nuts import Nut
12
+ from .std_parts.washers import Washer
13
+ from .std_parts.profiles import Profile
14
+ from .std_parts.motors import Motor
15
+ from .std_parts.motorsport import Motorsport
16
+ from .ir.nodes import AssemblyIR, CrossSection, ExportFormat, MateType, PatternType, UnitSystem
17
+
18
+
19
+
20
+
21
+ from .ir.parser import SAMLParser
22
+ from .backend.occt_backend import OCCTBackend
23
+ from .reverse.step_importer import STEPReverseEngineer
24
+ from .validation.validation_engineer import ValidationEngineer, ClashReport
25
+
26
+ __version__ = "0.2.0"
27
+ __all__ = [
28
+ "Assembly",
29
+ "PartReference",
30
+ "SafeEvaluator",
31
+ "CircularDependencyError",
32
+ "PortStatus",
33
+ "StalePortError",
34
+ "OverConstrainedError",
35
+ "ConstraintStatus",
36
+
37
+ "Sketch",
38
+ "CrossSection",
39
+ "PatternType",
40
+ "Fastener",
41
+ "Bearing",
42
+ "Nut",
43
+ "Washer",
44
+ "Profile",
45
+ "Motor",
46
+ "Motorsport",
47
+ "AssemblyIR",
48
+ "MateType",
49
+ "UnitSystem",
50
+ "ExportFormat",
51
+ "SAMLParser",
52
+ "OCCTBackend",
53
+ "STEPReverseEngineer",
54
+ "ValidationEngineer",
55
+ "ClashReport",
56
+ ]
57
+
@@ -0,0 +1,3 @@
1
+ from .occt_backend import OCCTBackend
2
+
3
+ __all__ = ["OCCTBackend"]