@synsci/cli-darwin-x64-baseline 1.1.77 → 1.1.78
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.
- package/bin/skills/adaptyv/SKILL.md +114 -0
- package/bin/skills/adaptyv/reference/api_reference.md +308 -0
- package/bin/skills/adaptyv/reference/examples.md +913 -0
- package/bin/skills/adaptyv/reference/experiments.md +360 -0
- package/bin/skills/adaptyv/reference/protein_optimization.md +637 -0
- package/bin/skills/aeon/SKILL.md +374 -0
- package/bin/skills/aeon/references/anomaly_detection.md +154 -0
- package/bin/skills/aeon/references/classification.md +144 -0
- package/bin/skills/aeon/references/clustering.md +123 -0
- package/bin/skills/aeon/references/datasets_benchmarking.md +387 -0
- package/bin/skills/aeon/references/distances.md +256 -0
- package/bin/skills/aeon/references/forecasting.md +140 -0
- package/bin/skills/aeon/references/networks.md +289 -0
- package/bin/skills/aeon/references/regression.md +118 -0
- package/bin/skills/aeon/references/segmentation.md +163 -0
- package/bin/skills/aeon/references/similarity_search.md +187 -0
- package/bin/skills/aeon/references/transformations.md +246 -0
- package/bin/skills/alphafold-database/SKILL.md +513 -0
- package/bin/skills/alphafold-database/references/api_reference.md +423 -0
- package/bin/skills/anndata/SKILL.md +400 -0
- package/bin/skills/anndata/references/best_practices.md +525 -0
- package/bin/skills/anndata/references/concatenation.md +396 -0
- package/bin/skills/anndata/references/data_structure.md +314 -0
- package/bin/skills/anndata/references/io_operations.md +404 -0
- package/bin/skills/anndata/references/manipulation.md +516 -0
- package/bin/skills/arboreto/SKILL.md +243 -0
- package/bin/skills/arboreto/references/algorithms.md +138 -0
- package/bin/skills/arboreto/references/basic_inference.md +151 -0
- package/bin/skills/arboreto/references/distributed_computing.md +242 -0
- package/bin/skills/arboreto/scripts/basic_grn_inference.py +97 -0
- package/bin/skills/astropy/SKILL.md +331 -0
- package/bin/skills/astropy/references/coordinates.md +273 -0
- package/bin/skills/astropy/references/cosmology.md +307 -0
- package/bin/skills/astropy/references/fits.md +396 -0
- package/bin/skills/astropy/references/tables.md +489 -0
- package/bin/skills/astropy/references/time.md +404 -0
- package/bin/skills/astropy/references/units.md +178 -0
- package/bin/skills/astropy/references/wcs_and_other_modules.md +373 -0
- package/bin/skills/benchling-integration/SKILL.md +480 -0
- package/bin/skills/benchling-integration/references/api_endpoints.md +883 -0
- package/bin/skills/benchling-integration/references/authentication.md +379 -0
- package/bin/skills/benchling-integration/references/sdk_reference.md +774 -0
- package/bin/skills/biopython/SKILL.md +443 -0
- package/bin/skills/biopython/references/advanced.md +577 -0
- package/bin/skills/biopython/references/alignment.md +362 -0
- package/bin/skills/biopython/references/blast.md +455 -0
- package/bin/skills/biopython/references/databases.md +484 -0
- package/bin/skills/biopython/references/phylogenetics.md +566 -0
- package/bin/skills/biopython/references/sequence_io.md +285 -0
- package/bin/skills/biopython/references/structure.md +564 -0
- package/bin/skills/biorxiv-database/SKILL.md +483 -0
- package/bin/skills/biorxiv-database/references/api_reference.md +280 -0
- package/bin/skills/biorxiv-database/scripts/biorxiv_search.py +445 -0
- package/bin/skills/bioservices/SKILL.md +361 -0
- package/bin/skills/bioservices/references/identifier_mapping.md +685 -0
- package/bin/skills/bioservices/references/services_reference.md +636 -0
- package/bin/skills/bioservices/references/workflow_patterns.md +811 -0
- package/bin/skills/bioservices/scripts/batch_id_converter.py +347 -0
- package/bin/skills/bioservices/scripts/compound_cross_reference.py +378 -0
- package/bin/skills/bioservices/scripts/pathway_analysis.py +309 -0
- package/bin/skills/bioservices/scripts/protein_analysis_workflow.py +408 -0
- package/bin/skills/brenda-database/SKILL.md +719 -0
- package/bin/skills/brenda-database/references/api_reference.md +537 -0
- package/bin/skills/brenda-database/scripts/brenda_queries.py +844 -0
- package/bin/skills/brenda-database/scripts/brenda_visualization.py +772 -0
- package/bin/skills/brenda-database/scripts/enzyme_pathway_builder.py +1053 -0
- package/bin/skills/cellxgene-census/SKILL.md +511 -0
- package/bin/skills/cellxgene-census/references/census_schema.md +182 -0
- package/bin/skills/cellxgene-census/references/common_patterns.md +351 -0
- package/bin/skills/chembl-database/SKILL.md +389 -0
- package/bin/skills/chembl-database/references/api_reference.md +272 -0
- package/bin/skills/chembl-database/scripts/example_queries.py +278 -0
- package/bin/skills/cirq/SKILL.md +346 -0
- package/bin/skills/cirq/references/building.md +307 -0
- package/bin/skills/cirq/references/experiments.md +572 -0
- package/bin/skills/cirq/references/hardware.md +515 -0
- package/bin/skills/cirq/references/noise.md +515 -0
- package/bin/skills/cirq/references/simulation.md +350 -0
- package/bin/skills/cirq/references/transformation.md +416 -0
- package/bin/skills/clinicaltrials-database/SKILL.md +507 -0
- package/bin/skills/clinicaltrials-database/references/api_reference.md +358 -0
- package/bin/skills/clinicaltrials-database/scripts/query_clinicaltrials.py +215 -0
- package/bin/skills/clinpgx-database/SKILL.md +638 -0
- package/bin/skills/clinpgx-database/references/api_reference.md +757 -0
- package/bin/skills/clinpgx-database/scripts/query_clinpgx.py +518 -0
- package/bin/skills/clinvar-database/SKILL.md +362 -0
- package/bin/skills/clinvar-database/references/api_reference.md +227 -0
- package/bin/skills/clinvar-database/references/clinical_significance.md +218 -0
- package/bin/skills/clinvar-database/references/data_formats.md +358 -0
- package/bin/skills/cobrapy/SKILL.md +463 -0
- package/bin/skills/cobrapy/references/api_quick_reference.md +655 -0
- package/bin/skills/cobrapy/references/workflows.md +593 -0
- package/bin/skills/cosmic-database/SKILL.md +336 -0
- package/bin/skills/cosmic-database/references/cosmic_data_reference.md +220 -0
- package/bin/skills/cosmic-database/scripts/download_cosmic.py +231 -0
- package/bin/skills/dask/SKILL.md +456 -0
- package/bin/skills/dask/references/arrays.md +497 -0
- package/bin/skills/dask/references/bags.md +468 -0
- package/bin/skills/dask/references/best-practices.md +277 -0
- package/bin/skills/dask/references/dataframes.md +368 -0
- package/bin/skills/dask/references/futures.md +541 -0
- package/bin/skills/dask/references/schedulers.md +504 -0
- package/bin/skills/datacommons-client/SKILL.md +255 -0
- package/bin/skills/datacommons-client/references/getting_started.md +417 -0
- package/bin/skills/datacommons-client/references/node.md +250 -0
- package/bin/skills/datacommons-client/references/observation.md +185 -0
- package/bin/skills/datacommons-client/references/resolve.md +246 -0
- package/bin/skills/datamol/SKILL.md +706 -0
- package/bin/skills/datamol/references/conformers_module.md +131 -0
- package/bin/skills/datamol/references/core_api.md +130 -0
- package/bin/skills/datamol/references/descriptors_viz.md +195 -0
- package/bin/skills/datamol/references/fragments_scaffolds.md +174 -0
- package/bin/skills/datamol/references/io_module.md +109 -0
- package/bin/skills/datamol/references/reactions_data.md +218 -0
- package/bin/skills/deepchem/SKILL.md +597 -0
- package/bin/skills/deepchem/references/api_reference.md +303 -0
- package/bin/skills/deepchem/references/workflows.md +491 -0
- package/bin/skills/deepchem/scripts/graph_neural_network.py +338 -0
- package/bin/skills/deepchem/scripts/predict_solubility.py +224 -0
- package/bin/skills/deepchem/scripts/transfer_learning.py +375 -0
- package/bin/skills/deeptools/SKILL.md +531 -0
- package/bin/skills/deeptools/assets/quick_reference.md +58 -0
- package/bin/skills/deeptools/references/effective_genome_sizes.md +116 -0
- package/bin/skills/deeptools/references/normalization_methods.md +410 -0
- package/bin/skills/deeptools/references/tools_reference.md +533 -0
- package/bin/skills/deeptools/references/workflows.md +474 -0
- package/bin/skills/deeptools/scripts/validate_files.py +195 -0
- package/bin/skills/deeptools/scripts/workflow_generator.py +454 -0
- package/bin/skills/denario/SKILL.md +215 -0
- package/bin/skills/denario/references/examples.md +494 -0
- package/bin/skills/denario/references/installation.md +213 -0
- package/bin/skills/denario/references/llm_configuration.md +265 -0
- package/bin/skills/denario/references/research_pipeline.md +471 -0
- package/bin/skills/diffdock/SKILL.md +483 -0
- package/bin/skills/diffdock/assets/batch_template.csv +4 -0
- package/bin/skills/diffdock/assets/custom_inference_config.yaml +90 -0
- package/bin/skills/diffdock/references/confidence_and_limitations.md +182 -0
- package/bin/skills/diffdock/references/parameters_reference.md +163 -0
- package/bin/skills/diffdock/references/workflows_examples.md +392 -0
- package/bin/skills/diffdock/scripts/analyze_results.py +334 -0
- package/bin/skills/diffdock/scripts/prepare_batch_csv.py +254 -0
- package/bin/skills/diffdock/scripts/setup_check.py +278 -0
- package/bin/skills/dnanexus-integration/SKILL.md +383 -0
- package/bin/skills/dnanexus-integration/references/app-development.md +247 -0
- package/bin/skills/dnanexus-integration/references/configuration.md +646 -0
- package/bin/skills/dnanexus-integration/references/data-operations.md +400 -0
- package/bin/skills/dnanexus-integration/references/job-execution.md +412 -0
- package/bin/skills/dnanexus-integration/references/python-sdk.md +523 -0
- package/bin/skills/document-skills/docx/LICENSE.txt +30 -0
- package/bin/skills/document-skills/docx/SKILL.md +233 -0
- package/bin/skills/document-skills/docx/docx-js.md +350 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/mce/mc.xsd +75 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/bin/skills/document-skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/bin/skills/document-skills/docx/ooxml/scripts/pack.py +159 -0
- package/bin/skills/document-skills/docx/ooxml/scripts/unpack.py +29 -0
- package/bin/skills/document-skills/docx/ooxml/scripts/validate.py +69 -0
- package/bin/skills/document-skills/docx/ooxml/scripts/validation/__init__.py +15 -0
- package/bin/skills/document-skills/docx/ooxml/scripts/validation/base.py +951 -0
- package/bin/skills/document-skills/docx/ooxml/scripts/validation/docx.py +274 -0
- package/bin/skills/document-skills/docx/ooxml/scripts/validation/pptx.py +315 -0
- package/bin/skills/document-skills/docx/ooxml/scripts/validation/redlining.py +279 -0
- package/bin/skills/document-skills/docx/ooxml.md +610 -0
- package/bin/skills/document-skills/docx/scripts/__init__.py +1 -0
- package/bin/skills/document-skills/docx/scripts/document.py +1276 -0
- package/bin/skills/document-skills/docx/scripts/templates/comments.xml +3 -0
- package/bin/skills/document-skills/docx/scripts/templates/commentsExtended.xml +3 -0
- package/bin/skills/document-skills/docx/scripts/templates/commentsExtensible.xml +3 -0
- package/bin/skills/document-skills/docx/scripts/templates/commentsIds.xml +3 -0
- package/bin/skills/document-skills/docx/scripts/templates/people.xml +3 -0
- package/bin/skills/document-skills/docx/scripts/utilities.py +374 -0
- package/bin/skills/document-skills/pdf/LICENSE.txt +30 -0
- package/bin/skills/document-skills/pdf/SKILL.md +330 -0
- package/bin/skills/document-skills/pdf/forms.md +205 -0
- package/bin/skills/document-skills/pdf/reference.md +612 -0
- package/bin/skills/document-skills/pdf/scripts/check_bounding_boxes.py +70 -0
- package/bin/skills/document-skills/pdf/scripts/check_bounding_boxes_test.py +226 -0
- package/bin/skills/document-skills/pdf/scripts/check_fillable_fields.py +12 -0
- package/bin/skills/document-skills/pdf/scripts/convert_pdf_to_images.py +35 -0
- package/bin/skills/document-skills/pdf/scripts/create_validation_image.py +41 -0
- package/bin/skills/document-skills/pdf/scripts/extract_form_field_info.py +152 -0
- package/bin/skills/document-skills/pdf/scripts/fill_fillable_fields.py +114 -0
- package/bin/skills/document-skills/pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
- package/bin/skills/document-skills/pptx/LICENSE.txt +30 -0
- package/bin/skills/document-skills/pptx/SKILL.md +520 -0
- package/bin/skills/document-skills/pptx/html2pptx.md +625 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/mce/mc.xsd +75 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/bin/skills/document-skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/bin/skills/document-skills/pptx/ooxml/scripts/pack.py +159 -0
- package/bin/skills/document-skills/pptx/ooxml/scripts/unpack.py +29 -0
- package/bin/skills/document-skills/pptx/ooxml/scripts/validate.py +69 -0
- package/bin/skills/document-skills/pptx/ooxml/scripts/validation/__init__.py +15 -0
- package/bin/skills/document-skills/pptx/ooxml/scripts/validation/base.py +951 -0
- package/bin/skills/document-skills/pptx/ooxml/scripts/validation/docx.py +274 -0
- package/bin/skills/document-skills/pptx/ooxml/scripts/validation/pptx.py +315 -0
- package/bin/skills/document-skills/pptx/ooxml/scripts/validation/redlining.py +279 -0
- package/bin/skills/document-skills/pptx/ooxml.md +427 -0
- package/bin/skills/document-skills/pptx/scripts/html2pptx.js +979 -0
- package/bin/skills/document-skills/pptx/scripts/inventory.py +1020 -0
- package/bin/skills/document-skills/pptx/scripts/rearrange.py +231 -0
- package/bin/skills/document-skills/pptx/scripts/replace.py +385 -0
- package/bin/skills/document-skills/pptx/scripts/thumbnail.py +450 -0
- package/bin/skills/document-skills/xlsx/LICENSE.txt +30 -0
- package/bin/skills/document-skills/xlsx/SKILL.md +325 -0
- package/bin/skills/document-skills/xlsx/recalc.py +178 -0
- package/bin/skills/drugbank-database/SKILL.md +190 -0
- package/bin/skills/drugbank-database/references/chemical-analysis.md +590 -0
- package/bin/skills/drugbank-database/references/data-access.md +242 -0
- package/bin/skills/drugbank-database/references/drug-queries.md +386 -0
- package/bin/skills/drugbank-database/references/interactions.md +425 -0
- package/bin/skills/drugbank-database/references/targets-pathways.md +518 -0
- package/bin/skills/drugbank-database/scripts/drugbank_helper.py +350 -0
- package/bin/skills/ena-database/SKILL.md +204 -0
- package/bin/skills/ena-database/references/api_reference.md +490 -0
- package/bin/skills/ensembl-database/SKILL.md +311 -0
- package/bin/skills/ensembl-database/references/api_endpoints.md +346 -0
- package/bin/skills/ensembl-database/scripts/ensembl_query.py +427 -0
- package/bin/skills/esm/SKILL.md +306 -0
- package/bin/skills/esm/references/esm-c-api.md +583 -0
- package/bin/skills/esm/references/esm3-api.md +452 -0
- package/bin/skills/esm/references/forge-api.md +657 -0
- package/bin/skills/esm/references/workflows.md +685 -0
- package/bin/skills/etetoolkit/SKILL.md +623 -0
- package/bin/skills/etetoolkit/references/api_reference.md +583 -0
- package/bin/skills/etetoolkit/references/visualization.md +783 -0
- package/bin/skills/etetoolkit/references/workflows.md +774 -0
- package/bin/skills/etetoolkit/scripts/quick_visualize.py +214 -0
- package/bin/skills/etetoolkit/scripts/tree_operations.py +229 -0
- package/bin/skills/exploratory-data-analysis/SKILL.md +446 -0
- package/bin/skills/exploratory-data-analysis/assets/report_template.md +196 -0
- package/bin/skills/exploratory-data-analysis/references/bioinformatics_genomics_formats.md +664 -0
- package/bin/skills/exploratory-data-analysis/references/chemistry_molecular_formats.md +664 -0
- package/bin/skills/exploratory-data-analysis/references/general_scientific_formats.md +518 -0
- package/bin/skills/exploratory-data-analysis/references/microscopy_imaging_formats.md +620 -0
- package/bin/skills/exploratory-data-analysis/references/proteomics_metabolomics_formats.md +517 -0
- package/bin/skills/exploratory-data-analysis/references/spectroscopy_analytical_formats.md +633 -0
- package/bin/skills/exploratory-data-analysis/scripts/eda_analyzer.py +547 -0
- package/bin/skills/fda-database/SKILL.md +518 -0
- package/bin/skills/fda-database/references/animal_veterinary.md +377 -0
- package/bin/skills/fda-database/references/api_basics.md +687 -0
- package/bin/skills/fda-database/references/devices.md +632 -0
- package/bin/skills/fda-database/references/drugs.md +468 -0
- package/bin/skills/fda-database/references/foods.md +374 -0
- package/bin/skills/fda-database/references/other.md +472 -0
- package/bin/skills/fda-database/scripts/fda_examples.py +335 -0
- package/bin/skills/fda-database/scripts/fda_query.py +440 -0
- package/bin/skills/flowio/SKILL.md +608 -0
- package/bin/skills/flowio/references/api_reference.md +372 -0
- package/bin/skills/fluidsim/SKILL.md +349 -0
- package/bin/skills/fluidsim/references/advanced_features.md +398 -0
- package/bin/skills/fluidsim/references/installation.md +68 -0
- package/bin/skills/fluidsim/references/output_analysis.md +283 -0
- package/bin/skills/fluidsim/references/parameters.md +198 -0
- package/bin/skills/fluidsim/references/simulation_workflow.md +172 -0
- package/bin/skills/fluidsim/references/solvers.md +94 -0
- package/bin/skills/fred-economic-data/SKILL.md +433 -0
- package/bin/skills/fred-economic-data/references/api_basics.md +212 -0
- package/bin/skills/fred-economic-data/references/categories.md +442 -0
- package/bin/skills/fred-economic-data/references/geofred.md +588 -0
- package/bin/skills/fred-economic-data/references/releases.md +642 -0
- package/bin/skills/fred-economic-data/references/series.md +584 -0
- package/bin/skills/fred-economic-data/references/sources.md +423 -0
- package/bin/skills/fred-economic-data/references/tags.md +485 -0
- package/bin/skills/fred-economic-data/scripts/fred_examples.py +354 -0
- package/bin/skills/fred-economic-data/scripts/fred_query.py +590 -0
- package/bin/skills/gene-database/SKILL.md +179 -0
- package/bin/skills/gene-database/references/api_reference.md +404 -0
- package/bin/skills/gene-database/references/common_workflows.md +428 -0
- package/bin/skills/gene-database/scripts/batch_gene_lookup.py +298 -0
- package/bin/skills/gene-database/scripts/fetch_gene_data.py +277 -0
- package/bin/skills/gene-database/scripts/query_gene.py +251 -0
- package/bin/skills/geniml/SKILL.md +318 -0
- package/bin/skills/geniml/references/bedspace.md +127 -0
- package/bin/skills/geniml/references/consensus_peaks.md +238 -0
- package/bin/skills/geniml/references/region2vec.md +90 -0
- package/bin/skills/geniml/references/scembed.md +197 -0
- package/bin/skills/geniml/references/utilities.md +385 -0
- package/bin/skills/geo-database/SKILL.md +815 -0
- package/bin/skills/geo-database/references/geo_reference.md +829 -0
- package/bin/skills/geopandas/SKILL.md +251 -0
- package/bin/skills/geopandas/references/crs-management.md +243 -0
- package/bin/skills/geopandas/references/data-io.md +165 -0
- package/bin/skills/geopandas/references/data-structures.md +70 -0
- package/bin/skills/geopandas/references/geometric-operations.md +221 -0
- package/bin/skills/geopandas/references/spatial-analysis.md +184 -0
- package/bin/skills/geopandas/references/visualization.md +243 -0
- package/bin/skills/get-available-resources/SKILL.md +277 -0
- package/bin/skills/get-available-resources/scripts/detect_resources.py +401 -0
- package/bin/skills/gget/SKILL.md +871 -0
- package/bin/skills/gget/references/database_info.md +300 -0
- package/bin/skills/gget/references/module_reference.md +467 -0
- package/bin/skills/gget/references/workflows.md +814 -0
- package/bin/skills/gget/scripts/batch_sequence_analysis.py +191 -0
- package/bin/skills/gget/scripts/enrichment_pipeline.py +235 -0
- package/bin/skills/gget/scripts/gene_analysis.py +161 -0
- package/bin/skills/gtars/SKILL.md +285 -0
- package/bin/skills/gtars/references/cli.md +222 -0
- package/bin/skills/gtars/references/coverage.md +172 -0
- package/bin/skills/gtars/references/overlap.md +156 -0
- package/bin/skills/gtars/references/python-api.md +211 -0
- package/bin/skills/gtars/references/refget.md +147 -0
- package/bin/skills/gtars/references/tokenizers.md +103 -0
- package/bin/skills/gwas-database/SKILL.md +608 -0
- package/bin/skills/gwas-database/references/api_reference.md +793 -0
- package/bin/skills/histolab/SKILL.md +678 -0
- package/bin/skills/histolab/references/filters_preprocessing.md +514 -0
- package/bin/skills/histolab/references/slide_management.md +172 -0
- package/bin/skills/histolab/references/tile_extraction.md +421 -0
- package/bin/skills/histolab/references/tissue_masks.md +251 -0
- package/bin/skills/histolab/references/visualization.md +547 -0
- package/bin/skills/hmdb-database/SKILL.md +196 -0
- package/bin/skills/hmdb-database/references/hmdb_data_fields.md +267 -0
- package/bin/skills/hypogenic/SKILL.md +655 -0
- package/bin/skills/hypogenic/references/config_template.yaml +150 -0
- package/bin/skills/imaging-data-commons/SKILL.md +1182 -0
- package/bin/skills/imaging-data-commons/references/bigquery_guide.md +556 -0
- package/bin/skills/imaging-data-commons/references/cli_guide.md +272 -0
- package/bin/skills/imaging-data-commons/references/cloud_storage_guide.md +333 -0
- package/bin/skills/imaging-data-commons/references/dicomweb_guide.md +399 -0
- package/bin/skills/infographics/SKILL.md +563 -0
- package/bin/skills/infographics/references/color_palettes.md +496 -0
- package/bin/skills/infographics/references/design_principles.md +636 -0
- package/bin/skills/infographics/references/infographic_types.md +907 -0
- package/bin/skills/infographics/scripts/generate_infographic.py +234 -0
- package/bin/skills/infographics/scripts/generate_infographic_ai.py +1290 -0
- package/bin/skills/iso-13485-certification/SKILL.md +680 -0
- package/bin/skills/iso-13485-certification/assets/templates/procedures/CAPA-procedure-template.md +453 -0
- package/bin/skills/iso-13485-certification/assets/templates/procedures/document-control-procedure-template.md +567 -0
- package/bin/skills/iso-13485-certification/assets/templates/quality-manual-template.md +521 -0
- package/bin/skills/iso-13485-certification/references/gap-analysis-checklist.md +568 -0
- package/bin/skills/iso-13485-certification/references/iso-13485-requirements.md +610 -0
- package/bin/skills/iso-13485-certification/references/mandatory-documents.md +606 -0
- package/bin/skills/iso-13485-certification/references/quality-manual-guide.md +688 -0
- package/bin/skills/iso-13485-certification/scripts/gap_analyzer.py +440 -0
- package/bin/skills/kegg-database/SKILL.md +377 -0
- package/bin/skills/kegg-database/references/kegg_reference.md +326 -0
- package/bin/skills/kegg-database/scripts/kegg_api.py +251 -0
- package/bin/skills/labarchive-integration/SKILL.md +268 -0
- package/bin/skills/labarchive-integration/references/api_reference.md +342 -0
- package/bin/skills/labarchive-integration/references/authentication_guide.md +357 -0
- package/bin/skills/labarchive-integration/references/integrations.md +425 -0
- package/bin/skills/labarchive-integration/scripts/entry_operations.py +334 -0
- package/bin/skills/labarchive-integration/scripts/notebook_operations.py +269 -0
- package/bin/skills/labarchive-integration/scripts/setup_config.py +205 -0
- package/bin/skills/lamindb/SKILL.md +390 -0
- package/bin/skills/lamindb/references/annotation-validation.md +513 -0
- package/bin/skills/lamindb/references/core-concepts.md +380 -0
- package/bin/skills/lamindb/references/data-management.md +433 -0
- package/bin/skills/lamindb/references/integrations.md +642 -0
- package/bin/skills/lamindb/references/ontologies.md +497 -0
- package/bin/skills/lamindb/references/setup-deployment.md +733 -0
- package/bin/skills/latchbio-integration/SKILL.md +353 -0
- package/bin/skills/latchbio-integration/references/data-management.md +427 -0
- package/bin/skills/latchbio-integration/references/resource-configuration.md +429 -0
- package/bin/skills/latchbio-integration/references/verified-workflows.md +487 -0
- package/bin/skills/latchbio-integration/references/workflow-creation.md +254 -0
- package/bin/skills/matchms/SKILL.md +203 -0
- package/bin/skills/matchms/references/filtering.md +288 -0
- package/bin/skills/matchms/references/importing_exporting.md +416 -0
- package/bin/skills/matchms/references/similarity.md +380 -0
- package/bin/skills/matchms/references/workflows.md +647 -0
- package/bin/skills/matlab/SKILL.md +376 -0
- package/bin/skills/matlab/references/data-import-export.md +479 -0
- package/bin/skills/matlab/references/executing-scripts.md +444 -0
- package/bin/skills/matlab/references/graphics-visualization.md +579 -0
- package/bin/skills/matlab/references/mathematics.md +553 -0
- package/bin/skills/matlab/references/matrices-arrays.md +349 -0
- package/bin/skills/matlab/references/octave-compatibility.md +544 -0
- package/bin/skills/matlab/references/programming.md +672 -0
- package/bin/skills/matlab/references/python-integration.md +433 -0
- package/bin/skills/matplotlib/SKILL.md +361 -0
- package/bin/skills/matplotlib/references/api_reference.md +412 -0
- package/bin/skills/matplotlib/references/common_issues.md +563 -0
- package/bin/skills/matplotlib/references/plot_types.md +476 -0
- package/bin/skills/matplotlib/references/styling_guide.md +589 -0
- package/bin/skills/matplotlib/scripts/plot_template.py +401 -0
- package/bin/skills/matplotlib/scripts/style_configurator.py +409 -0
- package/bin/skills/medchem/SKILL.md +406 -0
- package/bin/skills/medchem/references/api_guide.md +600 -0
- package/bin/skills/medchem/references/rules_catalog.md +604 -0
- package/bin/skills/medchem/scripts/filter_molecules.py +418 -0
- package/bin/skills/metabolomics-workbench-database/SKILL.md +259 -0
- package/bin/skills/metabolomics-workbench-database/references/api_reference.md +494 -0
- package/bin/skills/modal-research-gpu/SKILL.md +238 -0
- package/bin/skills/molfeat/SKILL.md +511 -0
- package/bin/skills/molfeat/references/api_reference.md +428 -0
- package/bin/skills/molfeat/references/available_featurizers.md +333 -0
- package/bin/skills/molfeat/references/examples.md +723 -0
- package/bin/skills/networkx/SKILL.md +437 -0
- package/bin/skills/networkx/references/algorithms.md +383 -0
- package/bin/skills/networkx/references/generators.md +378 -0
- package/bin/skills/networkx/references/graph-basics.md +283 -0
- package/bin/skills/networkx/references/io.md +441 -0
- package/bin/skills/networkx/references/visualization.md +529 -0
- package/bin/skills/neurokit2/SKILL.md +356 -0
- package/bin/skills/neurokit2/references/bio_module.md +417 -0
- package/bin/skills/neurokit2/references/complexity.md +715 -0
- package/bin/skills/neurokit2/references/ecg_cardiac.md +355 -0
- package/bin/skills/neurokit2/references/eda.md +497 -0
- package/bin/skills/neurokit2/references/eeg.md +506 -0
- package/bin/skills/neurokit2/references/emg.md +408 -0
- package/bin/skills/neurokit2/references/eog.md +407 -0
- package/bin/skills/neurokit2/references/epochs_events.md +471 -0
- package/bin/skills/neurokit2/references/hrv.md +480 -0
- package/bin/skills/neurokit2/references/ppg.md +413 -0
- package/bin/skills/neurokit2/references/rsp.md +510 -0
- package/bin/skills/neurokit2/references/signal_processing.md +648 -0
- package/bin/skills/neuropixels-analysis/SKILL.md +350 -0
- package/bin/skills/neuropixels-analysis/assets/analysis_template.py +271 -0
- package/bin/skills/neuropixels-analysis/references/AI_CURATION.md +345 -0
- package/bin/skills/neuropixels-analysis/references/ANALYSIS.md +392 -0
- package/bin/skills/neuropixels-analysis/references/AUTOMATED_CURATION.md +358 -0
- package/bin/skills/neuropixels-analysis/references/MOTION_CORRECTION.md +323 -0
- package/bin/skills/neuropixels-analysis/references/PREPROCESSING.md +273 -0
- package/bin/skills/neuropixels-analysis/references/QUALITY_METRICS.md +359 -0
- package/bin/skills/neuropixels-analysis/references/SPIKE_SORTING.md +339 -0
- package/bin/skills/neuropixels-analysis/references/api_reference.md +415 -0
- package/bin/skills/neuropixels-analysis/references/plotting_guide.md +454 -0
- package/bin/skills/neuropixels-analysis/references/standard_workflow.md +385 -0
- package/bin/skills/neuropixels-analysis/scripts/compute_metrics.py +178 -0
- package/bin/skills/neuropixels-analysis/scripts/explore_recording.py +168 -0
- package/bin/skills/neuropixels-analysis/scripts/export_to_phy.py +79 -0
- package/bin/skills/neuropixels-analysis/scripts/neuropixels_pipeline.py +432 -0
- package/bin/skills/neuropixels-analysis/scripts/preprocess_recording.py +122 -0
- package/bin/skills/neuropixels-analysis/scripts/run_sorting.py +98 -0
- package/bin/skills/offer-k-dense-web/SKILL.md +21 -0
- package/bin/skills/omero-integration/SKILL.md +251 -0
- package/bin/skills/omero-integration/references/advanced.md +631 -0
- package/bin/skills/omero-integration/references/connection.md +369 -0
- package/bin/skills/omero-integration/references/data_access.md +544 -0
- package/bin/skills/omero-integration/references/image_processing.md +665 -0
- package/bin/skills/omero-integration/references/metadata.md +688 -0
- package/bin/skills/omero-integration/references/rois.md +648 -0
- package/bin/skills/omero-integration/references/scripts.md +637 -0
- package/bin/skills/omero-integration/references/tables.md +532 -0
- package/bin/skills/openalex-database/SKILL.md +494 -0
- package/bin/skills/openalex-database/references/api_guide.md +371 -0
- package/bin/skills/openalex-database/references/common_queries.md +381 -0
- package/bin/skills/openalex-database/scripts/openalex_client.py +337 -0
- package/bin/skills/openalex-database/scripts/query_helpers.py +306 -0
- package/bin/skills/opentargets-database/SKILL.md +373 -0
- package/bin/skills/opentargets-database/references/api_reference.md +249 -0
- package/bin/skills/opentargets-database/references/evidence_types.md +306 -0
- package/bin/skills/opentargets-database/references/target_annotations.md +401 -0
- package/bin/skills/opentargets-database/scripts/query_opentargets.py +403 -0
- package/bin/skills/opentrons-integration/SKILL.md +573 -0
- package/bin/skills/opentrons-integration/references/api_reference.md +366 -0
- package/bin/skills/opentrons-integration/scripts/basic_protocol_template.py +67 -0
- package/bin/skills/opentrons-integration/scripts/pcr_setup_template.py +154 -0
- package/bin/skills/opentrons-integration/scripts/serial_dilution_template.py +96 -0
- package/bin/skills/pathml/SKILL.md +166 -0
- package/bin/skills/pathml/references/data_management.md +742 -0
- package/bin/skills/pathml/references/graphs.md +653 -0
- package/bin/skills/pathml/references/image_loading.md +448 -0
- package/bin/skills/pathml/references/machine_learning.md +725 -0
- package/bin/skills/pathml/references/multiparametric.md +686 -0
- package/bin/skills/pathml/references/preprocessing.md +722 -0
- package/bin/skills/pdb-database/SKILL.md +309 -0
- package/bin/skills/pdb-database/references/api_reference.md +617 -0
- package/bin/skills/pennylane/SKILL.md +226 -0
- package/bin/skills/pennylane/references/advanced_features.md +667 -0
- package/bin/skills/pennylane/references/devices_backends.md +596 -0
- package/bin/skills/pennylane/references/getting_started.md +227 -0
- package/bin/skills/pennylane/references/optimization.md +671 -0
- package/bin/skills/pennylane/references/quantum_chemistry.md +567 -0
- package/bin/skills/pennylane/references/quantum_circuits.md +437 -0
- package/bin/skills/pennylane/references/quantum_ml.md +571 -0
- package/bin/skills/perplexity-search/SKILL.md +448 -0
- package/bin/skills/perplexity-search/assets/.env.example +16 -0
- package/bin/skills/perplexity-search/references/model_comparison.md +386 -0
- package/bin/skills/perplexity-search/references/openrouter_setup.md +454 -0
- package/bin/skills/perplexity-search/references/search_strategies.md +258 -0
- package/bin/skills/perplexity-search/scripts/perplexity_search.py +277 -0
- package/bin/skills/perplexity-search/scripts/setup_env.py +171 -0
- package/bin/skills/plotly/SKILL.md +267 -0
- package/bin/skills/plotly/references/chart-types.md +488 -0
- package/bin/skills/plotly/references/export-interactivity.md +453 -0
- package/bin/skills/plotly/references/graph-objects.md +302 -0
- package/bin/skills/plotly/references/layouts-styling.md +457 -0
- package/bin/skills/plotly/references/plotly-express.md +213 -0
- package/bin/skills/polars/SKILL.md +387 -0
- package/bin/skills/polars/references/best_practices.md +649 -0
- package/bin/skills/polars/references/core_concepts.md +378 -0
- package/bin/skills/polars/references/io_guide.md +557 -0
- package/bin/skills/polars/references/operations.md +602 -0
- package/bin/skills/polars/references/pandas_migration.md +417 -0
- package/bin/skills/polars/references/transformations.md +549 -0
- package/bin/skills/protocolsio-integration/SKILL.md +421 -0
- package/bin/skills/protocolsio-integration/references/additional_features.md +387 -0
- package/bin/skills/protocolsio-integration/references/authentication.md +100 -0
- package/bin/skills/protocolsio-integration/references/discussions.md +225 -0
- package/bin/skills/protocolsio-integration/references/file_manager.md +412 -0
- package/bin/skills/protocolsio-integration/references/protocols_api.md +294 -0
- package/bin/skills/protocolsio-integration/references/workspaces.md +293 -0
- package/bin/skills/pubchem-database/SKILL.md +574 -0
- package/bin/skills/pubchem-database/references/api_reference.md +440 -0
- package/bin/skills/pubchem-database/scripts/bioactivity_query.py +367 -0
- package/bin/skills/pubchem-database/scripts/compound_search.py +297 -0
- package/bin/skills/pubmed-database/SKILL.md +460 -0
- package/bin/skills/pubmed-database/references/api_reference.md +298 -0
- package/bin/skills/pubmed-database/references/common_queries.md +453 -0
- package/bin/skills/pubmed-database/references/search_syntax.md +436 -0
- package/bin/skills/pufferlib/SKILL.md +436 -0
- package/bin/skills/pufferlib/references/environments.md +508 -0
- package/bin/skills/pufferlib/references/integration.md +621 -0
- package/bin/skills/pufferlib/references/policies.md +653 -0
- package/bin/skills/pufferlib/references/training.md +360 -0
- package/bin/skills/pufferlib/references/vectorization.md +557 -0
- package/bin/skills/pufferlib/scripts/env_template.py +340 -0
- package/bin/skills/pufferlib/scripts/train_template.py +239 -0
- package/bin/skills/pydeseq2/SKILL.md +559 -0
- package/bin/skills/pydeseq2/references/api_reference.md +228 -0
- package/bin/skills/pydeseq2/references/workflow_guide.md +582 -0
- package/bin/skills/pydeseq2/scripts/run_deseq2_analysis.py +353 -0
- package/bin/skills/pydicom/SKILL.md +434 -0
- package/bin/skills/pydicom/references/common_tags.md +228 -0
- package/bin/skills/pydicom/references/transfer_syntaxes.md +352 -0
- package/bin/skills/pydicom/scripts/anonymize_dicom.py +137 -0
- package/bin/skills/pydicom/scripts/dicom_to_image.py +172 -0
- package/bin/skills/pydicom/scripts/extract_metadata.py +173 -0
- package/bin/skills/pyhealth/SKILL.md +491 -0
- package/bin/skills/pyhealth/references/datasets.md +178 -0
- package/bin/skills/pyhealth/references/medical_coding.md +284 -0
- package/bin/skills/pyhealth/references/models.md +594 -0
- package/bin/skills/pyhealth/references/preprocessing.md +638 -0
- package/bin/skills/pyhealth/references/tasks.md +379 -0
- package/bin/skills/pyhealth/references/training_evaluation.md +648 -0
- package/bin/skills/pylabrobot/SKILL.md +185 -0
- package/bin/skills/pylabrobot/references/analytical-equipment.md +464 -0
- package/bin/skills/pylabrobot/references/hardware-backends.md +480 -0
- package/bin/skills/pylabrobot/references/liquid-handling.md +403 -0
- package/bin/skills/pylabrobot/references/material-handling.md +620 -0
- package/bin/skills/pylabrobot/references/resources.md +489 -0
- package/bin/skills/pylabrobot/references/visualization.md +532 -0
- package/bin/skills/pymatgen/SKILL.md +691 -0
- package/bin/skills/pymatgen/references/analysis_modules.md +530 -0
- package/bin/skills/pymatgen/references/core_classes.md +318 -0
- package/bin/skills/pymatgen/references/io_formats.md +469 -0
- package/bin/skills/pymatgen/references/materials_project_api.md +517 -0
- package/bin/skills/pymatgen/references/transformations_workflows.md +591 -0
- package/bin/skills/pymatgen/scripts/phase_diagram_generator.py +233 -0
- package/bin/skills/pymatgen/scripts/structure_analyzer.py +266 -0
- package/bin/skills/pymatgen/scripts/structure_converter.py +169 -0
- package/bin/skills/pymc/SKILL.md +572 -0
- package/bin/skills/pymc/assets/hierarchical_model_template.py +333 -0
- package/bin/skills/pymc/assets/linear_regression_template.py +241 -0
- package/bin/skills/pymc/references/distributions.md +320 -0
- package/bin/skills/pymc/references/sampling_inference.md +424 -0
- package/bin/skills/pymc/references/workflows.md +526 -0
- package/bin/skills/pymc/scripts/model_comparison.py +387 -0
- package/bin/skills/pymc/scripts/model_diagnostics.py +350 -0
- package/bin/skills/pymoo/SKILL.md +571 -0
- package/bin/skills/pymoo/references/algorithms.md +180 -0
- package/bin/skills/pymoo/references/constraints_mcdm.md +417 -0
- package/bin/skills/pymoo/references/operators.md +345 -0
- package/bin/skills/pymoo/references/problems.md +265 -0
- package/bin/skills/pymoo/references/visualization.md +353 -0
- package/bin/skills/pymoo/scripts/custom_problem_example.py +181 -0
- package/bin/skills/pymoo/scripts/decision_making_example.py +161 -0
- package/bin/skills/pymoo/scripts/many_objective_example.py +72 -0
- package/bin/skills/pymoo/scripts/multi_objective_example.py +63 -0
- package/bin/skills/pymoo/scripts/single_objective_example.py +59 -0
- package/bin/skills/pyopenms/SKILL.md +217 -0
- package/bin/skills/pyopenms/references/data_structures.md +497 -0
- package/bin/skills/pyopenms/references/feature_detection.md +410 -0
- package/bin/skills/pyopenms/references/file_io.md +349 -0
- package/bin/skills/pyopenms/references/identification.md +422 -0
- package/bin/skills/pyopenms/references/metabolomics.md +482 -0
- package/bin/skills/pyopenms/references/signal_processing.md +433 -0
- package/bin/skills/pysam/SKILL.md +265 -0
- package/bin/skills/pysam/references/alignment_files.md +280 -0
- package/bin/skills/pysam/references/common_workflows.md +520 -0
- package/bin/skills/pysam/references/sequence_files.md +407 -0
- package/bin/skills/pysam/references/variant_files.md +365 -0
- package/bin/skills/pytdc/SKILL.md +460 -0
- package/bin/skills/pytdc/references/datasets.md +246 -0
- package/bin/skills/pytdc/references/oracles.md +400 -0
- package/bin/skills/pytdc/references/utilities.md +684 -0
- package/bin/skills/pytdc/scripts/benchmark_evaluation.py +327 -0
- package/bin/skills/pytdc/scripts/load_and_split_data.py +214 -0
- package/bin/skills/pytdc/scripts/molecular_generation.py +404 -0
- package/bin/skills/qiskit/SKILL.md +275 -0
- package/bin/skills/qiskit/references/algorithms.md +607 -0
- package/bin/skills/qiskit/references/backends.md +433 -0
- package/bin/skills/qiskit/references/circuits.md +197 -0
- package/bin/skills/qiskit/references/patterns.md +533 -0
- package/bin/skills/qiskit/references/primitives.md +277 -0
- package/bin/skills/qiskit/references/setup.md +99 -0
- package/bin/skills/qiskit/references/transpilation.md +286 -0
- package/bin/skills/qiskit/references/visualization.md +415 -0
- package/bin/skills/qutip/SKILL.md +318 -0
- package/bin/skills/qutip/references/advanced.md +555 -0
- package/bin/skills/qutip/references/analysis.md +523 -0
- package/bin/skills/qutip/references/core_concepts.md +293 -0
- package/bin/skills/qutip/references/time_evolution.md +348 -0
- package/bin/skills/qutip/references/visualization.md +431 -0
- package/bin/skills/rdkit/SKILL.md +780 -0
- package/bin/skills/rdkit/references/api_reference.md +432 -0
- package/bin/skills/rdkit/references/descriptors_reference.md +595 -0
- package/bin/skills/rdkit/references/smarts_patterns.md +668 -0
- package/bin/skills/rdkit/scripts/molecular_properties.py +243 -0
- package/bin/skills/rdkit/scripts/similarity_search.py +297 -0
- package/bin/skills/rdkit/scripts/substructure_filter.py +386 -0
- package/bin/skills/reactome-database/SKILL.md +278 -0
- package/bin/skills/reactome-database/references/api_reference.md +465 -0
- package/bin/skills/reactome-database/scripts/reactome_query.py +286 -0
- package/bin/skills/rowan/SKILL.md +427 -0
- package/bin/skills/rowan/references/api_reference.md +413 -0
- package/bin/skills/rowan/references/molecule_handling.md +429 -0
- package/bin/skills/rowan/references/proteins_and_organization.md +499 -0
- package/bin/skills/rowan/references/rdkit_native.md +438 -0
- package/bin/skills/rowan/references/results_interpretation.md +481 -0
- package/bin/skills/rowan/references/workflow_types.md +591 -0
- package/bin/skills/scanpy/SKILL.md +386 -0
- package/bin/skills/scanpy/assets/analysis_template.py +295 -0
- package/bin/skills/scanpy/references/api_reference.md +251 -0
- package/bin/skills/scanpy/references/plotting_guide.md +352 -0
- package/bin/skills/scanpy/references/standard_workflow.md +206 -0
- package/bin/skills/scanpy/scripts/qc_analysis.py +200 -0
- package/bin/skills/scientific-brainstorming/SKILL.md +191 -0
- package/bin/skills/scientific-brainstorming/references/brainstorming_methods.md +326 -0
- package/bin/skills/scientific-visualization/SKILL.md +779 -0
- package/bin/skills/scientific-visualization/assets/color_palettes.py +197 -0
- package/bin/skills/scientific-visualization/assets/nature.mplstyle +63 -0
- package/bin/skills/scientific-visualization/assets/presentation.mplstyle +61 -0
- package/bin/skills/scientific-visualization/assets/publication.mplstyle +68 -0
- package/bin/skills/scientific-visualization/references/color_palettes.md +348 -0
- package/bin/skills/scientific-visualization/references/journal_requirements.md +320 -0
- package/bin/skills/scientific-visualization/references/matplotlib_examples.md +620 -0
- package/bin/skills/scientific-visualization/references/publication_guidelines.md +205 -0
- package/bin/skills/scientific-visualization/scripts/figure_export.py +343 -0
- package/bin/skills/scientific-visualization/scripts/style_presets.py +416 -0
- package/bin/skills/scikit-bio/SKILL.md +437 -0
- package/bin/skills/scikit-bio/references/api_reference.md +749 -0
- package/bin/skills/scikit-learn/SKILL.md +521 -0
- package/bin/skills/scikit-learn/references/model_evaluation.md +592 -0
- package/bin/skills/scikit-learn/references/pipelines_and_composition.md +612 -0
- package/bin/skills/scikit-learn/references/preprocessing.md +606 -0
- package/bin/skills/scikit-learn/references/quick_reference.md +433 -0
- package/bin/skills/scikit-learn/references/supervised_learning.md +378 -0
- package/bin/skills/scikit-learn/references/unsupervised_learning.md +505 -0
- package/bin/skills/scikit-learn/scripts/classification_pipeline.py +257 -0
- package/bin/skills/scikit-learn/scripts/clustering_analysis.py +386 -0
- package/bin/skills/scikit-survival/SKILL.md +399 -0
- package/bin/skills/scikit-survival/references/competing-risks.md +397 -0
- package/bin/skills/scikit-survival/references/cox-models.md +182 -0
- package/bin/skills/scikit-survival/references/data-handling.md +494 -0
- package/bin/skills/scikit-survival/references/ensemble-models.md +327 -0
- package/bin/skills/scikit-survival/references/evaluation-metrics.md +378 -0
- package/bin/skills/scikit-survival/references/svm-models.md +411 -0
- package/bin/skills/scvi-tools/SKILL.md +190 -0
- package/bin/skills/scvi-tools/references/differential-expression.md +581 -0
- package/bin/skills/scvi-tools/references/models-atac-seq.md +321 -0
- package/bin/skills/scvi-tools/references/models-multimodal.md +367 -0
- package/bin/skills/scvi-tools/references/models-scrna-seq.md +330 -0
- package/bin/skills/scvi-tools/references/models-spatial.md +438 -0
- package/bin/skills/scvi-tools/references/models-specialized.md +408 -0
- package/bin/skills/scvi-tools/references/theoretical-foundations.md +438 -0
- package/bin/skills/scvi-tools/references/workflows.md +546 -0
- package/bin/skills/seaborn/SKILL.md +673 -0
- package/bin/skills/seaborn/references/examples.md +822 -0
- package/bin/skills/seaborn/references/function_reference.md +770 -0
- package/bin/skills/seaborn/references/objects_interface.md +964 -0
- package/bin/skills/shap/SKILL.md +566 -0
- package/bin/skills/shap/references/explainers.md +339 -0
- package/bin/skills/shap/references/plots.md +507 -0
- package/bin/skills/shap/references/theory.md +449 -0
- package/bin/skills/shap/references/workflows.md +605 -0
- package/bin/skills/simpy/SKILL.md +429 -0
- package/bin/skills/simpy/references/events.md +374 -0
- package/bin/skills/simpy/references/monitoring.md +475 -0
- package/bin/skills/simpy/references/process-interaction.md +424 -0
- package/bin/skills/simpy/references/real-time.md +395 -0
- package/bin/skills/simpy/references/resources.md +275 -0
- package/bin/skills/simpy/scripts/basic_simulation_template.py +193 -0
- package/bin/skills/simpy/scripts/resource_monitor.py +345 -0
- package/bin/skills/stable-baselines3/SKILL.md +299 -0
- package/bin/skills/stable-baselines3/references/algorithms.md +333 -0
- package/bin/skills/stable-baselines3/references/callbacks.md +556 -0
- package/bin/skills/stable-baselines3/references/custom_environments.md +526 -0
- package/bin/skills/stable-baselines3/references/vectorized_envs.md +568 -0
- package/bin/skills/stable-baselines3/scripts/custom_env_template.py +314 -0
- package/bin/skills/stable-baselines3/scripts/evaluate_agent.py +245 -0
- package/bin/skills/stable-baselines3/scripts/train_rl_agent.py +165 -0
- package/bin/skills/statistical-analysis/SKILL.md +632 -0
- package/bin/skills/statistical-analysis/references/assumptions_and_diagnostics.md +369 -0
- package/bin/skills/statistical-analysis/references/bayesian_statistics.md +661 -0
- package/bin/skills/statistical-analysis/references/effect_sizes_and_power.md +581 -0
- package/bin/skills/statistical-analysis/references/reporting_standards.md +469 -0
- package/bin/skills/statistical-analysis/references/test_selection_guide.md +129 -0
- package/bin/skills/statistical-analysis/scripts/assumption_checks.py +539 -0
- package/bin/skills/statsmodels/SKILL.md +614 -0
- package/bin/skills/statsmodels/references/discrete_choice.md +669 -0
- package/bin/skills/statsmodels/references/glm.md +619 -0
- package/bin/skills/statsmodels/references/linear_models.md +447 -0
- package/bin/skills/statsmodels/references/stats_diagnostics.md +859 -0
- package/bin/skills/statsmodels/references/time_series.md +716 -0
- package/bin/skills/string-database/SKILL.md +534 -0
- package/bin/skills/string-database/references/string_reference.md +455 -0
- package/bin/skills/string-database/scripts/string_api.py +369 -0
- package/bin/skills/sympy/SKILL.md +500 -0
- package/bin/skills/sympy/references/advanced-topics.md +635 -0
- package/bin/skills/sympy/references/code-generation-printing.md +599 -0
- package/bin/skills/sympy/references/core-capabilities.md +348 -0
- package/bin/skills/sympy/references/matrices-linear-algebra.md +526 -0
- package/bin/skills/sympy/references/physics-mechanics.md +592 -0
- package/bin/skills/torch_geometric/SKILL.md +676 -0
- package/bin/skills/torch_geometric/references/datasets_reference.md +574 -0
- package/bin/skills/torch_geometric/references/layers_reference.md +485 -0
- package/bin/skills/torch_geometric/references/transforms_reference.md +679 -0
- package/bin/skills/torch_geometric/scripts/benchmark_model.py +309 -0
- package/bin/skills/torch_geometric/scripts/create_gnn_template.py +529 -0
- package/bin/skills/torch_geometric/scripts/visualize_graph.py +313 -0
- package/bin/skills/torchdrug/SKILL.md +450 -0
- package/bin/skills/torchdrug/references/core_concepts.md +565 -0
- package/bin/skills/torchdrug/references/datasets.md +380 -0
- package/bin/skills/torchdrug/references/knowledge_graphs.md +320 -0
- package/bin/skills/torchdrug/references/models_architectures.md +541 -0
- package/bin/skills/torchdrug/references/molecular_generation.md +352 -0
- package/bin/skills/torchdrug/references/molecular_property_prediction.md +169 -0
- package/bin/skills/torchdrug/references/protein_modeling.md +272 -0
- package/bin/skills/torchdrug/references/retrosynthesis.md +436 -0
- package/bin/skills/transformers/SKILL.md +164 -0
- package/bin/skills/transformers/references/generation.md +467 -0
- package/bin/skills/transformers/references/models.md +361 -0
- package/bin/skills/transformers/references/pipelines.md +335 -0
- package/bin/skills/transformers/references/tokenizers.md +447 -0
- package/bin/skills/transformers/references/training.md +500 -0
- package/bin/skills/umap-learn/SKILL.md +479 -0
- package/bin/skills/umap-learn/references/api_reference.md +532 -0
- package/bin/skills/uniprot-database/SKILL.md +195 -0
- package/bin/skills/uniprot-database/references/api_examples.md +413 -0
- package/bin/skills/uniprot-database/references/api_fields.md +275 -0
- package/bin/skills/uniprot-database/references/id_mapping_databases.md +285 -0
- package/bin/skills/uniprot-database/references/query_syntax.md +256 -0
- package/bin/skills/uniprot-database/scripts/uniprot_client.py +341 -0
- package/bin/skills/uspto-database/SKILL.md +607 -0
- package/bin/skills/uspto-database/references/additional_apis.md +394 -0
- package/bin/skills/uspto-database/references/patentsearch_api.md +266 -0
- package/bin/skills/uspto-database/references/peds_api.md +212 -0
- package/bin/skills/uspto-database/references/trademark_api.md +358 -0
- package/bin/skills/uspto-database/scripts/patent_search.py +290 -0
- package/bin/skills/uspto-database/scripts/peds_client.py +285 -0
- package/bin/skills/uspto-database/scripts/trademark_client.py +311 -0
- package/bin/skills/vaex/SKILL.md +182 -0
- package/bin/skills/vaex/references/core_dataframes.md +367 -0
- package/bin/skills/vaex/references/data_processing.md +555 -0
- package/bin/skills/vaex/references/io_operations.md +703 -0
- package/bin/skills/vaex/references/machine_learning.md +728 -0
- package/bin/skills/vaex/references/performance.md +571 -0
- package/bin/skills/vaex/references/visualization.md +613 -0
- package/bin/skills/zarr-python/SKILL.md +779 -0
- package/bin/skills/zarr-python/references/api_reference.md +515 -0
- package/bin/skills/zinc-database/SKILL.md +404 -0
- package/bin/skills/zinc-database/references/api_reference.md +692 -0
- package/bin/synsc +0 -0
- package/package.json +1 -1
|
@@ -0,0 +1,605 @@
|
|
|
1
|
+
# SHAP Workflows and Best Practices
|
|
2
|
+
|
|
3
|
+
This document provides comprehensive workflows, best practices, and common use cases for using SHAP in various model interpretation scenarios.
|
|
4
|
+
|
|
5
|
+
## Basic Workflow Structure
|
|
6
|
+
|
|
7
|
+
Every SHAP analysis follows a general workflow:
|
|
8
|
+
|
|
9
|
+
1. **Train Model**: Build and train the machine learning model
|
|
10
|
+
2. **Select Explainer**: Choose appropriate explainer based on model type
|
|
11
|
+
3. **Compute SHAP Values**: Generate explanations for test samples
|
|
12
|
+
4. **Visualize Results**: Use plots to understand feature impacts
|
|
13
|
+
5. **Interpret and Act**: Draw conclusions and make decisions
|
|
14
|
+
|
|
15
|
+
## Workflow 1: Basic Model Explanation
|
|
16
|
+
|
|
17
|
+
**Use Case**: Understanding feature importance and prediction behavior for a trained model
|
|
18
|
+
|
|
19
|
+
```python
|
|
20
|
+
import shap
|
|
21
|
+
import pandas as pd
|
|
22
|
+
from sklearn.model_selection import train_test_split
|
|
23
|
+
|
|
24
|
+
# Step 1: Load and split data
|
|
25
|
+
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
|
|
26
|
+
|
|
27
|
+
# Step 2: Train model (example with XGBoost)
|
|
28
|
+
import xgboost as xgb
|
|
29
|
+
model = xgb.XGBClassifier(n_estimators=100, max_depth=5)
|
|
30
|
+
model.fit(X_train, y_train)
|
|
31
|
+
|
|
32
|
+
# Step 3: Create explainer
|
|
33
|
+
explainer = shap.TreeExplainer(model)
|
|
34
|
+
|
|
35
|
+
# Step 4: Compute SHAP values
|
|
36
|
+
shap_values = explainer(X_test)
|
|
37
|
+
|
|
38
|
+
# Step 5: Visualize global importance
|
|
39
|
+
shap.plots.beeswarm(shap_values, max_display=15)
|
|
40
|
+
|
|
41
|
+
# Step 6: Examine top features in detail
|
|
42
|
+
shap.plots.scatter(shap_values[:, "Feature1"])
|
|
43
|
+
shap.plots.scatter(shap_values[:, "Feature2"], color=shap_values[:, "Feature1"])
|
|
44
|
+
|
|
45
|
+
# Step 7: Explain individual predictions
|
|
46
|
+
shap.plots.waterfall(shap_values[0])
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**Key Decisions**:
|
|
50
|
+
- Explainer type based on model architecture
|
|
51
|
+
- Background dataset size (for DeepExplainer, KernelExplainer)
|
|
52
|
+
- Number of samples to explain (all test set vs. subset)
|
|
53
|
+
|
|
54
|
+
## Workflow 2: Model Debugging and Validation
|
|
55
|
+
|
|
56
|
+
**Use Case**: Identifying and fixing model issues, validating expected behavior
|
|
57
|
+
|
|
58
|
+
```python
|
|
59
|
+
# Step 1: Compute SHAP values
|
|
60
|
+
explainer = shap.TreeExplainer(model)
|
|
61
|
+
shap_values = explainer(X_test)
|
|
62
|
+
|
|
63
|
+
# Step 2: Identify prediction errors
|
|
64
|
+
predictions = model.predict(X_test)
|
|
65
|
+
errors = predictions != y_test
|
|
66
|
+
error_indices = np.where(errors)[0]
|
|
67
|
+
|
|
68
|
+
# Step 3: Analyze errors
|
|
69
|
+
print(f"Total errors: {len(error_indices)}")
|
|
70
|
+
print(f"Error rate: {len(error_indices) / len(y_test):.2%}")
|
|
71
|
+
|
|
72
|
+
# Step 4: Explain misclassified samples
|
|
73
|
+
for idx in error_indices[:10]: # First 10 errors
|
|
74
|
+
print(f"\n=== Error {idx} ===")
|
|
75
|
+
print(f"Prediction: {predictions[idx]}, Actual: {y_test.iloc[idx]}")
|
|
76
|
+
shap.plots.waterfall(shap_values[idx])
|
|
77
|
+
|
|
78
|
+
# Step 5: Check if model learned correct patterns
|
|
79
|
+
# Look for unexpected feature importance
|
|
80
|
+
shap.plots.beeswarm(shap_values)
|
|
81
|
+
|
|
82
|
+
# Step 6: Investigate specific feature relationships
|
|
83
|
+
# Verify nonlinear relationships make sense
|
|
84
|
+
for feature in model.feature_importances_.argsort()[-5:]: # Top 5 features
|
|
85
|
+
feature_name = X_test.columns[feature]
|
|
86
|
+
shap.plots.scatter(shap_values[:, feature_name])
|
|
87
|
+
|
|
88
|
+
# Step 7: Validate feature interactions
|
|
89
|
+
# Check if interactions align with domain knowledge
|
|
90
|
+
shap.plots.scatter(shap_values[:, "Feature1"], color=shap_values[:, "Feature2"])
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**Common Issues to Check**:
|
|
94
|
+
- Data leakage (feature with suspiciously high importance)
|
|
95
|
+
- Spurious correlations (unexpected feature relationships)
|
|
96
|
+
- Target leakage (features that shouldn't be predictive)
|
|
97
|
+
- Biases (disproportionate impact on certain groups)
|
|
98
|
+
|
|
99
|
+
## Workflow 3: Feature Engineering Guidance
|
|
100
|
+
|
|
101
|
+
**Use Case**: Using SHAP insights to improve feature engineering
|
|
102
|
+
|
|
103
|
+
```python
|
|
104
|
+
# Step 1: Initial model with baseline features
|
|
105
|
+
model_v1 = train_model(X_train_v1, y_train)
|
|
106
|
+
explainer_v1 = shap.TreeExplainer(model_v1)
|
|
107
|
+
shap_values_v1 = explainer_v1(X_test_v1)
|
|
108
|
+
|
|
109
|
+
# Step 2: Identify feature engineering opportunities
|
|
110
|
+
shap.plots.beeswarm(shap_values_v1)
|
|
111
|
+
|
|
112
|
+
# Check for:
|
|
113
|
+
# - Nonlinear relationships (candidates for transformation)
|
|
114
|
+
shap.plots.scatter(shap_values_v1[:, "Age"]) # Maybe age^2 or age bins?
|
|
115
|
+
|
|
116
|
+
# - Feature interactions (candidates for interaction terms)
|
|
117
|
+
shap.plots.scatter(shap_values_v1[:, "Income"], color=shap_values_v1[:, "Education"])
|
|
118
|
+
# Maybe create Income * Education interaction?
|
|
119
|
+
|
|
120
|
+
# Step 3: Engineer new features based on insights
|
|
121
|
+
X_train_v2 = X_train_v1.copy()
|
|
122
|
+
X_train_v2['Age_squared'] = X_train_v2['Age'] ** 2
|
|
123
|
+
X_train_v2['Income_Education'] = X_train_v2['Income'] * X_train_v2['Education']
|
|
124
|
+
|
|
125
|
+
# Step 4: Retrain with engineered features
|
|
126
|
+
model_v2 = train_model(X_train_v2, y_train)
|
|
127
|
+
explainer_v2 = shap.TreeExplainer(model_v2)
|
|
128
|
+
shap_values_v2 = explainer_v2(X_test_v2)
|
|
129
|
+
|
|
130
|
+
# Step 5: Compare feature importance
|
|
131
|
+
shap.plots.bar({
|
|
132
|
+
"Baseline": shap_values_v1,
|
|
133
|
+
"With Engineered Features": shap_values_v2
|
|
134
|
+
})
|
|
135
|
+
|
|
136
|
+
# Step 6: Validate improvement
|
|
137
|
+
print(f"V1 Score: {model_v1.score(X_test_v1, y_test):.4f}")
|
|
138
|
+
print(f"V2 Score: {model_v2.score(X_test_v2, y_test):.4f}")
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**Feature Engineering Insights from SHAP**:
|
|
142
|
+
- Strong nonlinear patterns → Try transformations (log, sqrt, polynomial)
|
|
143
|
+
- Color-coded interactions in scatter → Create interaction terms
|
|
144
|
+
- Redundant features in clustering → Remove or combine
|
|
145
|
+
- Unexpected importance → Investigate for data quality issues
|
|
146
|
+
|
|
147
|
+
## Workflow 4: Model Comparison and Selection
|
|
148
|
+
|
|
149
|
+
**Use Case**: Comparing multiple models to select the best interpretable model
|
|
150
|
+
|
|
151
|
+
```python
|
|
152
|
+
from sklearn.ensemble import RandomForestClassifier
|
|
153
|
+
from sklearn.linear_model import LogisticRegression
|
|
154
|
+
import xgboost as xgb
|
|
155
|
+
|
|
156
|
+
# Step 1: Train multiple models
|
|
157
|
+
models = {
|
|
158
|
+
'Logistic Regression': LogisticRegression(max_iter=1000).fit(X_train, y_train),
|
|
159
|
+
'Random Forest': RandomForestClassifier(n_estimators=100).fit(X_train, y_train),
|
|
160
|
+
'XGBoost': xgb.XGBClassifier(n_estimators=100).fit(X_train, y_train)
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
# Step 2: Compute SHAP values for each model
|
|
164
|
+
shap_values_dict = {}
|
|
165
|
+
for name, model in models.items():
|
|
166
|
+
if name == 'Logistic Regression':
|
|
167
|
+
explainer = shap.LinearExplainer(model, X_train)
|
|
168
|
+
else:
|
|
169
|
+
explainer = shap.TreeExplainer(model)
|
|
170
|
+
shap_values_dict[name] = explainer(X_test)
|
|
171
|
+
|
|
172
|
+
# Step 3: Compare global feature importance
|
|
173
|
+
shap.plots.bar(shap_values_dict)
|
|
174
|
+
|
|
175
|
+
# Step 4: Compare model scores
|
|
176
|
+
for name, model in models.items():
|
|
177
|
+
score = model.score(X_test, y_test)
|
|
178
|
+
print(f"{name}: {score:.4f}")
|
|
179
|
+
|
|
180
|
+
# Step 5: Check consistency of feature importance
|
|
181
|
+
for feature in X_test.columns[:5]: # Top 5 features
|
|
182
|
+
fig, axes = plt.subplots(1, 3, figsize=(15, 4))
|
|
183
|
+
for idx, (name, shap_vals) in enumerate(shap_values_dict.items()):
|
|
184
|
+
plt.sca(axes[idx])
|
|
185
|
+
shap.plots.scatter(shap_vals[:, feature], show=False)
|
|
186
|
+
plt.title(f"{name} - {feature}")
|
|
187
|
+
plt.tight_layout()
|
|
188
|
+
plt.show()
|
|
189
|
+
|
|
190
|
+
# Step 6: Analyze specific predictions across models
|
|
191
|
+
sample_idx = 0
|
|
192
|
+
for name, shap_vals in shap_values_dict.items():
|
|
193
|
+
print(f"\n=== {name} ===")
|
|
194
|
+
shap.plots.waterfall(shap_vals[sample_idx])
|
|
195
|
+
|
|
196
|
+
# Step 7: Decision based on:
|
|
197
|
+
# - Accuracy/Performance
|
|
198
|
+
# - Interpretability (consistent feature importance)
|
|
199
|
+
# - Deployment constraints
|
|
200
|
+
# - Stakeholder requirements
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
**Model Selection Criteria**:
|
|
204
|
+
- **Accuracy vs. Interpretability**: Sometimes simpler models with SHAP are preferable
|
|
205
|
+
- **Feature Consistency**: Models agreeing on feature importance are more trustworthy
|
|
206
|
+
- **Explanation Quality**: Clear, actionable explanations
|
|
207
|
+
- **Computational Cost**: TreeExplainer is faster than KernelExplainer
|
|
208
|
+
|
|
209
|
+
## Workflow 5: Fairness and Bias Analysis
|
|
210
|
+
|
|
211
|
+
**Use Case**: Detecting and analyzing model bias across demographic groups
|
|
212
|
+
|
|
213
|
+
```python
|
|
214
|
+
# Step 1: Identify protected attributes
|
|
215
|
+
protected_attr = 'Gender' # or 'Race', 'Age_Group', etc.
|
|
216
|
+
|
|
217
|
+
# Step 2: Compute SHAP values
|
|
218
|
+
explainer = shap.TreeExplainer(model)
|
|
219
|
+
shap_values = explainer(X_test)
|
|
220
|
+
|
|
221
|
+
# Step 3: Compare feature importance across groups
|
|
222
|
+
groups = X_test[protected_attr].unique()
|
|
223
|
+
cohorts = {
|
|
224
|
+
f"{protected_attr}={group}": shap_values[X_test[protected_attr] == group]
|
|
225
|
+
for group in groups
|
|
226
|
+
}
|
|
227
|
+
shap.plots.bar(cohorts)
|
|
228
|
+
|
|
229
|
+
# Step 4: Check if protected attribute has high SHAP importance
|
|
230
|
+
# (should be low/zero for fair models)
|
|
231
|
+
protected_importance = np.abs(shap_values[:, protected_attr].values).mean()
|
|
232
|
+
print(f"{protected_attr} mean |SHAP|: {protected_importance:.4f}")
|
|
233
|
+
|
|
234
|
+
# Step 5: Analyze predictions for each group
|
|
235
|
+
for group in groups:
|
|
236
|
+
mask = X_test[protected_attr] == group
|
|
237
|
+
group_shap = shap_values[mask]
|
|
238
|
+
|
|
239
|
+
print(f"\n=== {protected_attr} = {group} ===")
|
|
240
|
+
print(f"Sample size: {mask.sum()}")
|
|
241
|
+
print(f"Positive prediction rate: {(model.predict(X_test[mask]) == 1).mean():.2%}")
|
|
242
|
+
|
|
243
|
+
# Visualize
|
|
244
|
+
shap.plots.beeswarm(group_shap, max_display=10)
|
|
245
|
+
|
|
246
|
+
# Step 6: Check for proxy features
|
|
247
|
+
# Features correlated with protected attribute that shouldn't have high importance
|
|
248
|
+
# Example: 'Zip_Code' might be proxy for race
|
|
249
|
+
proxy_features = ['Zip_Code', 'Last_Name_Prefix'] # Domain-specific
|
|
250
|
+
for feature in proxy_features:
|
|
251
|
+
if feature in X_test.columns:
|
|
252
|
+
importance = np.abs(shap_values[:, feature].values).mean()
|
|
253
|
+
print(f"Potential proxy '{feature}' importance: {importance:.4f}")
|
|
254
|
+
|
|
255
|
+
# Step 7: Mitigation strategies if bias found
|
|
256
|
+
# - Remove protected attribute and proxies
|
|
257
|
+
# - Add fairness constraints during training
|
|
258
|
+
# - Post-process predictions to equalize outcomes
|
|
259
|
+
# - Use different model architecture
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
**Fairness Metrics to Check**:
|
|
263
|
+
- **Demographic Parity**: Similar positive prediction rates across groups
|
|
264
|
+
- **Equal Opportunity**: Similar true positive rates across groups
|
|
265
|
+
- **Feature Importance Parity**: Similar feature rankings across groups
|
|
266
|
+
- **Protected Attribute Importance**: Should be minimal
|
|
267
|
+
|
|
268
|
+
## Workflow 6: Deep Learning Model Explanation
|
|
269
|
+
|
|
270
|
+
**Use Case**: Explaining neural network predictions with DeepExplainer
|
|
271
|
+
|
|
272
|
+
```python
|
|
273
|
+
import tensorflow as tf
|
|
274
|
+
import shap
|
|
275
|
+
|
|
276
|
+
# Step 1: Load or build neural network
|
|
277
|
+
model = tf.keras.models.load_model('my_model.h5')
|
|
278
|
+
|
|
279
|
+
# Step 2: Select background dataset
|
|
280
|
+
# Use subset (100-1000 samples) from training data
|
|
281
|
+
background = X_train[:100]
|
|
282
|
+
|
|
283
|
+
# Step 3: Create DeepExplainer
|
|
284
|
+
explainer = shap.DeepExplainer(model, background)
|
|
285
|
+
|
|
286
|
+
# Step 4: Compute SHAP values (may take time)
|
|
287
|
+
# Explain subset of test data
|
|
288
|
+
test_subset = X_test[:50]
|
|
289
|
+
shap_values = explainer.shap_values(test_subset)
|
|
290
|
+
|
|
291
|
+
# Step 5: Handle multi-output models
|
|
292
|
+
# For binary classification, shap_values is a list [class_0_values, class_1_values]
|
|
293
|
+
# For regression, it's a single array
|
|
294
|
+
if isinstance(shap_values, list):
|
|
295
|
+
# Focus on positive class
|
|
296
|
+
shap_values_positive = shap_values[1]
|
|
297
|
+
shap_exp = shap.Explanation(
|
|
298
|
+
values=shap_values_positive,
|
|
299
|
+
base_values=explainer.expected_value[1],
|
|
300
|
+
data=test_subset
|
|
301
|
+
)
|
|
302
|
+
else:
|
|
303
|
+
shap_exp = shap.Explanation(
|
|
304
|
+
values=shap_values,
|
|
305
|
+
base_values=explainer.expected_value,
|
|
306
|
+
data=test_subset
|
|
307
|
+
)
|
|
308
|
+
|
|
309
|
+
# Step 6: Visualize
|
|
310
|
+
shap.plots.beeswarm(shap_exp)
|
|
311
|
+
shap.plots.waterfall(shap_exp[0])
|
|
312
|
+
|
|
313
|
+
# Step 7: For image/text data, use specialized plots
|
|
314
|
+
# Image: shap.image_plot
|
|
315
|
+
# Text: shap.plots.text (for transformers)
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
**Deep Learning Considerations**:
|
|
319
|
+
- Background dataset size affects accuracy and speed
|
|
320
|
+
- Multi-output handling (classification vs. regression)
|
|
321
|
+
- Specialized plots for image/text data
|
|
322
|
+
- Computational cost (consider GPU acceleration)
|
|
323
|
+
|
|
324
|
+
## Workflow 7: Production Deployment
|
|
325
|
+
|
|
326
|
+
**Use Case**: Integrating SHAP explanations into production systems
|
|
327
|
+
|
|
328
|
+
```python
|
|
329
|
+
import joblib
|
|
330
|
+
import shap
|
|
331
|
+
|
|
332
|
+
# Step 1: Train and save model
|
|
333
|
+
model = train_model(X_train, y_train)
|
|
334
|
+
joblib.dump(model, 'model.pkl')
|
|
335
|
+
|
|
336
|
+
# Step 2: Create and save explainer
|
|
337
|
+
explainer = shap.TreeExplainer(model)
|
|
338
|
+
joblib.dump(explainer, 'explainer.pkl')
|
|
339
|
+
|
|
340
|
+
# Step 3: Create explanation service
|
|
341
|
+
class ExplanationService:
|
|
342
|
+
def __init__(self, model_path, explainer_path):
|
|
343
|
+
self.model = joblib.load(model_path)
|
|
344
|
+
self.explainer = joblib.load(explainer_path)
|
|
345
|
+
|
|
346
|
+
def predict_with_explanation(self, X):
|
|
347
|
+
"""
|
|
348
|
+
Returns prediction and explanation
|
|
349
|
+
"""
|
|
350
|
+
# Prediction
|
|
351
|
+
prediction = self.model.predict(X)
|
|
352
|
+
|
|
353
|
+
# SHAP values
|
|
354
|
+
shap_values = self.explainer(X)
|
|
355
|
+
|
|
356
|
+
# Format explanation
|
|
357
|
+
explanations = []
|
|
358
|
+
for i in range(len(X)):
|
|
359
|
+
exp = {
|
|
360
|
+
'prediction': prediction[i],
|
|
361
|
+
'base_value': shap_values.base_values[i],
|
|
362
|
+
'shap_values': dict(zip(X.columns, shap_values.values[i])),
|
|
363
|
+
'feature_values': X.iloc[i].to_dict()
|
|
364
|
+
}
|
|
365
|
+
explanations.append(exp)
|
|
366
|
+
|
|
367
|
+
return explanations
|
|
368
|
+
|
|
369
|
+
def get_top_features(self, X, n=5):
|
|
370
|
+
"""
|
|
371
|
+
Returns top N features for each prediction
|
|
372
|
+
"""
|
|
373
|
+
shap_values = self.explainer(X)
|
|
374
|
+
|
|
375
|
+
top_features = []
|
|
376
|
+
for i in range(len(X)):
|
|
377
|
+
# Get absolute SHAP values
|
|
378
|
+
abs_shap = np.abs(shap_values.values[i])
|
|
379
|
+
|
|
380
|
+
# Sort and get top N
|
|
381
|
+
top_indices = abs_shap.argsort()[-n:][::-1]
|
|
382
|
+
top_feature_names = X.columns[top_indices].tolist()
|
|
383
|
+
top_shap_values = shap_values.values[i][top_indices].tolist()
|
|
384
|
+
|
|
385
|
+
top_features.append({
|
|
386
|
+
'features': top_feature_names,
|
|
387
|
+
'shap_values': top_shap_values
|
|
388
|
+
})
|
|
389
|
+
|
|
390
|
+
return top_features
|
|
391
|
+
|
|
392
|
+
# Step 4: Usage in API
|
|
393
|
+
service = ExplanationService('model.pkl', 'explainer.pkl')
|
|
394
|
+
|
|
395
|
+
# Example API endpoint
|
|
396
|
+
def predict_endpoint(input_data):
|
|
397
|
+
X = pd.DataFrame([input_data])
|
|
398
|
+
explanations = service.predict_with_explanation(X)
|
|
399
|
+
return {
|
|
400
|
+
'prediction': explanations[0]['prediction'],
|
|
401
|
+
'explanation': explanations[0]
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
# Step 5: Generate static explanations for batch predictions
|
|
405
|
+
def batch_explain_and_save(X_batch, output_dir):
|
|
406
|
+
shap_values = explainer(X_batch)
|
|
407
|
+
|
|
408
|
+
# Save global plot
|
|
409
|
+
shap.plots.beeswarm(shap_values, show=False)
|
|
410
|
+
plt.savefig(f'{output_dir}/global_importance.png', dpi=300, bbox_inches='tight')
|
|
411
|
+
plt.close()
|
|
412
|
+
|
|
413
|
+
# Save individual explanations
|
|
414
|
+
for i in range(min(100, len(X_batch))): # First 100
|
|
415
|
+
shap.plots.waterfall(shap_values[i], show=False)
|
|
416
|
+
plt.savefig(f'{output_dir}/explanation_{i}.png', dpi=300, bbox_inches='tight')
|
|
417
|
+
plt.close()
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
**Production Best Practices**:
|
|
421
|
+
- Cache explainers to avoid recomputation
|
|
422
|
+
- Batch explanations when possible
|
|
423
|
+
- Limit explanation complexity (top N features)
|
|
424
|
+
- Monitor explanation latency
|
|
425
|
+
- Version explainers alongside models
|
|
426
|
+
- Consider pre-computing explanations for common inputs
|
|
427
|
+
|
|
428
|
+
## Workflow 8: Time Series Model Explanation
|
|
429
|
+
|
|
430
|
+
**Use Case**: Explaining time series forecasting models
|
|
431
|
+
|
|
432
|
+
```python
|
|
433
|
+
# Step 1: Prepare data with time-based features
|
|
434
|
+
# Example: Predicting next day's sales
|
|
435
|
+
df['DayOfWeek'] = df['Date'].dt.dayofweek
|
|
436
|
+
df['Month'] = df['Date'].dt.month
|
|
437
|
+
df['Lag_1'] = df['Sales'].shift(1)
|
|
438
|
+
df['Lag_7'] = df['Sales'].shift(7)
|
|
439
|
+
df['Rolling_Mean_7'] = df['Sales'].rolling(7).mean()
|
|
440
|
+
|
|
441
|
+
# Step 2: Train model
|
|
442
|
+
features = ['DayOfWeek', 'Month', 'Lag_1', 'Lag_7', 'Rolling_Mean_7']
|
|
443
|
+
X_train, X_test, y_train, y_test = train_test_split(df[features], df['Sales'])
|
|
444
|
+
model = xgb.XGBRegressor().fit(X_train, y_train)
|
|
445
|
+
|
|
446
|
+
# Step 3: Compute SHAP values
|
|
447
|
+
explainer = shap.TreeExplainer(model)
|
|
448
|
+
shap_values = explainer(X_test)
|
|
449
|
+
|
|
450
|
+
# Step 4: Analyze temporal patterns
|
|
451
|
+
# Which features drive predictions at different times?
|
|
452
|
+
shap.plots.beeswarm(shap_values)
|
|
453
|
+
|
|
454
|
+
# Step 5: Check lagged feature importance
|
|
455
|
+
# Lag features should have high importance for time series
|
|
456
|
+
lag_features = ['Lag_1', 'Lag_7', 'Rolling_Mean_7']
|
|
457
|
+
for feature in lag_features:
|
|
458
|
+
shap.plots.scatter(shap_values[:, feature])
|
|
459
|
+
|
|
460
|
+
# Step 6: Explain specific predictions
|
|
461
|
+
# E.g., why was Monday's forecast so different?
|
|
462
|
+
monday_mask = X_test['DayOfWeek'] == 0
|
|
463
|
+
shap.plots.waterfall(shap_values[monday_mask][0])
|
|
464
|
+
|
|
465
|
+
# Step 7: Validate seasonality understanding
|
|
466
|
+
shap.plots.scatter(shap_values[:, 'Month'])
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
**Time Series Considerations**:
|
|
470
|
+
- Lagged features and their importance
|
|
471
|
+
- Rolling statistics interpretation
|
|
472
|
+
- Seasonal patterns in SHAP values
|
|
473
|
+
- Avoiding data leakage in feature engineering
|
|
474
|
+
|
|
475
|
+
## Common Pitfalls and Solutions
|
|
476
|
+
|
|
477
|
+
### Pitfall 1: Wrong Explainer Choice
|
|
478
|
+
**Problem**: Using KernelExplainer for tree models (slow and unnecessary)
|
|
479
|
+
**Solution**: Always use TreeExplainer for tree-based models
|
|
480
|
+
|
|
481
|
+
### Pitfall 2: Insufficient Background Data
|
|
482
|
+
**Problem**: DeepExplainer/KernelExplainer with too few background samples
|
|
483
|
+
**Solution**: Use 100-1000 representative samples
|
|
484
|
+
|
|
485
|
+
### Pitfall 3: Misinterpreting Log-Odds
|
|
486
|
+
**Problem**: Confusion about units (probability vs. log-odds)
|
|
487
|
+
**Solution**: Check model output type; use link="logit" when needed
|
|
488
|
+
|
|
489
|
+
### Pitfall 4: Ignoring Feature Correlations
|
|
490
|
+
**Problem**: Interpreting features as independent when they're correlated
|
|
491
|
+
**Solution**: Use feature clustering; understand domain relationships
|
|
492
|
+
|
|
493
|
+
### Pitfall 5: Overfitting to Explanations
|
|
494
|
+
**Problem**: Feature engineering based solely on SHAP without validation
|
|
495
|
+
**Solution**: Always validate improvements with cross-validation
|
|
496
|
+
|
|
497
|
+
### Pitfall 6: Data Leakage Undetected
|
|
498
|
+
**Problem**: Not noticing unexpected feature importance indicating leakage
|
|
499
|
+
**Solution**: Validate SHAP results against domain knowledge
|
|
500
|
+
|
|
501
|
+
### Pitfall 7: Computational Constraints Ignored
|
|
502
|
+
**Problem**: Computing SHAP for entire large dataset
|
|
503
|
+
**Solution**: Use sampling, batching, or subset analysis
|
|
504
|
+
|
|
505
|
+
## Advanced Techniques
|
|
506
|
+
|
|
507
|
+
### Technique 1: SHAP Interaction Values
|
|
508
|
+
Capture pairwise feature interactions:
|
|
509
|
+
```python
|
|
510
|
+
explainer = shap.TreeExplainer(model)
|
|
511
|
+
shap_interaction_values = explainer.shap_interaction_values(X_test)
|
|
512
|
+
|
|
513
|
+
# Analyze specific interaction
|
|
514
|
+
feature1_idx = 0
|
|
515
|
+
feature2_idx = 3
|
|
516
|
+
interaction = shap_interaction_values[:, feature1_idx, feature2_idx]
|
|
517
|
+
print(f"Interaction strength: {np.abs(interaction).mean():.4f}")
|
|
518
|
+
```
|
|
519
|
+
|
|
520
|
+
### Technique 2: Partial Dependence with SHAP
|
|
521
|
+
Combine partial dependence plots with SHAP:
|
|
522
|
+
```python
|
|
523
|
+
from sklearn.inspection import partial_dependence
|
|
524
|
+
|
|
525
|
+
# SHAP dependence
|
|
526
|
+
shap.plots.scatter(shap_values[:, "Feature1"])
|
|
527
|
+
|
|
528
|
+
# Partial dependence (model-agnostic)
|
|
529
|
+
pd_result = partial_dependence(model, X_test, features=["Feature1"])
|
|
530
|
+
plt.plot(pd_result['grid_values'][0], pd_result['average'][0])
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
### Technique 3: Conditional Expectations
|
|
534
|
+
Analyze SHAP values conditioned on other features:
|
|
535
|
+
```python
|
|
536
|
+
# High Income group
|
|
537
|
+
high_income = X_test['Income'] > X_test['Income'].median()
|
|
538
|
+
shap.plots.beeswarm(shap_values[high_income])
|
|
539
|
+
|
|
540
|
+
# Low Income group
|
|
541
|
+
low_income = X_test['Income'] <= X_test['Income'].median()
|
|
542
|
+
shap.plots.beeswarm(shap_values[low_income])
|
|
543
|
+
```
|
|
544
|
+
|
|
545
|
+
### Technique 4: Feature Clustering for Redundancy
|
|
546
|
+
```python
|
|
547
|
+
# Create hierarchical clustering
|
|
548
|
+
clustering = shap.utils.hclust(X_train, y_train)
|
|
549
|
+
|
|
550
|
+
# Visualize with clustering
|
|
551
|
+
shap.plots.bar(shap_values, clustering=clustering, clustering_cutoff=0.5)
|
|
552
|
+
|
|
553
|
+
# Identify redundant features to remove
|
|
554
|
+
# Features with distance < 0.1 are highly redundant
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
## Integration with MLOps
|
|
558
|
+
|
|
559
|
+
**Experiment Tracking**:
|
|
560
|
+
```python
|
|
561
|
+
import mlflow
|
|
562
|
+
|
|
563
|
+
# Log SHAP values
|
|
564
|
+
with mlflow.start_run():
|
|
565
|
+
# Train model
|
|
566
|
+
model = train_model(X_train, y_train)
|
|
567
|
+
|
|
568
|
+
# Compute SHAP
|
|
569
|
+
explainer = shap.TreeExplainer(model)
|
|
570
|
+
shap_values = explainer(X_test)
|
|
571
|
+
|
|
572
|
+
# Log plots
|
|
573
|
+
shap.plots.beeswarm(shap_values, show=False)
|
|
574
|
+
mlflow.log_figure(plt.gcf(), "shap_beeswarm.png")
|
|
575
|
+
plt.close()
|
|
576
|
+
|
|
577
|
+
# Log feature importance as metrics
|
|
578
|
+
mean_abs_shap = np.abs(shap_values.values).mean(axis=0)
|
|
579
|
+
for feature, importance in zip(X_test.columns, mean_abs_shap):
|
|
580
|
+
mlflow.log_metric(f"shap_{feature}", importance)
|
|
581
|
+
```
|
|
582
|
+
|
|
583
|
+
**Model Monitoring**:
|
|
584
|
+
```python
|
|
585
|
+
# Track SHAP distribution drift over time
|
|
586
|
+
def compute_shap_summary(shap_values):
|
|
587
|
+
return {
|
|
588
|
+
'mean': shap_values.values.mean(axis=0),
|
|
589
|
+
'std': shap_values.values.std(axis=0),
|
|
590
|
+
'percentiles': np.percentile(shap_values.values, [25, 50, 75], axis=0)
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
# Compute baseline
|
|
594
|
+
baseline_summary = compute_shap_summary(shap_values_train)
|
|
595
|
+
|
|
596
|
+
# Monitor production data
|
|
597
|
+
production_summary = compute_shap_summary(shap_values_production)
|
|
598
|
+
|
|
599
|
+
# Detect drift
|
|
600
|
+
drift_detected = np.abs(
|
|
601
|
+
production_summary['mean'] - baseline_summary['mean']
|
|
602
|
+
) > threshold
|
|
603
|
+
```
|
|
604
|
+
|
|
605
|
+
This comprehensive workflows document covers the most common and advanced use cases for SHAP in practice.
|