idfkit 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- idfkit-0.1.0/.devcontainer/devcontainer.json +25 -0
- idfkit-0.1.0/.devcontainer/postCreateCommand.sh +15 -0
- idfkit-0.1.0/.github/actions/setup-python-env/action.yml +31 -0
- idfkit-0.1.0/.github/workflows/main.yml +71 -0
- idfkit-0.1.0/.github/workflows/on-release-main.yml +71 -0
- idfkit-0.1.0/.github/workflows/validate-codecov-config.yml +15 -0
- idfkit-0.1.0/.gitignore +215 -0
- idfkit-0.1.0/.pre-commit-config.yaml +23 -0
- idfkit-0.1.0/.python-version +1 -0
- idfkit-0.1.0/.vscode/extensions.json +7 -0
- idfkit-0.1.0/.vscode/settings.json +26 -0
- idfkit-0.1.0/CLAUDE.md +81 -0
- idfkit-0.1.0/CONTRIBUTING.md +180 -0
- idfkit-0.1.0/LICENSE +21 -0
- idfkit-0.1.0/Makefile +63 -0
- idfkit-0.1.0/PKG-INFO +232 -0
- idfkit-0.1.0/README.md +182 -0
- idfkit-0.1.0/benchmarks/bench.py +711 -0
- idfkit-0.1.0/benchmarks/bench_progress.py +340 -0
- idfkit-0.1.0/benchmarks/progress_benchmark_results.json +287 -0
- idfkit-0.1.0/codecov.yaml +9 -0
- idfkit-0.1.0/docs/api/document.md +7 -0
- idfkit-0.1.0/docs/api/exceptions.md +5 -0
- idfkit-0.1.0/docs/api/geometry.md +7 -0
- idfkit-0.1.0/docs/api/io.md +16 -0
- idfkit-0.1.0/docs/api/objects.md +9 -0
- idfkit-0.1.0/docs/api/references.md +7 -0
- idfkit-0.1.0/docs/api/schedules/index.md +138 -0
- idfkit-0.1.0/docs/api/schema.md +10 -0
- idfkit-0.1.0/docs/api/simulation/async.md +37 -0
- idfkit-0.1.0/docs/api/simulation/batch.md +43 -0
- idfkit-0.1.0/docs/api/simulation/cache.md +33 -0
- idfkit-0.1.0/docs/api/simulation/expand.md +89 -0
- idfkit-0.1.0/docs/api/simulation/fs.md +54 -0
- idfkit-0.1.0/docs/api/simulation/index.md +37 -0
- idfkit-0.1.0/docs/api/simulation/plotting.md +56 -0
- idfkit-0.1.0/docs/api/simulation/results.md +87 -0
- idfkit-0.1.0/docs/api/simulation/runner.md +29 -0
- idfkit-0.1.0/docs/api/simulation/sql.md +72 -0
- idfkit-0.1.0/docs/api/thermal.md +304 -0
- idfkit-0.1.0/docs/api/validation.md +6 -0
- idfkit-0.1.0/docs/api/versions.md +6 -0
- idfkit-0.1.0/docs/api/visualization.md +378 -0
- idfkit-0.1.0/docs/api/weather/designday.md +53 -0
- idfkit-0.1.0/docs/api/weather/download.md +23 -0
- idfkit-0.1.0/docs/api/weather/index.md +26 -0
- idfkit-0.1.0/docs/api/weather/station.md +72 -0
- idfkit-0.1.0/docs/assets/benchmark.svg +1722 -0
- idfkit-0.1.0/docs/assets/benchmark_add_objects.svg +1266 -0
- idfkit-0.1.0/docs/assets/benchmark_add_objects_dark.svg +1266 -0
- idfkit-0.1.0/docs/assets/benchmark_dark.svg +1722 -0
- idfkit-0.1.0/docs/assets/benchmark_get_by_name.svg +1543 -0
- idfkit-0.1.0/docs/assets/benchmark_get_by_name_dark.svg +1543 -0
- idfkit-0.1.0/docs/assets/benchmark_get_by_type.svg +1369 -0
- idfkit-0.1.0/docs/assets/benchmark_get_by_type_dark.svg +1369 -0
- idfkit-0.1.0/docs/assets/benchmark_load_idf.svg +1465 -0
- idfkit-0.1.0/docs/assets/benchmark_load_idf_dark.svg +1465 -0
- idfkit-0.1.0/docs/assets/benchmark_modify_fields.svg +1289 -0
- idfkit-0.1.0/docs/assets/benchmark_modify_fields_dark.svg +1289 -0
- idfkit-0.1.0/docs/assets/benchmark_write_idf.svg +1391 -0
- idfkit-0.1.0/docs/assets/benchmark_write_idf_dark.svg +1391 -0
- idfkit-0.1.0/docs/assets/construction-svg-example.svg +80 -0
- idfkit-0.1.0/docs/benchmarks.md +63 -0
- idfkit-0.1.0/docs/concepts/caching.md +151 -0
- idfkit-0.1.0/docs/concepts/cloud-storage.md +137 -0
- idfkit-0.1.0/docs/concepts/simulation-architecture.md +166 -0
- idfkit-0.1.0/docs/concepts/weather-pipeline.md +140 -0
- idfkit-0.1.0/docs/design/schedule-evaluator.md +306 -0
- idfkit-0.1.0/docs/examples/cloud-simulations.md +128 -0
- idfkit-0.1.0/docs/examples/parametric-study.ipynb +236 -0
- idfkit-0.1.0/docs/examples/sizing-workflow.ipynb +311 -0
- idfkit-0.1.0/docs/getting-started/core-tutorial.ipynb +1978 -0
- idfkit-0.1.0/docs/getting-started/installation.md +197 -0
- idfkit-0.1.0/docs/getting-started/quick-start.md +90 -0
- idfkit-0.1.0/docs/index.md +138 -0
- idfkit-0.1.0/docs/migration.md +262 -0
- idfkit-0.1.0/docs/overrides/.gitkeep +0 -0
- idfkit-0.1.0/docs/schedules/index.md +91 -0
- idfkit-0.1.0/docs/simulation/async.md +187 -0
- idfkit-0.1.0/docs/simulation/batch.md +145 -0
- idfkit-0.1.0/docs/simulation/caching.md +171 -0
- idfkit-0.1.0/docs/simulation/errors.md +182 -0
- idfkit-0.1.0/docs/simulation/index.md +109 -0
- idfkit-0.1.0/docs/simulation/output-discovery.md +162 -0
- idfkit-0.1.0/docs/simulation/plotting.md +149 -0
- idfkit-0.1.0/docs/simulation/progress.md +349 -0
- idfkit-0.1.0/docs/simulation/results.md +139 -0
- idfkit-0.1.0/docs/simulation/running.md +248 -0
- idfkit-0.1.0/docs/simulation/sql-queries.md +200 -0
- idfkit-0.1.0/docs/snippets/concepts/caching/cache_location.py +8 -0
- idfkit-0.1.0/docs/snippets/concepts/caching/cache_management.py +18 -0
- idfkit-0.1.0/docs/snippets/concepts/caching/disabling_caching.py +16 -0
- idfkit-0.1.0/docs/snippets/concepts/caching/parallel_safety.py +14 -0
- idfkit-0.1.0/docs/snippets/concepts/caching/simulation_cache.py +19 -0
- idfkit-0.1.0/docs/snippets/concepts/caching/weather_file_cache.py +8 -0
- idfkit-0.1.0/docs/snippets/concepts/cloud-storage/1_local_preparation.py +24 -0
- idfkit-0.1.0/docs/snippets/concepts/cloud-storage/2_cloud_execution.py +17 -0
- idfkit-0.1.0/docs/snippets/concepts/cloud-storage/3_result_collection.py +17 -0
- idfkit-0.1.0/docs/snippets/concepts/cloud-storage/authentication.py +15 -0
- idfkit-0.1.0/docs/snippets/concepts/cloud-storage/implementing_custom_backends.py +29 -0
- idfkit-0.1.0/docs/snippets/concepts/cloud-storage/key_prefixes.py +13 -0
- idfkit-0.1.0/docs/snippets/concepts/cloud-storage/lazy_loading.py +15 -0
- idfkit-0.1.0/docs/snippets/concepts/cloud-storage/local_caching.py +23 -0
- idfkit-0.1.0/docs/snippets/concepts/cloud-storage/localfilesystem.py +13 -0
- idfkit-0.1.0/docs/snippets/concepts/cloud-storage/s3_compatible_services.py +20 -0
- idfkit-0.1.0/docs/snippets/concepts/cloud-storage/s3filesystem.py +18 -0
- idfkit-0.1.0/docs/snippets/concepts/cloud-storage/the_filesystem_protocol.py +20 -0
- idfkit-0.1.0/docs/snippets/concepts/simulation-architecture/concurrent_execution.py +18 -0
- idfkit-0.1.0/docs/snippets/concepts/simulation-architecture/energyplus_discovery.py +12 -0
- idfkit-0.1.0/docs/snippets/concepts/simulation-architecture/lazy_loading.py +16 -0
- idfkit-0.1.0/docs/snippets/concepts/simulation-architecture/model_immutability.py +13 -0
- idfkit-0.1.0/docs/snippets/concepts/simulation-architecture/sqlite_over_eso.py +15 -0
- idfkit-0.1.0/docs/snippets/concepts/simulation-architecture/streaming.py +11 -0
- idfkit-0.1.0/docs/snippets/concepts/simulation-architecture/subprocess_execution.py +13 -0
- idfkit-0.1.0/docs/snippets/concepts/weather-pipeline/ashrae_standards.py +21 -0
- idfkit-0.1.0/docs/snippets/concepts/weather-pipeline/bundled_index_no_dependencies.py +11 -0
- idfkit-0.1.0/docs/snippets/concepts/weather-pipeline/live_refresh_requires_openpyxl.py +10 -0
- idfkit-0.1.0/docs/snippets/concepts/weather-pipeline/spatial_search.py +14 -0
- idfkit-0.1.0/docs/snippets/concepts/weather-pipeline/spatial_search_2.py +13 -0
- idfkit-0.1.0/docs/snippets/concepts/weather-pipeline/wmo_numbers.py +13 -0
- idfkit-0.1.0/docs/snippets/design/schedule-evaluator/1_holidays.py +29 -0
- idfkit-0.1.0/docs/snippets/design/schedule-evaluator/2_design_days.py +32 -0
- idfkit-0.1.0/docs/snippets/design/schedule-evaluator/4_schedulefile_support.py +28 -0
- idfkit-0.1.0/docs/snippets/design/schedule-evaluator/4_schedulefile_support_2.py +28 -0
- idfkit-0.1.0/docs/snippets/design/schedule-evaluator/4_schedulefile_support_3.py +23 -0
- idfkit-0.1.0/docs/snippets/design/schedule-evaluator/batch_evaluation.py +33 -0
- idfkit-0.1.0/docs/snippets/design/schedule-evaluator/convenience_on_idfdocument.py +28 -0
- idfkit-0.1.0/docs/snippets/design/schedule-evaluator/core_function.py +36 -0
- idfkit-0.1.0/docs/snippets/design/schedule-evaluator/error_handling.py +29 -0
- idfkit-0.1.0/docs/snippets/design/schedule-evaluator/example_test.py +26 -0
- idfkit-0.1.0/docs/snippets/design/schedule-evaluator/filesystem_integration.py +21 -0
- idfkit-0.1.0/docs/snippets/design/schedule-evaluator/hierarchical_schedule_resolution.py +38 -0
- idfkit-0.1.0/docs/snippets/design/schedule-evaluator/pandas_integration_optional.py +30 -0
- idfkit-0.1.0/docs/snippets/design/schedule-evaluator/parsing_strategy.py +30 -0
- idfkit-0.1.0/docs/snippets/design/schedule-evaluator/scheduledayhourly.py +18 -0
- idfkit-0.1.0/docs/snippets/design/schedule-evaluator/scheduledayinterval.py +31 -0
- idfkit-0.1.0/docs/snippets/examples/cloud-simulations/basic_s3_usage.py +30 -0
- idfkit-0.1.0/docs/snippets/examples/cloud-simulations/batch_downloads.py +24 -0
- idfkit-0.1.0/docs/snippets/examples/cloud-simulations/batch_processing_with_s3.py +31 -0
- idfkit-0.1.0/docs/snippets/examples/cloud-simulations/digitalocean_spaces.py +11 -0
- idfkit-0.1.0/docs/snippets/examples/cloud-simulations/localstack.py +11 -0
- idfkit-0.1.0/docs/snippets/examples/cloud-simulations/minimize_s3_round_trips.py +18 -0
- idfkit-0.1.0/docs/snippets/examples/cloud-simulations/minio.py +12 -0
- idfkit-0.1.0/docs/snippets/examples/cloud-simulations/step_1_create_jobs_locally.py +27 -0
- idfkit-0.1.0/docs/snippets/examples/cloud-simulations/step_2_run_on_cloud_workers.py +25 -0
- idfkit-0.1.0/docs/snippets/examples/cloud-simulations/step_3_collect_results.py +28 -0
- idfkit-0.1.0/docs/snippets/examples/cloud-simulations/weather_file_handling.py +30 -0
- idfkit-0.1.0/docs/snippets/getting-started/installation/verify_installation.py +12 -0
- idfkit-0.1.0/docs/snippets/getting-started/quick-start/apply_design_days.py +21 -0
- idfkit-0.1.0/docs/snippets/getting-started/quick-start/create_a_new_model.py +24 -0
- idfkit-0.1.0/docs/snippets/getting-started/quick-start/discover_available_fields.py +20 -0
- idfkit-0.1.0/docs/snippets/getting-started/quick-start/discover_available_fields_3.py +11 -0
- idfkit-0.1.0/docs/snippets/getting-started/quick-start/find_weather_stations.py +23 -0
- idfkit-0.1.0/docs/snippets/getting-started/quick-start/load_a_model.py +12 -0
- idfkit-0.1.0/docs/snippets/getting-started/quick-start/modify_fields.py +15 -0
- idfkit-0.1.0/docs/snippets/getting-started/quick-start/query_objects.py +16 -0
- idfkit-0.1.0/docs/snippets/getting-started/quick-start/query_results.py +25 -0
- idfkit-0.1.0/docs/snippets/getting-started/quick-start/run_a_simulation.py +24 -0
- idfkit-0.1.0/docs/snippets/getting-started/quick-start/write_output.py +17 -0
- idfkit-0.1.0/docs/snippets/index/find_weather_stations.py +14 -0
- idfkit-0.1.0/docs/snippets/index/quick_example.py +27 -0
- idfkit-0.1.0/docs/snippets/index/run_simulations.py +20 -0
- idfkit-0.1.0/docs/snippets/migration/accessing_fields.py +9 -0
- idfkit-0.1.0/docs/snippets/migration/accessing_fields_2.py +9 -0
- idfkit-0.1.0/docs/snippets/migration/batch_updates.py +10 -0
- idfkit-0.1.0/docs/snippets/migration/batch_updates_2.py +11 -0
- idfkit-0.1.0/docs/snippets/migration/building_transforms.py +17 -0
- idfkit-0.1.0/docs/snippets/migration/creating_objects.py +11 -0
- idfkit-0.1.0/docs/snippets/migration/creating_objects_2.py +8 -0
- idfkit-0.1.0/docs/snippets/migration/creating_objects_3.py +8 -0
- idfkit-0.1.0/docs/snippets/migration/finding_referring_objects.py +10 -0
- idfkit-0.1.0/docs/snippets/migration/finding_referring_objects_2.py +21 -0
- idfkit-0.1.0/docs/snippets/migration/following_references.py +10 -0
- idfkit-0.1.0/docs/snippets/migration/following_references_2.py +10 -0
- idfkit-0.1.0/docs/snippets/migration/geometry.py +26 -0
- idfkit-0.1.0/docs/snippets/migration/html_tabular_output.py +12 -0
- idfkit-0.1.0/docs/snippets/migration/html_tabular_output_2.py +26 -0
- idfkit-0.1.0/docs/snippets/migration/html_tabular_output_3.py +7 -0
- idfkit-0.1.0/docs/snippets/migration/loading_a_file.py +8 -0
- idfkit-0.1.0/docs/snippets/migration/loading_a_file_2.py +7 -0
- idfkit-0.1.0/docs/snippets/migration/loading_a_file_3.py +7 -0
- idfkit-0.1.0/docs/snippets/migration/output_formatting_modes.py +9 -0
- idfkit-0.1.0/docs/snippets/migration/output_formatting_modes_2.py +12 -0
- idfkit-0.1.0/docs/snippets/migration/range_checking.py +11 -0
- idfkit-0.1.0/docs/snippets/migration/range_checking_2.py +11 -0
- idfkit-0.1.0/docs/snippets/migration/reference_tracking_new_in_idfkit.py +15 -0
- idfkit-0.1.0/docs/snippets/migration/removing_objects_by_index.py +8 -0
- idfkit-0.1.0/docs/snippets/migration/removing_objects_by_index_2.py +8 -0
- idfkit-0.1.0/docs/snippets/migration/renaming_with_cascading_updates_new_in_idfkit.py +11 -0
- idfkit-0.1.0/docs/snippets/migration/saving_files.py +10 -0
- idfkit-0.1.0/docs/snippets/migration/saving_files_2.py +10 -0
- idfkit-0.1.0/docs/snippets/migration/saving_files_3.py +11 -0
- idfkit-0.1.0/docs/snippets/migration/validation_new_in_idfkit.py +15 -0
- idfkit-0.1.0/docs/snippets/schedules/index/design_day_evaluation.py +26 -0
- idfkit-0.1.0/docs/snippets/schedules/index/example_analyze_office_occupancy.py +30 -0
- idfkit-0.1.0/docs/snippets/schedules/index/holiday_support.py +18 -0
- idfkit-0.1.0/docs/snippets/schedules/index/interpolation.py +14 -0
- idfkit-0.1.0/docs/snippets/schedules/index/pandas_integration.py +16 -0
- idfkit-0.1.0/docs/snippets/schedules/index/quick_start.py +25 -0
- idfkit-0.1.0/docs/snippets/schedules/index/schedulefile_with_remote_storage.py +19 -0
- idfkit-0.1.0/docs/snippets/schedules/index/sub_hourly_timesteps.py +16 -0
- idfkit-0.1.0/docs/snippets/simulation/async/async_batch_processing.py +30 -0
- idfkit-0.1.0/docs/snippets/simulation/async/basic_usage.py +23 -0
- idfkit-0.1.0/docs/snippets/simulation/async/cancellation.py +20 -0
- idfkit-0.1.0/docs/snippets/simulation/async/collecting_streaming_results.py +37 -0
- idfkit-0.1.0/docs/snippets/simulation/async/early_termination.py +11 -0
- idfkit-0.1.0/docs/snippets/simulation/async/fastapi_integration.py +29 -0
- idfkit-0.1.0/docs/snippets/simulation/async/parametric_study.py +47 -0
- idfkit-0.1.0/docs/snippets/simulation/async/running_simulations_alongside_other_async_work.py +32 -0
- idfkit-0.1.0/docs/snippets/simulation/async/streaming_progress.py +25 -0
- idfkit-0.1.0/docs/snippets/simulation/batch/basic_usage.py +26 -0
- idfkit-0.1.0/docs/snippets/simulation/batch/batchresult.py +22 -0
- idfkit-0.1.0/docs/snippets/simulation/batch/caching.py +17 -0
- idfkit-0.1.0/docs/snippets/simulation/batch/cloud_storage.py +27 -0
- idfkit-0.1.0/docs/snippets/simulation/batch/error_handling.py +18 -0
- idfkit-0.1.0/docs/snippets/simulation/batch/parametric_studies.py +41 -0
- idfkit-0.1.0/docs/snippets/simulation/batch/progress_callbacks.py +15 -0
- idfkit-0.1.0/docs/snippets/simulation/batch/rich_progress_bar.py +16 -0
- idfkit-0.1.0/docs/snippets/simulation/batch/simulationjob.py +18 -0
- idfkit-0.1.0/docs/snippets/simulation/batch/worker_count.py +15 -0
- idfkit-0.1.0/docs/snippets/simulation/caching/basic_usage.py +22 -0
- idfkit-0.1.0/docs/snippets/simulation/caching/batch_processing.py +17 -0
- idfkit-0.1.0/docs/snippets/simulation/caching/cache_key_computation.py +17 -0
- idfkit-0.1.0/docs/snippets/simulation/caching/check_for_hit.py +17 -0
- idfkit-0.1.0/docs/snippets/simulation/caching/cleanup.py +14 -0
- idfkit-0.1.0/docs/snippets/simulation/caching/clear_cache.py +9 -0
- idfkit-0.1.0/docs/snippets/simulation/caching/custom_location.py +9 -0
- idfkit-0.1.0/docs/snippets/simulation/caching/disabling_caching.py +14 -0
- idfkit-0.1.0/docs/snippets/simulation/caching/manual_getput.py +26 -0
- idfkit-0.1.0/docs/snippets/simulation/caching/thread_and_process_safety.py +10 -0
- idfkit-0.1.0/docs/snippets/simulation/errors/1_check_the_error_report_first.py +12 -0
- idfkit-0.1.0/docs/snippets/simulation/errors/2_examine_raw_output.py +12 -0
- idfkit-0.1.0/docs/snippets/simulation/errors/3_run_design_day_first.py +15 -0
- idfkit-0.1.0/docs/snippets/simulation/errors/4_validate_before_simulation.py +14 -0
- idfkit-0.1.0/docs/snippets/simulation/errors/batch_error_handling.py +23 -0
- idfkit-0.1.0/docs/snippets/simulation/errors/by_severity.py +21 -0
- idfkit-0.1.0/docs/snippets/simulation/errors/error_counts.py +10 -0
- idfkit-0.1.0/docs/snippets/simulation/errors/error_report.py +25 -0
- idfkit-0.1.0/docs/snippets/simulation/errors/error_report_from_file.py +11 -0
- idfkit-0.1.0/docs/snippets/simulation/errors/error_report_from_file_2.py +9 -0
- idfkit-0.1.0/docs/snippets/simulation/errors/non_exception_failures.py +19 -0
- idfkit-0.1.0/docs/snippets/simulation/errors/simulation_exceptions.py +17 -0
- idfkit-0.1.0/docs/snippets/simulation/errors/summary.py +10 -0
- idfkit-0.1.0/docs/snippets/simulation/errors/timeout_handling.py +16 -0
- idfkit-0.1.0/docs/snippets/simulation/index/lazy_loading.py +13 -0
- idfkit-0.1.0/docs/snippets/simulation/index/model_safety.py +11 -0
- idfkit-0.1.0/docs/snippets/simulation/index/parallel_execution.py +14 -0
- idfkit-0.1.0/docs/snippets/simulation/index/quick_start.py +27 -0
- idfkit-0.1.0/docs/snippets/simulation/index/requirements.py +11 -0
- idfkit-0.1.0/docs/snippets/simulation/output-discovery/add_all_matching.py +15 -0
- idfkit-0.1.0/docs/snippets/simulation/output-discovery/basic_usage.py +21 -0
- idfkit-0.1.0/docs/snippets/simulation/output-discovery/creating_an_index.py +8 -0
- idfkit-0.1.0/docs/snippets/simulation/output-discovery/creating_an_index_2.py +10 -0
- idfkit-0.1.0/docs/snippets/simulation/output-discovery/filter_by_units.py +12 -0
- idfkit-0.1.0/docs/snippets/simulation/output-discovery/list_all_variables.py +14 -0
- idfkit-0.1.0/docs/snippets/simulation/output-discovery/reporting_frequencies.py +14 -0
- idfkit-0.1.0/docs/snippets/simulation/output-discovery/search_variables.py +15 -0
- idfkit-0.1.0/docs/snippets/simulation/output-discovery/selective_addition.py +23 -0
- idfkit-0.1.0/docs/snippets/simulation/output-discovery/workflow_discover_then_request.py +38 -0
- idfkit-0.1.0/docs/snippets/simulation/plotting/auto_detection.py +8 -0
- idfkit-0.1.0/docs/snippets/simulation/plotting/basic_usage.py +22 -0
- idfkit-0.1.0/docs/snippets/simulation/plotting/basic_usage_2.py +23 -0
- idfkit-0.1.0/docs/snippets/simulation/plotting/comfort_hours.py +14 -0
- idfkit-0.1.0/docs/snippets/simulation/plotting/customization.py +26 -0
- idfkit-0.1.0/docs/snippets/simulation/plotting/customization_2.py +34 -0
- idfkit-0.1.0/docs/snippets/simulation/plotting/dataframe_integration.py +17 -0
- idfkit-0.1.0/docs/snippets/simulation/plotting/different_variables.py +23 -0
- idfkit-0.1.0/docs/snippets/simulation/plotting/energy_balance.py +13 -0
- idfkit-0.1.0/docs/snippets/simulation/plotting/explicit_backend.py +14 -0
- idfkit-0.1.0/docs/snippets/simulation/plotting/matplotlib.py +10 -0
- idfkit-0.1.0/docs/snippets/simulation/plotting/plotbackend_protocol.py +34 -0
- idfkit-0.1.0/docs/snippets/simulation/plotting/plotly.py +10 -0
- idfkit-0.1.0/docs/snippets/simulation/plotting/quick_start.py +21 -0
- idfkit-0.1.0/docs/snippets/simulation/plotting/same_variable_multiple_keys.py +21 -0
- idfkit-0.1.0/docs/snippets/simulation/plotting/temperature_profile.py +14 -0
- idfkit-0.1.0/docs/snippets/simulation/plotting/time_series_plotting.py +23 -0
- idfkit-0.1.0/docs/snippets/simulation/progress/async_batch_with_stream_progress.py +37 -0
- idfkit-0.1.0/docs/snippets/simulation/progress/async_callbacks.py +25 -0
- idfkit-0.1.0/docs/snippets/simulation/progress/batch_progress_bar_with_tqdm.py +41 -0
- idfkit-0.1.0/docs/snippets/simulation/progress/cloud_execution.py +26 -0
- idfkit-0.1.0/docs/snippets/simulation/progress/cloud_execution_2.py +16 -0
- idfkit-0.1.0/docs/snippets/simulation/progress/cloud_logging_aws_cloudwatch_gcp_cloud_logging.py +22 -0
- idfkit-0.1.0/docs/snippets/simulation/progress/cloud_logging_aws_cloudwatch_gcp_cloud_logging_2.py +25 -0
- idfkit-0.1.0/docs/snippets/simulation/progress/customising_the_tqdm_bar.py +17 -0
- idfkit-0.1.0/docs/snippets/simulation/progress/dual_progress_tracking.py +33 -0
- idfkit-0.1.0/docs/snippets/simulation/progress/fastapi_websocket.py +47 -0
- idfkit-0.1.0/docs/snippets/simulation/progress/jupyter_ipywidgets.py +25 -0
- idfkit-0.1.0/docs/snippets/simulation/progress/one_liner.py +9 -0
- idfkit-0.1.0/docs/snippets/simulation/progress/quick_start.py +12 -0
- idfkit-0.1.0/docs/snippets/simulation/progress/quick_start_2.py +18 -0
- idfkit-0.1.0/docs/snippets/simulation/progress/rich_console.py +26 -0
- idfkit-0.1.0/docs/snippets/simulation/progress/rich_console_2.py +29 -0
- idfkit-0.1.0/docs/snippets/simulation/progress/server_sent_events_sse.py +49 -0
- idfkit-0.1.0/docs/snippets/simulation/progress/simple_console_log.py +22 -0
- idfkit-0.1.0/docs/snippets/simulation/progress/structured_logging.py +26 -0
- idfkit-0.1.0/docs/snippets/simulation/progress/using_progressparser_directly.py +14 -0
- idfkit-0.1.0/docs/snippets/simulation/progress/websocket_forwarding.py +41 -0
- idfkit-0.1.0/docs/snippets/simulation/results/csv_output.py +16 -0
- idfkit-0.1.0/docs/snippets/simulation/results/error_report.py +31 -0
- idfkit-0.1.0/docs/snippets/simulation/results/html_tabular_output.py +32 -0
- idfkit-0.1.0/docs/snippets/simulation/results/html_tabular_output_2.py +9 -0
- idfkit-0.1.0/docs/snippets/simulation/results/lazy_loading.py +18 -0
- idfkit-0.1.0/docs/snippets/simulation/results/output_file_paths.py +14 -0
- idfkit-0.1.0/docs/snippets/simulation/results/output_variables.py +19 -0
- idfkit-0.1.0/docs/snippets/simulation/results/reconstructing_from_directory.py +21 -0
- idfkit-0.1.0/docs/snippets/simulation/results/simulationresult_overview.py +26 -0
- idfkit-0.1.0/docs/snippets/simulation/results/sql_database.py +20 -0
- idfkit-0.1.0/docs/snippets/simulation/running/annual_simulation.py +10 -0
- idfkit-0.1.0/docs/snippets/simulation/running/automatic_temporary_directory.py +12 -0
- idfkit-0.1.0/docs/snippets/simulation/running/basic_usage.py +18 -0
- idfkit-0.1.0/docs/snippets/simulation/running/caching.py +19 -0
- idfkit-0.1.0/docs/snippets/simulation/running/checking_success.py +17 -0
- idfkit-0.1.0/docs/snippets/simulation/running/cloud_storage.py +19 -0
- idfkit-0.1.0/docs/snippets/simulation/running/default_mode.py +10 -0
- idfkit-0.1.0/docs/snippets/simulation/running/design_day_only.py +10 -0
- idfkit-0.1.0/docs/snippets/simulation/running/energyplus_discovery.py +22 -0
- idfkit-0.1.0/docs/snippets/simulation/running/expanding_hvac_templates.py +11 -0
- idfkit-0.1.0/docs/snippets/simulation/running/explicit_directory.py +10 -0
- idfkit-0.1.0/docs/snippets/simulation/running/extra_arguments.py +14 -0
- idfkit-0.1.0/docs/snippets/simulation/running/ground_heat_transfer_slab_basement.py +14 -0
- idfkit-0.1.0/docs/snippets/simulation/running/model_safety.py +17 -0
- idfkit-0.1.0/docs/snippets/simulation/running/output_suffix_modes.py +10 -0
- idfkit-0.1.0/docs/snippets/simulation/running/simulation_errors.py +17 -0
- idfkit-0.1.0/docs/snippets/simulation/running/timeout.py +14 -0
- idfkit-0.1.0/docs/snippets/simulation/sql-queries/basic_query.py +19 -0
- idfkit-0.1.0/docs/snippets/simulation/sql-queries/context_manager.py +10 -0
- idfkit-0.1.0/docs/snippets/simulation/sql-queries/converting_to_dataframe.py +14 -0
- idfkit-0.1.0/docs/snippets/simulation/sql-queries/energyplus_time_convention.py +16 -0
- idfkit-0.1.0/docs/snippets/simulation/sql-queries/error_handling.py +18 -0
- idfkit-0.1.0/docs/snippets/simulation/sql-queries/filter_by_table.py +11 -0
- idfkit-0.1.0/docs/snippets/simulation/sql-queries/filtering_by_environment.py +27 -0
- idfkit-0.1.0/docs/snippets/simulation/sql-queries/list_available_variables.py +12 -0
- idfkit-0.1.0/docs/snippets/simulation/sql-queries/list_environments.py +11 -0
- idfkit-0.1.0/docs/snippets/simulation/sql-queries/opening_the_database_2.py +7 -0
- idfkit-0.1.0/docs/snippets/simulation/sql-queries/plotting_time_series.py +8 -0
- idfkit-0.1.0/docs/snippets/simulation/sql-queries/query_tabular_reports.py +11 -0
- idfkit-0.1.0/docs/snippets/simulation/sql-queries/search_variables.py +12 -0
- idfkit-0.1.0/docs/snippets/weather/design-days/all_design_days.py +16 -0
- idfkit-0.1.0/docs/snippets/weather/design-days/ashrae_621_ventilation.py +14 -0
- idfkit-0.1.0/docs/snippets/weather/design-days/ashrae_901_energy_standard.py +18 -0
- idfkit-0.1.0/docs/snippets/weather/design-days/basic_application.py +14 -0
- idfkit-0.1.0/docs/snippets/weather/design-days/basic_usage.py +25 -0
- idfkit-0.1.0/docs/snippets/weather/design-days/by_type.py +22 -0
- idfkit-0.1.0/docs/snippets/weather/design-days/complete_workflow.py +48 -0
- idfkit-0.1.0/docs/snippets/weather/design-days/error_handling.py +16 -0
- idfkit-0.1.0/docs/snippets/weather/design-days/location_object.py +16 -0
- idfkit-0.1.0/docs/snippets/weather/design-days/quick_apply.py +17 -0
- idfkit-0.1.0/docs/snippets/weather/design-days/skip_site_location_update.py +15 -0
- idfkit-0.1.0/docs/snippets/weather/design-days/summary_output.py +9 -0
- idfkit-0.1.0/docs/snippets/weather/design-days/with_wet_bulb_design_day.py +15 -0
- idfkit-0.1.0/docs/snippets/weather/downloads/basic_usage.py +22 -0
- idfkit-0.1.0/docs/snippets/weather/downloads/batch_downloads.py +25 -0
- idfkit-0.1.0/docs/snippets/weather/downloads/caching.py +15 -0
- idfkit-0.1.0/docs/snippets/weather/downloads/clear_cache.py +10 -0
- idfkit-0.1.0/docs/snippets/weather/downloads/custom_cache_directory.py +9 -0
- idfkit-0.1.0/docs/snippets/weather/downloads/error_handling.py +16 -0
- idfkit-0.1.0/docs/snippets/weather/downloads/integration_example.py +45 -0
- idfkit-0.1.0/docs/snippets/weather/downloads/offline_usage.py +17 -0
- idfkit-0.1.0/docs/snippets/weather/downloads/weatherfiles.py +22 -0
- idfkit-0.1.0/docs/snippets/weather/geocoding/address_formats.py +17 -0
- idfkit-0.1.0/docs/snippets/weather/geocoding/alternative_direct_coordinates.py +9 -0
- idfkit-0.1.0/docs/snippets/weather/geocoding/basic_usage.py +11 -0
- idfkit-0.1.0/docs/snippets/weather/geocoding/caching_results.py +17 -0
- idfkit-0.1.0/docs/snippets/weather/geocoding/complete_workflow.py +49 -0
- idfkit-0.1.0/docs/snippets/weather/geocoding/error_handling.py +10 -0
- idfkit-0.1.0/docs/snippets/weather/geocoding/rate_limiting.py +13 -0
- idfkit-0.1.0/docs/snippets/weather/geocoding/with_station_search.py +20 -0
- idfkit-0.1.0/docs/snippets/weather/index/address_based_search.py +16 -0
- idfkit-0.1.0/docs/snippets/weather/index/ashrae_design_days.py +15 -0
- idfkit-0.1.0/docs/snippets/weather/index/installation.py +7 -0
- idfkit-0.1.0/docs/snippets/weather/index/installation_2.py +9 -0
- idfkit-0.1.0/docs/snippets/weather/index/quick_start.py +28 -0
- idfkit-0.1.0/docs/snippets/weather/index/workflow_example.py +48 -0
- idfkit-0.1.0/docs/snippets/weather/station-search/filter_by_coordinates.py +14 -0
- idfkit-0.1.0/docs/snippets/weather/station-search/filter_by_country.py +13 -0
- idfkit-0.1.0/docs/snippets/weather/station-search/get_by_wmo_number.py +15 -0
- idfkit-0.1.0/docs/snippets/weather/station-search/listing_countries.py +13 -0
- idfkit-0.1.0/docs/snippets/weather/station-search/loading_the_index.py +14 -0
- idfkit-0.1.0/docs/snippets/weather/station-search/refreshing_the_index.py +13 -0
- idfkit-0.1.0/docs/snippets/weather/station-search/search_by_address.py +19 -0
- idfkit-0.1.0/docs/snippets/weather/station-search/search_by_coordinates.py +14 -0
- idfkit-0.1.0/docs/snippets/weather/station-search/search_by_name.py +14 -0
- idfkit-0.1.0/docs/snippets/weather/station-search/search_tips.py +18 -0
- idfkit-0.1.0/docs/stylesheets/extra.css +138 -0
- idfkit-0.1.0/docs/troubleshooting/energyplus.md +279 -0
- idfkit-0.1.0/docs/troubleshooting/errors.md +253 -0
- idfkit-0.1.0/docs/weather/design-days.md +168 -0
- idfkit-0.1.0/docs/weather/downloads.md +122 -0
- idfkit-0.1.0/docs/weather/geocoding.md +91 -0
- idfkit-0.1.0/docs/weather/index.md +93 -0
- idfkit-0.1.0/docs/weather/station-search.md +147 -0
- idfkit-0.1.0/mkdocs.yml +199 -0
- idfkit-0.1.0/pyproject.toml +200 -0
- idfkit-0.1.0/scripts/build_weather_index.py +60 -0
- idfkit-0.1.0/src/idfkit/__init__.py +241 -0
- idfkit-0.1.0/src/idfkit/document.py +1105 -0
- idfkit-0.1.0/src/idfkit/download.py +172 -0
- idfkit-0.1.0/src/idfkit/epjson_parser.py +280 -0
- idfkit-0.1.0/src/idfkit/exceptions.py +222 -0
- idfkit-0.1.0/src/idfkit/geometry.py +972 -0
- idfkit-0.1.0/src/idfkit/idf_parser.py +448 -0
- idfkit-0.1.0/src/idfkit/introspection.py +277 -0
- idfkit-0.1.0/src/idfkit/objects.py +825 -0
- idfkit-0.1.0/src/idfkit/py.typed +0 -0
- idfkit-0.1.0/src/idfkit/references.py +294 -0
- idfkit-0.1.0/src/idfkit/schedules/__init__.py +121 -0
- idfkit-0.1.0/src/idfkit/schedules/compact.py +354 -0
- idfkit-0.1.0/src/idfkit/schedules/day.py +258 -0
- idfkit-0.1.0/src/idfkit/schedules/day_types.py +117 -0
- idfkit-0.1.0/src/idfkit/schedules/evaluate.py +343 -0
- idfkit-0.1.0/src/idfkit/schedules/file.py +268 -0
- idfkit-0.1.0/src/idfkit/schedules/holidays.py +292 -0
- idfkit-0.1.0/src/idfkit/schedules/series.py +282 -0
- idfkit-0.1.0/src/idfkit/schedules/time_utils.py +86 -0
- idfkit-0.1.0/src/idfkit/schedules/types.py +210 -0
- idfkit-0.1.0/src/idfkit/schedules/week.py +324 -0
- idfkit-0.1.0/src/idfkit/schedules/year.py +210 -0
- idfkit-0.1.0/src/idfkit/schema.py +627 -0
- idfkit-0.1.0/src/idfkit/schemas/V22-1-0/Energy+.schema.epJSON.gz +0 -0
- idfkit-0.1.0/src/idfkit/schemas/V22-2-0/Energy+.schema.epJSON.gz +0 -0
- idfkit-0.1.0/src/idfkit/schemas/V23-1-0/Energy+.schema.epJSON.gz +0 -0
- idfkit-0.1.0/src/idfkit/schemas/V23-2-0/Energy+.schema.epJSON.gz +0 -0
- idfkit-0.1.0/src/idfkit/schemas/V24-1-0/Energy+.schema.epJSON.gz +0 -0
- idfkit-0.1.0/src/idfkit/schemas/V24-2-0/Energy+.schema.epJSON.gz +0 -0
- idfkit-0.1.0/src/idfkit/schemas/V25-1-0/Energy+.schema.epJSON.gz +0 -0
- idfkit-0.1.0/src/idfkit/schemas/V25-2-0/Energy+.schema.epJSON.gz +0 -0
- idfkit-0.1.0/src/idfkit/schemas/V8-9-0/Energy+.schema.epJSON.gz +0 -0
- idfkit-0.1.0/src/idfkit/schemas/V9-0-1/Energy+.schema.epJSON.gz +0 -0
- idfkit-0.1.0/src/idfkit/schemas/V9-1-0/Energy+.schema.epJSON.gz +0 -0
- idfkit-0.1.0/src/idfkit/schemas/V9-2-0/Energy+.schema.epJSON.gz +0 -0
- idfkit-0.1.0/src/idfkit/schemas/V9-3-0/Energy+.schema.epJSON.gz +0 -0
- idfkit-0.1.0/src/idfkit/schemas/V9-4-0/Energy+.schema.epJSON.gz +0 -0
- idfkit-0.1.0/src/idfkit/schemas/V9-5-0/Energy+.schema.epJSON.gz +0 -0
- idfkit-0.1.0/src/idfkit/schemas/V9-6-0/Energy+.schema.epJSON.gz +0 -0
- idfkit-0.1.0/src/idfkit/simulation/__init__.py +112 -0
- idfkit-0.1.0/src/idfkit/simulation/_common.py +185 -0
- idfkit-0.1.0/src/idfkit/simulation/async_batch.py +359 -0
- idfkit-0.1.0/src/idfkit/simulation/async_runner.py +393 -0
- idfkit-0.1.0/src/idfkit/simulation/batch.py +272 -0
- idfkit-0.1.0/src/idfkit/simulation/cache.py +208 -0
- idfkit-0.1.0/src/idfkit/simulation/config.py +345 -0
- idfkit-0.1.0/src/idfkit/simulation/expand.py +645 -0
- idfkit-0.1.0/src/idfkit/simulation/fs.py +321 -0
- idfkit-0.1.0/src/idfkit/simulation/outputs.py +161 -0
- idfkit-0.1.0/src/idfkit/simulation/parsers/__init__.py +3 -0
- idfkit-0.1.0/src/idfkit/simulation/parsers/csv.py +143 -0
- idfkit-0.1.0/src/idfkit/simulation/parsers/err.py +261 -0
- idfkit-0.1.0/src/idfkit/simulation/parsers/html.py +263 -0
- idfkit-0.1.0/src/idfkit/simulation/parsers/rdd.py +141 -0
- idfkit-0.1.0/src/idfkit/simulation/parsers/sql.py +466 -0
- idfkit-0.1.0/src/idfkit/simulation/plotting/__init__.py +192 -0
- idfkit-0.1.0/src/idfkit/simulation/plotting/matplotlib.py +225 -0
- idfkit-0.1.0/src/idfkit/simulation/plotting/plotly.py +201 -0
- idfkit-0.1.0/src/idfkit/simulation/plotting/visualizations.py +187 -0
- idfkit-0.1.0/src/idfkit/simulation/progress.py +247 -0
- idfkit-0.1.0/src/idfkit/simulation/progress_bars.py +141 -0
- idfkit-0.1.0/src/idfkit/simulation/result.py +287 -0
- idfkit-0.1.0/src/idfkit/simulation/runner.py +335 -0
- idfkit-0.1.0/src/idfkit/thermal/__init__.py +60 -0
- idfkit-0.1.0/src/idfkit/thermal/gas.py +315 -0
- idfkit-0.1.0/src/idfkit/thermal/properties.py +480 -0
- idfkit-0.1.0/src/idfkit/validation.py +509 -0
- idfkit-0.1.0/src/idfkit/versions.py +121 -0
- idfkit-0.1.0/src/idfkit/visualization/__init__.py +38 -0
- idfkit-0.1.0/src/idfkit/visualization/model.py +900 -0
- idfkit-0.1.0/src/idfkit/visualization/svg.py +745 -0
- idfkit-0.1.0/src/idfkit/weather/__init__.py +108 -0
- idfkit-0.1.0/src/idfkit/weather/data/stations.json.gz +0 -0
- idfkit-0.1.0/src/idfkit/weather/designday.py +442 -0
- idfkit-0.1.0/src/idfkit/weather/download.py +182 -0
- idfkit-0.1.0/src/idfkit/weather/geocode.py +109 -0
- idfkit-0.1.0/src/idfkit/weather/index.py +505 -0
- idfkit-0.1.0/src/idfkit/weather/spatial.py +33 -0
- idfkit-0.1.0/src/idfkit/weather/station.py +125 -0
- idfkit-0.1.0/src/idfkit/writers.py +426 -0
- idfkit-0.1.0/tests/conftest.py +240 -0
- idfkit-0.1.0/tests/fixtures/simulation/sample.csv +4 -0
- idfkit-0.1.0/tests/fixtures/simulation/sample.err +12 -0
- idfkit-0.1.0/tests/fixtures/simulation/sample.mdd +7 -0
- idfkit-0.1.0/tests/fixtures/simulation/sample.rdd +9 -0
- idfkit-0.1.0/tests/fixtures/simulation/sample_fatal.err +8 -0
- idfkit-0.1.0/tests/fixtures/weather/empty.ddy +10 -0
- idfkit-0.1.0/tests/fixtures/weather/sample.ddy +332 -0
- idfkit-0.1.0/tests/schedules/__init__.py +1 -0
- idfkit-0.1.0/tests/schedules/test_compact.py +418 -0
- idfkit-0.1.0/tests/schedules/test_day.py +320 -0
- idfkit-0.1.0/tests/schedules/test_day_types.py +201 -0
- idfkit-0.1.0/tests/schedules/test_evaluate.py +294 -0
- idfkit-0.1.0/tests/schedules/test_file.py +311 -0
- idfkit-0.1.0/tests/schedules/test_holidays.py +283 -0
- idfkit-0.1.0/tests/schedules/test_series.py +242 -0
- idfkit-0.1.0/tests/schedules/test_time_utils.py +97 -0
- idfkit-0.1.0/tests/schedules/test_types.py +216 -0
- idfkit-0.1.0/tests/schedules/test_week.py +676 -0
- idfkit-0.1.0/tests/schedules/test_year.py +536 -0
- idfkit-0.1.0/tests/test_basic.py +102 -0
- idfkit-0.1.0/tests/test_document.py +516 -0
- idfkit-0.1.0/tests/test_epjson_roundtrip.py +494 -0
- idfkit-0.1.0/tests/test_eppy_compat.py +768 -0
- idfkit-0.1.0/tests/test_exceptions.py +183 -0
- idfkit-0.1.0/tests/test_expand.py +1150 -0
- idfkit-0.1.0/tests/test_geometry.py +404 -0
- idfkit-0.1.0/tests/test_idf_roundtrip.py +401 -0
- idfkit-0.1.0/tests/test_introspection.py +173 -0
- idfkit-0.1.0/tests/test_objects.py +434 -0
- idfkit-0.1.0/tests/test_parsers.py +336 -0
- idfkit-0.1.0/tests/test_references.py +233 -0
- idfkit-0.1.0/tests/test_schema.py +221 -0
- idfkit-0.1.0/tests/test_simulation_async.py +394 -0
- idfkit-0.1.0/tests/test_simulation_batch.py +263 -0
- idfkit-0.1.0/tests/test_simulation_cache.py +339 -0
- idfkit-0.1.0/tests/test_simulation_config.py +189 -0
- idfkit-0.1.0/tests/test_simulation_csv_parser.py +110 -0
- idfkit-0.1.0/tests/test_simulation_e2e.py +233 -0
- idfkit-0.1.0/tests/test_simulation_err_parser.py +122 -0
- idfkit-0.1.0/tests/test_simulation_fs.py +196 -0
- idfkit-0.1.0/tests/test_simulation_outputs.py +170 -0
- idfkit-0.1.0/tests/test_simulation_plotting.py +506 -0
- idfkit-0.1.0/tests/test_simulation_progress.py +765 -0
- idfkit-0.1.0/tests/test_simulation_progress_bars.py +316 -0
- idfkit-0.1.0/tests/test_simulation_rdd_parser.py +113 -0
- idfkit-0.1.0/tests/test_simulation_result.py +278 -0
- idfkit-0.1.0/tests/test_simulation_runner.py +407 -0
- idfkit-0.1.0/tests/test_simulation_sql_parser.py +450 -0
- idfkit-0.1.0/tests/test_thermal.py +530 -0
- idfkit-0.1.0/tests/test_validation.py +160 -0
- idfkit-0.1.0/tests/test_versions.py +327 -0
- idfkit-0.1.0/tests/test_visualization.py +414 -0
- idfkit-0.1.0/tests/test_visualization_model.py +532 -0
- idfkit-0.1.0/tests/test_weather_designday.py +278 -0
- idfkit-0.1.0/tests/test_weather_download.py +206 -0
- idfkit-0.1.0/tests/test_weather_geocode.py +120 -0
- idfkit-0.1.0/tests/test_weather_index.py +308 -0
- idfkit-0.1.0/tests/test_weather_spatial.py +37 -0
- idfkit-0.1.0/tests/test_weather_station.py +109 -0
- idfkit-0.1.0/tests/test_writers.py +258 -0
- idfkit-0.1.0/tox.ini +19 -0
- idfkit-0.1.0/uv.lock +3597 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
|
|
2
|
+
// README at: https://github.com/devcontainers/templates/tree/main/src/python
|
|
3
|
+
{
|
|
4
|
+
"name": "idfkit",
|
|
5
|
+
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
|
|
6
|
+
"image": "mcr.microsoft.com/devcontainers/python:3.12",
|
|
7
|
+
"features": {},
|
|
8
|
+
|
|
9
|
+
// Use 'postCreateCommand' to run commands after the container is created.
|
|
10
|
+
"postCreateCommand": "./.devcontainer/postCreateCommand.sh",
|
|
11
|
+
|
|
12
|
+
// Configure tool-specific properties.
|
|
13
|
+
"customizations": {
|
|
14
|
+
"vscode": {
|
|
15
|
+
"extensions": ["ms-python.python", "editorconfig.editorconfig"],
|
|
16
|
+
"settings": {
|
|
17
|
+
"python.testing.pytestArgs": ["tests"],
|
|
18
|
+
"python.testing.unittestEnabled": false,
|
|
19
|
+
"python.testing.pytestEnabled": true,
|
|
20
|
+
"python.defaultInterpreterPath": "/workspaces/idfkit/.venv/bin/python",
|
|
21
|
+
"python.testing.pytestPath": "/workspaces/idfkit/.venv/bin/pytest"
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#! /usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
# Install uv
|
|
4
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
5
|
+
|
|
6
|
+
# Install Dependencies
|
|
7
|
+
uv sync
|
|
8
|
+
|
|
9
|
+
# Initialize git repo if not already one (needed for pre-commit)
|
|
10
|
+
if [ ! -d ".git" ]; then
|
|
11
|
+
git init
|
|
12
|
+
fi
|
|
13
|
+
|
|
14
|
+
# Install pre-commit hooks
|
|
15
|
+
uv run pre-commit install --install-hooks
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
name: "Setup Python Environment"
|
|
2
|
+
description: "Set up Python environment for the given Python version"
|
|
3
|
+
|
|
4
|
+
inputs:
|
|
5
|
+
python-version:
|
|
6
|
+
description: "Python version to use"
|
|
7
|
+
required: true
|
|
8
|
+
default: "3.10"
|
|
9
|
+
uv-version:
|
|
10
|
+
description: "uv version to use"
|
|
11
|
+
required: true
|
|
12
|
+
default: "0.9"
|
|
13
|
+
|
|
14
|
+
runs:
|
|
15
|
+
using: "composite"
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/setup-python@v5
|
|
18
|
+
with:
|
|
19
|
+
python-version: ${{ inputs.python-version }}
|
|
20
|
+
|
|
21
|
+
- name: Install uv
|
|
22
|
+
uses: astral-sh/setup-uv@v7
|
|
23
|
+
with:
|
|
24
|
+
version: ${{ inputs.uv-version }}
|
|
25
|
+
enable-cache: 'true'
|
|
26
|
+
cache-suffix: ${{ inputs.python-version }}
|
|
27
|
+
prune-cache: false
|
|
28
|
+
|
|
29
|
+
- name: Install Python dependencies
|
|
30
|
+
run: uv sync --frozen --python ${{ inputs.python-version }}
|
|
31
|
+
shell: bash
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
name: Main
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
pull_request:
|
|
8
|
+
types: [opened, synchronize, reopened, ready_for_review]
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
quality:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- name: Check out
|
|
18
|
+
uses: actions/checkout@v4
|
|
19
|
+
|
|
20
|
+
- uses: actions/cache@v4
|
|
21
|
+
with:
|
|
22
|
+
path: ~/.cache/pre-commit
|
|
23
|
+
key: pre-commit-${{ hashFiles('.pre-commit-config.yaml') }}
|
|
24
|
+
|
|
25
|
+
- name: Set up the environment
|
|
26
|
+
uses: ./.github/actions/setup-python-env
|
|
27
|
+
|
|
28
|
+
- name: Run checks
|
|
29
|
+
run: make check
|
|
30
|
+
tests-and-type-check:
|
|
31
|
+
runs-on: ubuntu-latest
|
|
32
|
+
strategy:
|
|
33
|
+
matrix:
|
|
34
|
+
python-version: ["3.10", "3.11", "3.12", "3.13"]
|
|
35
|
+
fail-fast: false
|
|
36
|
+
defaults:
|
|
37
|
+
run:
|
|
38
|
+
shell: bash
|
|
39
|
+
steps:
|
|
40
|
+
- name: Check out
|
|
41
|
+
uses: actions/checkout@v4
|
|
42
|
+
|
|
43
|
+
- name: Set up the environment
|
|
44
|
+
uses: ./.github/actions/setup-python-env
|
|
45
|
+
with:
|
|
46
|
+
python-version: ${{ matrix.python-version }}
|
|
47
|
+
|
|
48
|
+
- name: Run tests
|
|
49
|
+
run: uv run python -m pytest tests --cov --cov-config=pyproject.toml --cov-report=xml
|
|
50
|
+
|
|
51
|
+
- name: Check typing
|
|
52
|
+
run: uv run pyright src/
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
- name: Upload coverage reports to Codecov with GitHub Action on Python 3.13
|
|
56
|
+
uses: codecov/codecov-action@v4
|
|
57
|
+
if: ${{ matrix.python-version == '3.13' }}
|
|
58
|
+
env:
|
|
59
|
+
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
60
|
+
|
|
61
|
+
check-docs:
|
|
62
|
+
runs-on: ubuntu-latest
|
|
63
|
+
steps:
|
|
64
|
+
- name: Check out
|
|
65
|
+
uses: actions/checkout@v4
|
|
66
|
+
|
|
67
|
+
- name: Set up the environment
|
|
68
|
+
uses: ./.github/actions/setup-python-env
|
|
69
|
+
|
|
70
|
+
- name: Check if documentation can be built
|
|
71
|
+
run: uv run mkdocs build -s
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
name: release-main
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
id-token: write
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
|
|
15
|
+
set-version:
|
|
16
|
+
runs-on: ubuntu-24.04
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v4
|
|
19
|
+
|
|
20
|
+
- name: Export tag
|
|
21
|
+
id: vars
|
|
22
|
+
run: echo tag=${GITHUB_REF#refs/*/} >> $GITHUB_OUTPUT
|
|
23
|
+
if: ${{ github.event_name == 'release' }}
|
|
24
|
+
|
|
25
|
+
- name: Update project version
|
|
26
|
+
run: |
|
|
27
|
+
sed -i "s/^version = \".*\"/version = \"$RELEASE_VERSION\"/" pyproject.toml
|
|
28
|
+
env:
|
|
29
|
+
RELEASE_VERSION: ${{ steps.vars.outputs.tag }}
|
|
30
|
+
if: ${{ github.event_name == 'release' }}
|
|
31
|
+
|
|
32
|
+
- name: Upload updated pyproject.toml
|
|
33
|
+
uses: actions/upload-artifact@v4
|
|
34
|
+
with:
|
|
35
|
+
name: pyproject-toml
|
|
36
|
+
path: pyproject.toml
|
|
37
|
+
|
|
38
|
+
publish:
|
|
39
|
+
runs-on: ubuntu-latest
|
|
40
|
+
needs: [set-version]
|
|
41
|
+
steps:
|
|
42
|
+
- name: Check out
|
|
43
|
+
uses: actions/checkout@v4
|
|
44
|
+
|
|
45
|
+
- name: Set up the environment
|
|
46
|
+
uses: ./.github/actions/setup-python-env
|
|
47
|
+
|
|
48
|
+
- name: Download updated pyproject.toml
|
|
49
|
+
uses: actions/download-artifact@v4
|
|
50
|
+
with:
|
|
51
|
+
name: pyproject-toml
|
|
52
|
+
|
|
53
|
+
- name: Build package
|
|
54
|
+
run: uv build
|
|
55
|
+
|
|
56
|
+
- name: Publish package
|
|
57
|
+
run: uv publish
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
deploy-docs:
|
|
61
|
+
needs: publish
|
|
62
|
+
runs-on: ubuntu-latest
|
|
63
|
+
steps:
|
|
64
|
+
- name: Check out
|
|
65
|
+
uses: actions/checkout@v4
|
|
66
|
+
|
|
67
|
+
- name: Set up the environment
|
|
68
|
+
uses: ./.github/actions/setup-python-env
|
|
69
|
+
|
|
70
|
+
- name: Deploy documentation
|
|
71
|
+
run: uv run mkdocs gh-deploy --force
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
name: validate-codecov-config
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
paths: [codecov.yaml]
|
|
6
|
+
push:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
validate-codecov-config:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v4
|
|
14
|
+
- name: Validate codecov configuration
|
|
15
|
+
run: curl -sSL --fail-with-body --data-binary @codecov.yaml https://codecov.io/validate
|
idfkit-0.1.0/.gitignore
ADDED
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
docs/source
|
|
2
|
+
|
|
3
|
+
# From https://raw.githubusercontent.com/github/gitignore/main/Python.gitignore
|
|
4
|
+
|
|
5
|
+
# Byte-compiled / optimized / DLL files
|
|
6
|
+
__pycache__/
|
|
7
|
+
*.py[codz]
|
|
8
|
+
*$py.class
|
|
9
|
+
|
|
10
|
+
# C extensions
|
|
11
|
+
*.so
|
|
12
|
+
|
|
13
|
+
# Distribution / packaging
|
|
14
|
+
.Python
|
|
15
|
+
build/
|
|
16
|
+
develop-eggs/
|
|
17
|
+
dist/
|
|
18
|
+
downloads/
|
|
19
|
+
!docs/snippets/**/downloads/
|
|
20
|
+
eggs/
|
|
21
|
+
.eggs/
|
|
22
|
+
lib/
|
|
23
|
+
lib64/
|
|
24
|
+
parts/
|
|
25
|
+
sdist/
|
|
26
|
+
var/
|
|
27
|
+
wheels/
|
|
28
|
+
share/python-wheels/
|
|
29
|
+
*.egg-info/
|
|
30
|
+
.installed.cfg
|
|
31
|
+
*.egg
|
|
32
|
+
MANIFEST
|
|
33
|
+
|
|
34
|
+
# PyInstaller
|
|
35
|
+
# Usually these files are written by a python script from a template
|
|
36
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
37
|
+
*.manifest
|
|
38
|
+
*.spec
|
|
39
|
+
|
|
40
|
+
# Installer logs
|
|
41
|
+
pip-log.txt
|
|
42
|
+
pip-delete-this-directory.txt
|
|
43
|
+
|
|
44
|
+
# Unit test / coverage reports
|
|
45
|
+
htmlcov/
|
|
46
|
+
.tox/
|
|
47
|
+
.nox/
|
|
48
|
+
.coverage
|
|
49
|
+
.coverage.*
|
|
50
|
+
.cache
|
|
51
|
+
nosetests.xml
|
|
52
|
+
coverage.xml
|
|
53
|
+
*.cover
|
|
54
|
+
*.py.cover
|
|
55
|
+
.hypothesis/
|
|
56
|
+
.pytest_cache/
|
|
57
|
+
cover/
|
|
58
|
+
|
|
59
|
+
# Translations
|
|
60
|
+
*.mo
|
|
61
|
+
*.pot
|
|
62
|
+
|
|
63
|
+
# Django stuff:
|
|
64
|
+
*.log
|
|
65
|
+
local_settings.py
|
|
66
|
+
db.sqlite3
|
|
67
|
+
db.sqlite3-journal
|
|
68
|
+
|
|
69
|
+
# Flask stuff:
|
|
70
|
+
instance/
|
|
71
|
+
.webassets-cache
|
|
72
|
+
|
|
73
|
+
# Scrapy stuff:
|
|
74
|
+
.scrapy
|
|
75
|
+
|
|
76
|
+
# Sphinx documentation
|
|
77
|
+
docs/_build/
|
|
78
|
+
|
|
79
|
+
# PyBuilder
|
|
80
|
+
.pybuilder/
|
|
81
|
+
target/
|
|
82
|
+
|
|
83
|
+
# Jupyter Notebook
|
|
84
|
+
.ipynb_checkpoints
|
|
85
|
+
|
|
86
|
+
# IPython
|
|
87
|
+
profile_default/
|
|
88
|
+
ipython_config.py
|
|
89
|
+
|
|
90
|
+
# pyenv
|
|
91
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
92
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
93
|
+
# .python-version
|
|
94
|
+
|
|
95
|
+
# pipenv
|
|
96
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
97
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
98
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
99
|
+
# install all needed dependencies.
|
|
100
|
+
#Pipfile.lock
|
|
101
|
+
|
|
102
|
+
# UV
|
|
103
|
+
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
|
|
104
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
105
|
+
# commonly ignored for libraries.
|
|
106
|
+
#uv.lock
|
|
107
|
+
|
|
108
|
+
# poetry
|
|
109
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
110
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
111
|
+
# commonly ignored for libraries.
|
|
112
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
113
|
+
#poetry.lock
|
|
114
|
+
#poetry.toml
|
|
115
|
+
|
|
116
|
+
# pdm
|
|
117
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
118
|
+
# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
|
|
119
|
+
# https://pdm-project.org/en/latest/usage/project/#working-with-version-control
|
|
120
|
+
#pdm.lock
|
|
121
|
+
#pdm.toml
|
|
122
|
+
.pdm-python
|
|
123
|
+
.pdm-build/
|
|
124
|
+
|
|
125
|
+
# pixi
|
|
126
|
+
# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
|
|
127
|
+
#pixi.lock
|
|
128
|
+
# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
|
|
129
|
+
# in the .venv directory. It is recommended not to include this directory in version control.
|
|
130
|
+
.pixi
|
|
131
|
+
|
|
132
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
133
|
+
__pypackages__/
|
|
134
|
+
|
|
135
|
+
# Celery stuff
|
|
136
|
+
celerybeat-schedule
|
|
137
|
+
celerybeat.pid
|
|
138
|
+
|
|
139
|
+
# SageMath parsed files
|
|
140
|
+
*.sage.py
|
|
141
|
+
|
|
142
|
+
# Environments
|
|
143
|
+
.env
|
|
144
|
+
.envrc
|
|
145
|
+
.venv
|
|
146
|
+
env/
|
|
147
|
+
venv/
|
|
148
|
+
ENV/
|
|
149
|
+
env.bak/
|
|
150
|
+
venv.bak/
|
|
151
|
+
|
|
152
|
+
# Spyder project settings
|
|
153
|
+
.spyderproject
|
|
154
|
+
.spyproject
|
|
155
|
+
|
|
156
|
+
# Rope project settings
|
|
157
|
+
.ropeproject
|
|
158
|
+
|
|
159
|
+
# mkdocs documentation
|
|
160
|
+
/site
|
|
161
|
+
|
|
162
|
+
# mypy
|
|
163
|
+
.mypy_cache/
|
|
164
|
+
.dmypy.json
|
|
165
|
+
dmypy.json
|
|
166
|
+
|
|
167
|
+
# Pyre type checker
|
|
168
|
+
.pyre/
|
|
169
|
+
|
|
170
|
+
# pytype static type analyzer
|
|
171
|
+
.pytype/
|
|
172
|
+
|
|
173
|
+
# Cython debug symbols
|
|
174
|
+
cython_debug/
|
|
175
|
+
|
|
176
|
+
# PyCharm
|
|
177
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
178
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
179
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
180
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
181
|
+
#.idea/
|
|
182
|
+
|
|
183
|
+
# Abstra
|
|
184
|
+
# Abstra is an AI-powered process automation framework.
|
|
185
|
+
# Ignore directories containing user credentials, local state, and settings.
|
|
186
|
+
# Learn more at https://abstra.io/docs
|
|
187
|
+
.abstra/
|
|
188
|
+
|
|
189
|
+
# Visual Studio Code
|
|
190
|
+
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
|
|
191
|
+
# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
|
|
192
|
+
# and can be added to the global gitignore or merged into this file. However, if you prefer,
|
|
193
|
+
# you could uncomment the following to ignore the entire vscode folder
|
|
194
|
+
# .vscode/
|
|
195
|
+
|
|
196
|
+
# Benchmark artifacts
|
|
197
|
+
benchmarks/results.json
|
|
198
|
+
|
|
199
|
+
# Ruff stuff:
|
|
200
|
+
.ruff_cache/
|
|
201
|
+
|
|
202
|
+
# PyPI configuration file
|
|
203
|
+
.pypirc
|
|
204
|
+
|
|
205
|
+
# Cursor
|
|
206
|
+
# Cursor is an AI-powered code editor. `.cursorignore` specifies files/directories to
|
|
207
|
+
# exclude from AI features like autocomplete and code analysis. Recommended for sensitive data
|
|
208
|
+
# refer to https://docs.cursor.com/context/ignore-files
|
|
209
|
+
.cursorignore
|
|
210
|
+
.cursorindexingignore
|
|
211
|
+
|
|
212
|
+
# Marimo
|
|
213
|
+
marimo/_static/
|
|
214
|
+
marimo/_lsp/
|
|
215
|
+
__marimo__/
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
3
|
+
rev: "v6.0.0"
|
|
4
|
+
hooks:
|
|
5
|
+
- id: check-case-conflict
|
|
6
|
+
- id: check-merge-conflict
|
|
7
|
+
- id: check-toml
|
|
8
|
+
- id: check-yaml
|
|
9
|
+
args: [--unsafe]
|
|
10
|
+
- id: check-json
|
|
11
|
+
exclude: ^.devcontainer/devcontainer.json
|
|
12
|
+
- id: pretty-format-json
|
|
13
|
+
exclude: ^(.devcontainer/devcontainer.json|.*\.ipynb$)
|
|
14
|
+
args: [--autofix, --no-sort-keys]
|
|
15
|
+
- id: end-of-file-fixer
|
|
16
|
+
- id: trailing-whitespace
|
|
17
|
+
|
|
18
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
19
|
+
rev: "v0.14.9"
|
|
20
|
+
hooks:
|
|
21
|
+
- id: ruff-check
|
|
22
|
+
args: [ --exit-non-zero-on-fix ]
|
|
23
|
+
- id: ruff-format
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.12
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"editor.formatOnSave": true,
|
|
3
|
+
"[python]": {
|
|
4
|
+
"editor.defaultFormatter": "charliermarsh.ruff",
|
|
5
|
+
"editor.codeActionsOnSave": {
|
|
6
|
+
"source.organizeImports": "explicit"
|
|
7
|
+
}
|
|
8
|
+
},
|
|
9
|
+
"python.testing.pytestArgs": [
|
|
10
|
+
"tests"
|
|
11
|
+
],
|
|
12
|
+
"python.testing.unittestEnabled": false,
|
|
13
|
+
"python.testing.pytestEnabled": true,
|
|
14
|
+
"yaml.schemas": {
|
|
15
|
+
"https://squidfunk.github.io/mkdocs-material/schema.json": "mkdocs.yml"
|
|
16
|
+
},
|
|
17
|
+
"yaml.customTags": [
|
|
18
|
+
"!ENV scalar",
|
|
19
|
+
"!ENV sequence",
|
|
20
|
+
"!relative scalar",
|
|
21
|
+
"tag:yaml.org,2002:python/name:material.extensions.emoji.to_svg",
|
|
22
|
+
"tag:yaml.org,2002:python/name:material.extensions.emoji.twemoji",
|
|
23
|
+
"tag:yaml.org,2002:python/name:pymdownx.superfences.fence_code_format",
|
|
24
|
+
"tag:yaml.org,2002:python/object/apply:pymdownx.slugs.slugify mapping"
|
|
25
|
+
]
|
|
26
|
+
}
|
idfkit-0.1.0/CLAUDE.md
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## Project Overview
|
|
6
|
+
|
|
7
|
+
This is a template repository for Python projects that use uv for their dependency management.
|
|
8
|
+
|
|
9
|
+
This project uses:
|
|
10
|
+
- **uv** for dependency management
|
|
11
|
+
- **Ruff** for linting and formatting
|
|
12
|
+
- **pyright** for type checking
|
|
13
|
+
- **pytest** for testing
|
|
14
|
+
- **MkDocs** for documentation
|
|
15
|
+
|
|
16
|
+
## Common Commands
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Install dependencies
|
|
20
|
+
uv sync
|
|
21
|
+
|
|
22
|
+
# Run all quality checks (lint, format, type check, deptry)
|
|
23
|
+
make check
|
|
24
|
+
|
|
25
|
+
# Run tests
|
|
26
|
+
make test
|
|
27
|
+
|
|
28
|
+
# Run a single test
|
|
29
|
+
uv run pytest tests/test_file.py::test_function -v
|
|
30
|
+
|
|
31
|
+
# Serve documentation locally
|
|
32
|
+
make docs
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Project Structure
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
src/idfkit/ # Main package
|
|
39
|
+
tests/ # Test files (mirror source structure)
|
|
40
|
+
docs/ # MkDocs documentation
|
|
41
|
+
pyproject.toml # Project configuration and dependencies
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Code Style
|
|
45
|
+
|
|
46
|
+
- **Line length**: 120 characters
|
|
47
|
+
- **Imports**: Always include `from __future__ import annotations`
|
|
48
|
+
- **Type hints**: Required on all functions (parameters and return types)
|
|
49
|
+
- **Docstrings**: Google or NumPy style for public APIs
|
|
50
|
+
- **Data models**: Use dataclasses or Pydantic instead of raw dicts
|
|
51
|
+
|
|
52
|
+
## Testing
|
|
53
|
+
|
|
54
|
+
Tests live in `tests/` and mirror the source structure. When adding new functionality:
|
|
55
|
+
|
|
56
|
+
1. Create test file: `tests/test_<module_name>.py`
|
|
57
|
+
2. Write tests before or alongside implementation
|
|
58
|
+
3. Run tests: `uv run pytest tests/test_<module_name>.py -v`
|
|
59
|
+
4. Verify all tests pass: `make test`
|
|
60
|
+
|
|
61
|
+
Use pytest fixtures (in `conftest.py`) for shared test setup.
|
|
62
|
+
|
|
63
|
+
## Type Checking
|
|
64
|
+
|
|
65
|
+
This project uses **pyright** for static type analysis. **ALWAYS** try to fix the typing issues with a proper solution rather than adding an ignore statement.
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
uv run pyright
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Ensure all new code is fully typed. The configuration is in `pyproject.toml`.
|
|
72
|
+
|
|
73
|
+
## Before Committing
|
|
74
|
+
|
|
75
|
+
Always run the full quality gate before proposing changes:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
make check && make test
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
This runs: lock file validation, pre-commit hooks (ruff format/lint), pyright, deptry, and pytest.
|