Spaces:
Sleeping
Sleeping
| import docx | |
| import csv | |
| import io # Used for handling string as file-like object for IPC/D356 summaries | |
| def extract_text_from_docx(filepath): | |
| """Extracts all text from a .docx file.""" | |
| doc = docx.Document(filepath) | |
| full_text = [] | |
| for para in doc.paragraphs: | |
| full_text.append(para.text) | |
| return "\n".join(full_text) | |
| def extract_text_from_csv(filepath): | |
| """Extracts and formats text from a CSV file.""" | |
| with open(filepath, 'r', encoding='utf-8') as f: | |
| reader = csv.reader(f) | |
| header = next(reader) # Read header | |
| csv_data = [", ".join(header)] # Start with header | |
| for row in reader: | |
| csv_data.append(", ".join(row)) | |
| return "\n".join(csv_data) | |
| def summarize_ipc_or_d356_data(filepath, file_type): | |
| """ | |
| Placeholder for summarizing IPC or D356 data. | |
| In a real application, this would involve a dedicated parser. | |
| For demonstration, we'll return a placeholder string. | |
| """ | |
| if file_type == 'ipc': | |
| # Imagine complex parsing here, identifying ICs, connectors, critical nets etc. | |
| # For now, it's a conceptual summary. | |
| return f"Summary of {filepath} (IPC design data):\n" \ | |
| "- Identifies major components like U1 (MCU), U2 (Power IC), J1 (USB connector).\n" \ | |
| "- Provides connectivity information for power rails (VCC, GND) and data lines (e.g., I2C on U1 pins 3,4).\n" \ | |
| "- Indicates board dimensions and layer stackup.\n" \ | |
| "- Critical components: U1 (Microcontroller), U2 (Voltage Regulator), Q1 (MOSFET)." | |
| elif file_type == 'd356': | |
| # Imagine parsing test points, nets to check, etc. | |
| return f"Summary of {filepath} (D356 test data):\n" \ | |
| "- Lists test points: TP1 (VCC_3V3), TP2 (GND), TP3 (U1_I2C_SDA).\n" \ | |
| "- Indicates net connectivity for electrical tests.\n" \ | |
| "- Specifies areas for visual inspection related to component placement." | |
| else: | |
| return f"Could not summarize unknown file type: {filepath}" | |
| # --- File Paths (Update these to your actual file paths) --- | |
| manual_path = "inputFiles/Clemson_HW_Spec_V4_092325.docx" | |
| sample_output_path = "Example Output Files/AE304196-001_LoRa Car Radio Bring-Up Procedure.docx" | |
| ipc_design_path = "inputFiles/Assembly Testpoint Report for Car-PCB1.ipc" # This is conceptual for direct LLM input | |
| # Test Data (for the new device you want to generate test cases for) | |
| new_device_d356_path = "Test Case Files/UNO-TH_Rev3e.d356" # This is conceptual for direct LLM input | |
| new_device_bom_path = "Example Output Files/newModelBom.csv" | |
| # --- 1. Extract Text from Existing Files --- | |
| print("Extracting text from files...") | |
| try: | |
| manual_text = extract_text_from_docx(manual_path) | |
| print(f"Extracted {len(manual_text)} characters from manual.") | |
| except Exception as e: | |
| manual_text = "ERROR: Could not read PCB Manual. Ensure file exists and is a valid .docx." | |
| print(manual_text, e) | |
| try: | |
| sample_output_text = extract_text_from_docx(sample_output_path) | |
| print(f"Extracted {len(sample_output_text)} characters from sample output.") | |
| except Exception as e: | |
| sample_output_text = "ERROR: Could not read Sample Output. Ensure file exists and is a valid .docx." | |
| print(sample_output_text, e) | |
| # Summarize IPC and D356 (conceptual for LLM input) | |
| # In a real scenario, you'd run external tools or parsers here. | |
| ipc_summary = summarize_ipc_or_d356_data(ipc_design_path, 'ipc') | |
| print(f"Generated IPC summary (conceptual): {len(ipc_summary)} characters.") | |
| d356_summary = summarize_ipc_or_d356_data(new_device_d356_path, 'd356') | |
| print(f"Generated D356 summary (conceptual): {len(d356_summary)} characters.") | |
| try: | |
| new_device_bom_text = extract_text_from_csv(new_device_bom_path) | |
| print(f"Extracted {len(new_device_bom_text)} characters from new device BOM.") | |
| except Exception as e: | |
| new_device_bom_text = "ERROR: Could not read New Device BOM. Ensure file exists and is a valid .csv." | |
| print(new_device_bom_text, e) |