CostPrediction/.claude/settings.local.json

30 lines
15 KiB
JSON

{
"permissions": {
"allow": [
"Bash(tail:*)",
"Bash(cd \"C:\\\\Users\\\\Tellme\\\\apps\\\\CostPrediction\" && python -m pytest tests/ -v 2>&1)",
"Bash(cd \"C:\\\\Users\\\\Tellme\\\\apps\\\\CostPrediction\" && python -c \"\nfrom src import create_app\napp = create_app\\(\\)\nclient = app.test_client\\(\\)\n\n# Test demo routes\nresp = client.get\\('/api/demo/algorithms'\\)\nprint\\(f'GET /api/demo/algorithms: {resp.status_code}'\\)\ndata = resp.get_json\\(\\)\nprint\\(f' Number of algorithms: {len\\(data[\\\\\"algorithms\\\\\"]\\)}'\\)\n\nresp = client.get\\('/api/demo/dataset'\\)\nprint\\(f'GET /api/demo/dataset: {resp.status_code}'\\)\n\nresp = client.post\\('/api/demo/run', json={'algorithms': ['linear', 'ridge']}\\)\nprint\\(f'POST /api/demo/run: {resp.status_code}'\\)\ndata = resp.get_json\\(\\)\nprint\\(f' Best model: {data[\\\\\"best_model\\\\\"]}'\\)\n\n# Test SQLite routes\nresp = client.get\\('/api/data'\\)\nprint\\(f'GET /api/data: {resp.status_code}'\\)\n\nresp = client.get\\('/api/datasets'\\)\nprint\\(f'GET /api/datasets: {resp.status_code}'\\)\n\nprint\\('All smoke tests passed!'\\)\n\" 2>&1)",
"Bash(cd \"C:\\\\Users\\\\Tellme\\\\apps\\\\CostPrediction\" && python -c \"\nfrom src import create_app\napp = create_app\\(\\)\nclient = app.test_client\\(\\)\n\nimport logging\nlogging.basicConfig\\(level=logging.DEBUG\\)\n\nresp = client.get\\('/api/data'\\)\nprint\\(f'GET /api/data: {resp.status_code}'\\)\nprint\\(resp.get_json\\(\\)\\)\n\" 2>&1)",
"Bash(cd \"C:\\\\Users\\\\Tellme\\\\apps\\\\CostPrediction\" && python -c \"\nimport sqlite3\nimport os\n\ndb_path = os.path.join\\('data', 'equipment_cost.db'\\)\nos.makedirs\\('data', exist_ok=True\\)\n\nconn = sqlite3.connect\\(db_path\\)\nconn.row_factory = lambda c, r: {col[0]: r[idx] for idx, col in enumerate\\(c.description\\)}\n\nquery = '''\nSELECT e.id as equipment_id, e.name, e.type, e.manufacturer,\n cp.length_m, cp.width_m, cp.height_m, cp.weight_kg,\n cd.actual_cost, cd.predicted_cost,\n CASE \n WHEN e.type = '火箭炮' THEN \\(\n SELECT firing_angle_horizontal || ',' ||\n firing_angle_vertical || ',' ||\n rocket_length_m || ',' ||\n rocket_diameter_mm || ',' ||\n rocket_weight_kg || ',' ||\n rate_of_fire || ',' ||\n combat_weight_kg || ',' ||\n speed_kmh || ',' ||\n min_range_km || ',' ||\n max_range_km || ',' ||\n mobility_type || ',' ||\n structure_layout || ',' ||\n engine_model || ',' ||\n engine_params || ',' ||\n power_hp || ',' ||\n travel_range_km\n FROM rocket_artillery_params\n WHERE equipment_id = e.id\n \\)\n END as specific_params\nFROM equipments e\nLEFT JOIN common_params cp ON e.id = cp.equipment_id\nLEFT JOIN cost_data cd ON e.id = cd.equipment_id\nORDER BY e.id\n'''\n\ntry:\n cursor = conn.cursor\\(\\)\n cursor.execute\\(query\\)\n rows = cursor.fetchall\\(\\)\n print\\(f'Query OK, {len\\(rows\\)} rows'\\)\nexcept Exception as e:\n print\\(f'Error: {e}'\\)\n\" 2>&1)",
"Bash(cd \"C:\\\\Users\\\\Tellme\\\\apps\\\\CostPrediction\" && python -c \"\nfrom src import create_app\napp = create_app\\(\\)\nclient = app.test_client\\(\\)\n\n# Test SQLite routes\nresp = client.get\\('/api/data'\\)\nprint\\(f'GET /api/data: {resp.status_code}'\\)\n\nresp = client.get\\('/api/datasets'\\)\nprint\\(f'GET /api/datasets: {resp.status_code}'\\)\n\nresp = client.get\\('/api/models'\\)\nprint\\(f'GET /api/models: {resp.status_code}'\\)\n\n# Test demo routes\nresp = client.post\\('/api/demo/run', json={'algorithms': ['linear', 'ridge', 'random_forest']}\\)\nprint\\(f'POST /api/demo/run: {resp.status_code}'\\)\ndata = resp.get_json\\(\\)\nprint\\(f' Best model: {data[\\\\\"best_model\\\\\"]}'\\)\nprint\\(f' Metrics keys: {list\\(data[\\\\\"metrics\\\\\"].keys\\(\\)\\)}'\\)\n\nprint\\('All smoke tests passed!'\\)\n\" 2>&1)",
"Bash(cd \"C:\\\\Users\\\\Tellme\\\\apps\\\\CostPrediction\" && python -c \"\nfrom src import create_app\napp = create_app\\(\\)\nclient = app.test_client\\(\\)\n\n# Smoke test all key routes\nroutes = [\n \\('/api/', 'GET'\\),\n \\('/api/demo/algorithms', 'GET'\\),\n \\('/api/demo/dataset', 'GET'\\),\n \\('/api/data', 'GET'\\),\n \\('/api/datasets', 'GET'\\),\n \\('/api/models', 'GET'\\),\n]\nfor route, method in routes:\n resp = client.get\\(route\\)\n status = 'PASS' if resp.status_code == 200 else f'FAIL\\({resp.status_code}\\)'\n print\\(f'{status}: {route}'\\)\n\nprint\\('Done'\\)\n\" 2>&1)",
"Bash(cd C:\\\\Users\\\\Tellme\\\\apps\\\\CostPrediction:*)",
"Bash(sleep 2:*)",
"Bash(cd \"C:\\\\Users\\\\Tellme\\\\apps\\\\CostPrediction\" && python -c \"\nfrom src import create_app\napp = create_app\\(\\)\nclient = app.test_client\\(\\)\n\n# Read the Excel file as binary\nwith open\\('data/equipment_data_20241108.xlsx', 'rb'\\) as f:\n excel_data = f.read\\(\\)\n\nimport io\nresp = client.post\\('/api/data/import', data={'file': \\(io.BytesIO\\(excel_data\\), 'equipment_data_20241108.xlsx'\\)}\\)\nprint\\(f'Status: {resp.status_code}'\\)\nprint\\(f'Response: {resp.get_json\\(\\)}'\\)\n\" 2>&1)",
"Bash(sleep 3 && cd \"C:\\\\Users\\\\Tellme\\\\apps\\\\CostPrediction\" && python -c \"\nfrom src import create_app\napp = create_app\\(\\)\nclient = app.test_client\\(\\)\n\nimport io\nwith open\\('data/equipment_data_20241108.xlsx', 'rb'\\) as f:\n excel_data = f.read\\(\\)\n\nresp = client.post\\('/api/data/import', data={'file': \\(io.BytesIO\\(excel_data\\), 'equipment_data_20241108.xlsx'\\)}\\)\nprint\\(f'Import status: {resp.status_code}'\\)\nprint\\(f'Response: {resp.get_json\\(\\)}'\\)\n\nif resp.status_code == 200:\n resp2 = client.get\\('/api/data'\\)\n print\\(f'Data count: {len\\(resp2.get_json\\(\\)\\)} records'\\)\n\" 2>&1)",
"Bash(cd \"C:\\\\Users\\\\Tellme\\\\apps\\\\CostPrediction\" && python -c \"\nfrom src import create_app\napp = create_app\\(\\)\nclient = app.test_client\\(\\)\n\nimport io\nwith open\\('data/equipment_data_20241108.xlsx', 'rb'\\) as f:\n excel_data = f.read\\(\\)\n\nresp = client.post\\('/api/data/import', data={'file': \\(io.BytesIO\\(excel_data\\), 'equipment_data_20241108.xlsx'\\)}\\)\nprint\\(f'Import status: {resp.status_code}'\\)\nprint\\(f'Response: {resp.get_json\\(\\)}'\\)\n\nif resp.status_code == 200:\n resp2 = client.get\\('/api/data'\\)\n data = resp2.get_json\\(\\)\n print\\(f'Data records: {len\\(data\\)}'\\)\n if data:\n print\\(f'First record: {data[0]}'\\)\n\" 2>&1)",
"Bash(cd \"C:\\\\Users\\\\Tellme\\\\apps\\\\CostPrediction\" && python -c \"\nimport logging\nlogging.basicConfig\\(level=logging.DEBUG\\)\n\nfrom src import create_app\napp = create_app\\(\\)\nclient = app.test_client\\(\\)\n\nimport io\nwith open\\('data/equipment_data_20241108.xlsx', 'rb'\\) as f:\n excel_data = f.read\\(\\)\n\nresp = client.post\\('/api/data/import', data={'file': \\(io.BytesIO\\(excel_data\\), 'equipment_data_20241108.xlsx'\\)}\\)\nprint\\(f'Status: {resp.status_code}'\\)\nprint\\(f'Response: {resp.get_json\\(\\)}'\\)\n\" 2>&1)",
"Bash(cd \"C:\\\\Users\\\\Tellme\\\\apps\\\\CostPrediction\" && python -c \"\nfrom src import create_app\napp = create_app\\(\\)\nclient = app.test_client\\(\\)\n\nimport io\nwith open\\('data/equipment_data_20241108.xlsx', 'rb'\\) as f:\n excel_data = f.read\\(\\)\n\nresp = client.post\\('/api/data/import', data={'file': \\(io.BytesIO\\(excel_data\\), 'equipment_data_20241108.xlsx'\\)}\\)\nprint\\(f'Import status: {resp.status_code}'\\)\nprint\\(f'Response: {resp.get_json\\(\\)}'\\)\n\nif resp.status_code == 200:\n resp2 = client.get\\('/api/data'\\)\n data = resp2.get_json\\(\\)\n print\\(f'Data records: {len\\(data\\)}'\\)\n\" 2>&1)",
"Bash(sleep 3:*)",
"Bash(cd \"C:\\\\Users\\\\Tellme\\\\apps\\\\CostPrediction\\\\frontend\" && npm run build 2>&1)",
"Bash(cd \"C:/Users/Tellme/apps/CostPrediction/frontend\" && npm run build 2>&1)",
"Bash(cd \"C:/Users/Tellme/apps/CostPrediction\" && python -c \"\nfrom src import create_app\napp = create_app\\(\\)\nclient = app.test_client\\(\\)\n\n# Get a dataset first\nresp = client.get\\('/api/datasets?equipment_type=火箭炮&purpose=训练'\\)\nprint\\(f'Datasets: {resp.status_code}'\\)\ndatasets = resp.get_json\\(\\)\nprint\\(f'Found {len\\(datasets\\)} datasets'\\)\n\nif datasets:\n ds = datasets[0]\n print\\(f'Using dataset: id={ds[\\\\\"id\\\\\"]}, equipment_ids={ds.get\\(\\\\\"equipment_ids\\\\\", []\\)[:5]}'\\)\n\n # Try feature analysis\n resp2 = client.post\\('/api/analyze-features', json={\n 'dataset_id': ds['id'],\n 'equipment_type': '火箭炮'\n }\\)\n print\\(f'Analyze features: {resp2.status_code}'\\)\n if resp2.status_code != 200:\n print\\(f'Error: {resp2.get_json\\(\\)}'\\)\n\" 2>&1)",
"Bash(cd:*)",
"Bash(cd /c/Users/Tellme/apps/CostPrediction && python -c \"\nimport sys, json\nsys.path.insert\\(0, '.'\\)\nfrom src.database.db_connection import get_db_connection\nfrom src.feature_analysis import FeatureAnalysis\n\nanalyzer = FeatureAnalysis\\(\\)\n\nwith get_db_connection\\(\\) as conn:\n cursor = conn.cursor\\(\\)\n dataset_id = 1\n cursor.execute\\('''\n SELECT DISTINCT e.type\n FROM equipments e\n JOIN dataset_equipments de ON e.id = de.equipment_id\n WHERE de.dataset_id = ?\n LIMIT 1\n ''', \\(dataset_id,\\)\\)\n eq_type = cursor.fetchone\\(\\)\n print\\(f'Equipment type result: {eq_type}'\\)\n if not eq_type:\n print\\('NO EQUIPMENT TYPE FOUND'\\)\n exit\\(\\)\n\n equipment_type = eq_type['type']\n print\\(f'Equipment type: {equipment_type}'\\)\n\n if equipment_type == '火箭炮':\n cursor.execute\\('''\n SELECT e.id, e.name, e.type, e.manufacturer, e.manufacturer_id,\n m.tech_level, m.scale_level, m.supply_chain_level, m.country,\n cp.length_m, cp.width_m, cp.height_m, cp.weight_kg,\n cd.actual_cost,\n rap.max_range_km, rap.firing_angle_horizontal, rap.firing_angle_vertical,\n rap.rocket_length_m, rap.rocket_diameter_mm, rap.rocket_weight_kg,\n rap.rate_of_fire, rap.combat_weight_kg, rap.speed_kmh,\n rap.min_range_km, rap.power_hp, rap.travel_range_km,\n rap.fire_density, rap.range_ratio, rap.mobility_score,\n rap.combat_readiness_score, rap.deployment_score, rap.terrain_adaptability_score,\n rap.rocket_power_ratio, rap.platform_efficiency\n FROM equipments e\n JOIN dataset_equipments de ON e.id = de.equipment_id\n LEFT JOIN manufacturers m ON e.manufacturer_id = m.id\n LEFT JOIN common_params cp ON e.id = cp.equipment_id\n LEFT JOIN rocket_artillery_params rap ON e.id = rap.equipment_id\n LEFT JOIN cost_data cd ON e.id = cd.equipment_id\n WHERE de.dataset_id = ?\n AND cd.actual_cost IS NOT NULL\n ''', \\(dataset_id,\\)\\)\n else:\n cursor.execute\\('''\n SELECT e.id, e.name, e.type, e.manufacturer, e.manufacturer_id,\n m.tech_level, m.scale_level, m.supply_chain_level, m.country,\n cp.length_m, cp.width_m, cp.height_m, cp.weight_kg,\n cd.actual_cost,\n lmp.max_range_km, lmp.wingspan_m, lmp.warhead_weight_kg,\n lmp.max_speed_ms, lmp.cruise_speed_kmh, lmp.endurance_min,\n lmp.length_width_ratio, lmp.weight_range_ratio, \n lmp.speed_weight_ratio, lmp.ceiling_altitude_m,\n lmp.guidance_system_score, lmp.warhead_power_score,\n lmp.engine_power_kw, lmp.engine_thrust_n,\n lmp.min_altitude_m, lmp.max_altitude_m,\n lmp.max_payload_kg, lmp.combat_radius_km,\n lmp.datalink_range_km, lmp.guidance_accuracy_m\n FROM equipments e\n JOIN dataset_equipments de ON e.id = de.equipment_id\n LEFT JOIN manufacturers m ON e.manufacturer_id = m.id\n LEFT JOIN common_params cp ON e.id = cp.equipment_id\n LEFT JOIN loitering_munition_params lmp ON e.id = lmp.equipment_id\n LEFT JOIN cost_data cd ON e.id = cd.equipment_id\n WHERE de.dataset_id = ?\n AND cd.actual_cost IS NOT NULL\n ''', \\(dataset_id,\\)\\)\n\n equipment_data = cursor.fetchall\\(\\)\n print\\(f'Found {len\\(equipment_data\\)} equipments with cost data'\\)\n for item in equipment_data[:2]:\n print\\(f' {item[\\\\\"name\\\\\"]}: tech_level={item[\\\\\"tech_level\\\\\"]}, scale_level={item[\\\\\"scale_level\\\\\"]}'\\)\n print\\(f' max_range_km={item.get\\(\\\\\"max_range_km\\\\\"\\)}'\\)\n \n # Now try the feature analysis\n feature_names = analyzer.get_equipment_specific_features\\(equipment_data[0]['type']\\)\n print\\(f'Feature names \\({len\\(feature_names\\)}\\): {feature_names[:5]}...'\\)\n \n features = []\n targets = []\n \n for i, item in enumerate\\(equipment_data\\):\n manufacturer_features = analyzer.calculate_manufacturer_features\\({\n 'tech_level': item['tech_level'],\n 'scale_level': item['scale_level'],\n 'supply_chain_level': item['supply_chain_level'],\n 'country': item['country']\n }\\)\n \n feature_values = []\n for name in feature_names:\n if name in manufacturer_features:\n value = manufacturer_features[name]\n else:\n value = item.get\\(name\\)\n try:\n fv = float\\(value\\) if value is not None else 0.0\n except Exception as e:\n print\\(f'ERROR converting {name} = {value} \\(type={type\\(value\\).__name__}\\): {e}'\\)\n fv = 0.0\n feature_values.append\\(fv\\)\n \n features.append\\(feature_values\\)\n targets.append\\(float\\(item['actual_cost']\\)\\)\n \n print\\(f'Features: {len\\(features\\)} x {len\\(features[0]\\)}'\\)\n print\\(f'Targets: {len\\(targets\\)}'\\)\n \n # Try analyze_features\n try:\n result = analyzer.analyze_features\\(features, targets, feature_names\\)\n print\\('Analysis succeeded!'\\)\n except Exception as e:\n import traceback\n traceback.print_exc\\(\\)\n\" 2>&1)",
"Bash(head:*)",
"Bash(curl:*)",
"Bash(python:*)"
]
}
}