[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6KH2QBAHSEX6DGZSCNDDX9K":3,"skill-same:01M6KH2QBAHSEX6DGZSCNDDX9K":53},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":26,"linkOnly":27,"markdownContent":28,"markdownBody":29,"frontMatter":30,"refName":31,"commitSha":32,"skillDirectory":33,"forksCount":34,"repositoryHtmlUrl":35,"repositoryHomepageUrl":36,"ownerHtmlUrl":37,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":38,"install":39,"resources":52},"01M6KH2QBAHSEX6DGZSCNDDX9K","pacific-plate-earthquake-analysis",null,"Finding the earthquake furthest from the Pacific plate boundary within the Pacific plate itself, using GeoPandas with EPSG:4087 projection for distance calculations and EPSG:4326 for spatial containment checks.","cxcscmu\u002FSkillLearnBench","cxcscmu","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F142838272?v=4","01M6KCQDFQWPDSN0MKZY96MSQP","01M6KCQDM7G70TKJ28NTSQC0RZ",93,"MIT","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fb3-teacher-feedback-claude-opus-4-6\u002Fearthquake-plate-calculation\u002Frun2_pacific-plate-earthquake-analysis\u002FSKILL.md",[],[18,19,20,21,22,23,24,25],"analysis","pacific plate earthquake analysis","containment","geopandas","boundary","Spatial","with","for","2026-11-10 10:12:30",false,"---\nname: pacific-plate-earthquake-analysis\ndescription: Finding the earthquake furthest from the Pacific plate boundary within the Pacific plate itself, using GeoPandas with EPSG:4087 projection for distance calculations and EPSG:4326 for spatial containment checks.\n---\n\n## Overview\nThis skill finds the earthquake occurring furthest from the Pacific plate boundary, among earthquakes located within the Pacific plate. It uses specific projections and methods expected by the ground truth.\n\n## Step-by-step approach\n\n### 1. Load the data\n\n```python\nimport geopandas as gpd\nimport pandas as pd\nimport json\nfrom shapely.validation import make_valid\n\n# Load earthquake data\nearthquakes = gpd.read_file('\u002Froot\u002Fearthquakes_2024.json')\n\n# Load plate boundaries and plates\nboundaries = gpd.read_file('\u002Froot\u002FPB2002_boundaries.json')\nplates = gpd.read_file('\u002Froot\u002FPB2002_plates.json')\n```\n\n### 2. Get Pacific plate polygon in EPSG:4326\n\n```python\n# Ensure all data is in EPSG:4326\nearthquakes = earthquakes.set_crs('EPSG:4326', allow_override=True)\nboundaries = boundaries.set_crs('EPSG:4326', allow_override=True)\nplates = plates.set_crs('EPSG:4326', allow_override=True)\n\n# Get the Pacific plate polygon\npacific_plate = plates[plates['PlateName'] == 'Pacific']\npacific_geom = make_valid(pacific_plate.geometry.unary_union)\n```\n\n### 3. Filter earthquakes within Pacific plate (in EPSG:4326)\n\n**Important**: The `within` check must be done in EPSG:4326 (unprojected) to avoid antimeridian distortion issues when projecting the Pacific plate polygon.\n\n```python\n# Check which earthquakes are within the Pacific plate in EPSG:4326\nwithin_mask = earthquakes.geometry.within(pacific_geom)\npacific_earthquakes = earthquakes[within_mask].copy()\n```\n\n### 4. Filter Pacific plate boundaries\n\nUse boundaries where the `Name` field contains `\"PA\"`:\n\n```python\npacific_boundaries = boundaries[boundaries['Name'].str.contains('PA')]\n```\n\n### 5. Project to EPSG:4087 for distance calculation\n\n**Key**: Use EPSG:4087 (World Equidistant Cylindrical), NOT a custom azimuthal equidistant projection. The ground truth expects EPSG:4087.\n\n```python\n# Project filtered earthquakes and boundaries to EPSG:4087\npacific_eq_projected = pacific_earthquakes.to_crs('EPSG:4087')\npacific_bound_projected = pacific_boundaries.to_crs('EPSG:4087')\n\n# Create unary_union of all Pacific plate boundary geometries\nboundary_union = pacific_bound_projected.geometry.unary_union\n```\n\n### 6. Calculate distances using GeoDataFrame .distance() method\n\nUse `.distance()` directly on the GeoDataFrame against the unary_union, rather than iterating point-by-point:\n\n```python\n# Calculate distance from each earthquake to the Pacific plate boundary union\npacific_eq_projected['distance_m'] = pacific_eq_projected.geometry.distance(boundary_union)\npacific_eq_projected['distance_km'] = pacific_eq_projected['distance_m'] \u002F 1000.0\n```\n\n### 7. Find the earthquake with the maximum distance\n\n```python\nmax_idx = pacific_eq_projected['distance_km'].idxmax()\nresult_row = pacific_eq_projected.loc[max_idx]\n\n# Also get original (unprojected) data for lat\u002Flon\norig_row = pacific_earthquakes.loc[max_idx]\n```\n\n### 8. Format and output the result\n\n```python\n# Convert time to ISO 8601 format\ntime_val = pd.Timestamp(result_row['time'], unit='ms').strftime('%Y-%m-%dT%H:%M:%SZ') if isinstance(result_row['time'], (int, float)) else str(result_row['time'])\n\n# If time is already in ms epoch, convert:\n# time_val = pd.to_datetime(result_row['time'], unit='ms').strftime('%Y-%m-%dT%H:%M:%SZ')\n\nanswer = {\n    \"id\": str(result_row['id']),\n    \"place\": str(result_row['place']),\n    \"time\": time_val,\n    \"magnitude\": float(result_row['mag']),\n    \"latitude\": float(orig_row.geometry.y),\n    \"longitude\": float(orig_row.geometry.x),\n    \"distance_km\": round(float(result_row['distance_km']), 2)\n}\n\nwith open('\u002Froot\u002Fanswer.json', 'w') as f:\n    json.dump(answer, f, indent=2)\n```\n\n## Critical details\n\n- **EPSG:4326 for containment**: The `within` check MUST be done in EPSG:4326 to avoid Pacific plate polygon distortion at the antimeridian\n- **EPSG:4087 for distances**: Use World Equidistant Cylindrical, not custom aeqd\n- **Boundary filtering**: Use `boundaries['Name'].str.contains('PA')` to get Pacific plate boundaries\n- **Unary union**: Use `.unary_union` on projected boundaries before computing distances\n- **Distance method**: Use GeoDataFrame `.distance()` directly, not point-by-point iteration\n- **Rounding**: `round(value, 2)` for distance_km\n- **Time field handling**: The earthquake time may be in epoch milliseconds — convert with `pd.to_datetime(val, unit='ms')`\n- **Magnitude field**: The field name in earthquake GeoJSON is typically `mag`, not `magnitude`\n- **make_valid**: Apply `make_valid` to the Pacific plate geometry before the containment check","## Overview\nThis skill finds the earthquake occurring furthest from the Pacific plate boundary, among earthquakes located within the Pacific plate. It uses specific projections and methods expected by the ground truth.\n\n## Step-by-step approach\n\n### 1. Load the data\n\n```python\nimport geopandas as gpd\nimport pandas as pd\nimport json\nfrom shapely.validation import make_valid\n\n# Load earthquake data\nearthquakes = gpd.read_file('\u002Froot\u002Fearthquakes_2024.json')\n\n# Load plate boundaries and plates\nboundaries = gpd.read_file('\u002Froot\u002FPB2002_boundaries.json')\nplates = gpd.read_file('\u002Froot\u002FPB2002_plates.json')\n```\n\n### 2. Get Pacific plate polygon in EPSG:4326\n\n```python\n# Ensure all data is in EPSG:4326\nearthquakes = earthquakes.set_crs('EPSG:4326', allow_override=True)\nboundaries = boundaries.set_crs('EPSG:4326', allow_override=True)\nplates = plates.set_crs('EPSG:4326', allow_override=True)\n\n# Get the Pacific plate polygon\npacific_plate = plates[plates['PlateName'] == 'Pacific']\npacific_geom = make_valid(pacific_plate.geometry.unary_union)\n```\n\n### 3. Filter earthquakes within Pacific plate (in EPSG:4326)\n\n**Important**: The `within` check must be done in EPSG:4326 (unprojected) to avoid antimeridian distortion issues when projecting the Pacific plate polygon.\n\n```python\n# Check which earthquakes are within the Pacific plate in EPSG:4326\nwithin_mask = earthquakes.geometry.within(pacific_geom)\npacific_earthquakes = earthquakes[within_mask].copy()\n```\n\n### 4. Filter Pacific plate boundaries\n\nUse boundaries where the `Name` field contains `\"PA\"`:\n\n```python\npacific_boundaries = boundaries[boundaries['Name'].str.contains('PA')]\n```\n\n### 5. Project to EPSG:4087 for distance calculation\n\n**Key**: Use EPSG:4087 (World Equidistant Cylindrical), NOT a custom azimuthal equidistant projection. The ground truth expects EPSG:4087.\n\n```python\n# Project filtered earthquakes and boundaries to EPSG:4087\npacific_eq_projected = pacific_earthquakes.to_crs('EPSG:4087')\npacific_bound_projected = pacific_boundaries.to_crs('EPSG:4087')\n\n# Create unary_union of all Pacific plate boundary geometries\nboundary_union = pacific_bound_projected.geometry.unary_union\n```\n\n### 6. Calculate distances using GeoDataFrame .distance() method\n\nUse `.distance()` directly on the GeoDataFrame against the unary_union, rather than iterating point-by-point:\n\n```python\n# Calculate distance from each earthquake to the Pacific plate boundary union\npacific_eq_projected['distance_m'] = pacific_eq_projected.geometry.distance(boundary_union)\npacific_eq_projected['distance_km'] = pacific_eq_projected['distance_m'] \u002F 1000.0\n```\n\n### 7. Find the earthquake with the maximum distance\n\n```python\nmax_idx = pacific_eq_projected['distance_km'].idxmax()\nresult_row = pacific_eq_projected.loc[max_idx]\n\n# Also get original (unprojected) data for lat\u002Flon\norig_row = pacific_earthquakes.loc[max_idx]\n```\n\n### 8. Format and output the result\n\n```python\n# Convert time to ISO 8601 format\ntime_val = pd.Timestamp(result_row['time'], unit='ms').strftime('%Y-%m-%dT%H:%M:%SZ') if isinstance(result_row['time'], (int, float)) else str(result_row['time'])\n\n# If time is already in ms epoch, convert:\n# time_val = pd.to_datetime(result_row['time'], unit='ms').strftime('%Y-%m-%dT%H:%M:%SZ')\n\nanswer = {\n    \"id\": str(result_row['id']),\n    \"place\": str(result_row['place']),\n    \"time\": time_val,\n    \"magnitude\": float(result_row['mag']),\n    \"latitude\": float(orig_row.geometry.y),\n    \"longitude\": float(orig_row.geometry.x),\n    \"distance_km\": round(float(result_row['distance_km']), 2)\n}\n\nwith open('\u002Froot\u002Fanswer.json', 'w') as f:\n    json.dump(answer, f, indent=2)\n```\n\n## Critical details\n\n- **EPSG:4326 for containment**: The `within` check MUST be done in EPSG:4326 to avoid Pacific plate polygon distortion at the antimeridian\n- **EPSG:4087 for distances**: Use World Equidistant Cylindrical, not custom aeqd\n- **Boundary filtering**: Use `boundaries['Name'].str.contains('PA')` to get Pacific plate boundaries\n- **Unary union**: Use `.unary_union` on projected boundaries before computing distances\n- **Distance method**: Use GeoDataFrame `.distance()` directly, not point-by-point iteration\n- **Rounding**: `round(value, 2)` for distance_km\n- **Time field handling**: The earthquake time may be in epoch milliseconds — convert with `pd.to_datetime(val, unit='ms')`\n- **Magnitude field**: The field name in earthquake GeoJSON is typically `mag`, not `magnitude`\n- **make_valid**: Apply `make_valid` to the Pacific plate geometry before the containment check",{"name":5,"description":7},"main","726e1f79b96b0cb3d729d0e55a1c847e0b5353ae","skills\u002Fb3-teacher-feedback-claude-opus-4-6\u002Fearthquake-plate-calculation\u002Frun2_pacific-plate-earthquake-analysis",8,"https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench","https:\u002F\u002Fcxcscmu.github.io\u002FSkillLearnBench","https:\u002F\u002Fgithub.com\u002Fcxcscmu","2026-10-02 22:55:36",{"source":8,"skillName":5,"commands":40,"prompt":50,"zipAvailable":51},[41,44,47],{"tool":42,"command":43},"npx","npx skills add cxcscmu\u002FSkillLearnBench --skill pacific-plate-earthquake-analysis",{"tool":45,"command":46},"bunx","bunx skills add cxcscmu\u002FSkillLearnBench --skill pacific-plate-earthquake-analysis",{"tool":48,"command":49},"pnpm","pnpm dlx skills add cxcscmu\u002FSkillLearnBench --skill pacific-plate-earthquake-analysis","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fb3-teacher-feedback-claude-opus-4-6\u002Fearthquake-plate-calculation\u002Frun2_pacific-plate-earthquake-analysis\u002FSKILL.md",true,[],[54,72,96,114,134,146],{"skillNo":55,"name":56,"nameZh":6,"description":57,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":58,"categories":59,"keywords":65,"publishedAt":26},"01M6KM5KH175P5ABP5JMX2SBDQ","object_counter","Count occurrences of an object in the image using computer vision algorithm.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Fvideo-object-counting\u002Fobject_counter\u002FSKILL.md",[60],{"categoryNo":61,"categoryName":62,"taxonomyType":63,"taxonomyTypeDesc":64},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[66,67,68,69,70,71],"object counter","object","vision","computer","Computer Vision","image",{"skillNo":73,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":81,"publishedAt":26},"01M6KM51TMVXG79MMPCS6Y8G86","travel-planning-workflow","Invoke this skill when performing travel planning. It defines a structured workflow for generating itineraries. Following this workflow is essential to ensure the final plan satisfies user requirements.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Ftravel-planning\u002Ftravel-planning-workflow\u002FSKILL.md",[78],{"categoryNo":79,"categoryName":80,"taxonomyType":63,"taxonomyTypeDesc":64},"01JBSEEDCAT000000000000023","Skill与智能体开发",[82,83,84,85,86,87,88,89,90,25,91,92,93,94,95],"workflow","planning","planning workflow","travel","travel planning","travel planning workflow","structured","performing","plan","user","it","requirements","essential","itineraries",{"skillNo":97,"name":98,"nameZh":6,"description":99,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":102,"publishedAt":26},"01M6KM4DY820XHS9YTSK5QP5HD","bundled-dataset-search-tool","invoke this skill when you need to perform database search for travel planning. This skill provides some useful pre-packaged tools to look up accommodations, attractions, cities, driving distance, flights, and restaurants from the bundled dataset.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Ftravel-planning\u002Fbundled-dataset-search-tool\u002FSKILL.md",[],[103,104,105,106,107,108,109,85,110,111,86,112,25,113,83],"search","tool","dataset","bundled dataset search tool","restaurants","Tools","up","look","flights","you","database",{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":120,"publishedAt":26},"01M6KM465BB9PQ0B548HQSVAWZ","glm-output","Output-processing guidance for GLM tasks. Especially useful after glm-basics and glm-calibration when you need verifier-matching metrics from output.nc and a final \u002Froot\u002Fmetrics.json.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Ftemperature-simulation\u002Fglm-output\u002FSKILL.md",[],[121,122,123,25,124,125,126,127,128,129,130,131,112,132,133],"glm output","output","glm","tasks","metrics","json","basics","guidance","matching","verifier","processing","root","calibration",{"skillNo":135,"name":136,"nameZh":6,"description":137,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":138,"categories":139,"keywords":141,"publishedAt":26},"01M6KM40KY3QWDW5W97S39R2BC","glm-calibration","Calibration guidance for GLM tasks. Often most effective after glm-basics has clarified the setup; glm-output is the companion skill for exact final metric computation.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Ftemperature-simulation\u002Fglm-calibration\u002FSKILL.md",[140],{"categoryNo":79,"categoryName":80,"taxonomyType":63,"taxonomyTypeDesc":64},[142,133,123,122,128,127,124,143,144,25,145],"glm calibration","setup","companion","metric",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":152,"publishedAt":26},"01M6KM3VHHVSGMGHJQB3PPT6YG","glm-basics","A good starting point for GLM calibration tasks. Use to inspect glm3.nml, confirm how GLM runs, and identify the relevant files before moving on to calibration and output evaluation.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Ftemperature-simulation\u002Fglm-basics\u002FSKILL.md",[],[153,123,127,154,142,133,25,122,155,156,157,158,159,160,124],"glm basics","inspect","relevant","files","good","use","how","Evaluation"]