runbooks 0.7.0__py3-none-any.whl → 0.7.6__py3-none-any.whl

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.
Files changed (132) hide show
  1. runbooks/__init__.py +87 -37
  2. runbooks/cfat/README.md +300 -49
  3. runbooks/cfat/__init__.py +2 -2
  4. runbooks/finops/__init__.py +1 -1
  5. runbooks/finops/cli.py +1 -1
  6. runbooks/inventory/collectors/__init__.py +8 -0
  7. runbooks/inventory/collectors/aws_management.py +791 -0
  8. runbooks/inventory/collectors/aws_networking.py +3 -3
  9. runbooks/main.py +3389 -782
  10. runbooks/operate/__init__.py +207 -0
  11. runbooks/operate/base.py +311 -0
  12. runbooks/operate/cloudformation_operations.py +619 -0
  13. runbooks/operate/cloudwatch_operations.py +496 -0
  14. runbooks/operate/dynamodb_operations.py +812 -0
  15. runbooks/operate/ec2_operations.py +926 -0
  16. runbooks/operate/iam_operations.py +569 -0
  17. runbooks/operate/s3_operations.py +1211 -0
  18. runbooks/operate/tagging_operations.py +655 -0
  19. runbooks/remediation/CLAUDE.md +100 -0
  20. runbooks/remediation/DOME9.md +218 -0
  21. runbooks/remediation/README.md +26 -0
  22. runbooks/remediation/Tests/__init__.py +0 -0
  23. runbooks/remediation/Tests/update_policy.py +74 -0
  24. runbooks/remediation/__init__.py +95 -0
  25. runbooks/remediation/acm_cert_expired_unused.py +98 -0
  26. runbooks/remediation/acm_remediation.py +875 -0
  27. runbooks/remediation/api_gateway_list.py +167 -0
  28. runbooks/remediation/base.py +643 -0
  29. runbooks/remediation/cloudtrail_remediation.py +908 -0
  30. runbooks/remediation/cloudtrail_s3_modifications.py +296 -0
  31. runbooks/remediation/cognito_active_users.py +78 -0
  32. runbooks/remediation/cognito_remediation.py +856 -0
  33. runbooks/remediation/cognito_user_password_reset.py +163 -0
  34. runbooks/remediation/commons.py +455 -0
  35. runbooks/remediation/dynamodb_optimize.py +155 -0
  36. runbooks/remediation/dynamodb_remediation.py +744 -0
  37. runbooks/remediation/dynamodb_server_side_encryption.py +108 -0
  38. runbooks/remediation/ec2_public_ips.py +134 -0
  39. runbooks/remediation/ec2_remediation.py +892 -0
  40. runbooks/remediation/ec2_subnet_disable_auto_ip_assignment.py +72 -0
  41. runbooks/remediation/ec2_unattached_ebs_volumes.py +448 -0
  42. runbooks/remediation/ec2_unused_security_groups.py +202 -0
  43. runbooks/remediation/kms_enable_key_rotation.py +651 -0
  44. runbooks/remediation/kms_remediation.py +717 -0
  45. runbooks/remediation/lambda_list.py +243 -0
  46. runbooks/remediation/lambda_remediation.py +971 -0
  47. runbooks/remediation/multi_account.py +569 -0
  48. runbooks/remediation/rds_instance_list.py +199 -0
  49. runbooks/remediation/rds_remediation.py +873 -0
  50. runbooks/remediation/rds_snapshot_list.py +192 -0
  51. runbooks/remediation/requirements.txt +118 -0
  52. runbooks/remediation/s3_block_public_access.py +159 -0
  53. runbooks/remediation/s3_bucket_public_access.py +143 -0
  54. runbooks/remediation/s3_disable_static_website_hosting.py +74 -0
  55. runbooks/remediation/s3_downloader.py +215 -0
  56. runbooks/remediation/s3_enable_access_logging.py +562 -0
  57. runbooks/remediation/s3_encryption.py +526 -0
  58. runbooks/remediation/s3_force_ssl_secure_policy.py +143 -0
  59. runbooks/remediation/s3_list.py +141 -0
  60. runbooks/remediation/s3_object_search.py +201 -0
  61. runbooks/remediation/s3_remediation.py +816 -0
  62. runbooks/remediation/scan_for_phrase.py +425 -0
  63. runbooks/remediation/workspaces_list.py +220 -0
  64. runbooks/security/__init__.py +9 -10
  65. runbooks/security/security_baseline_tester.py +4 -2
  66. runbooks-0.7.6.dist-info/METADATA +608 -0
  67. {runbooks-0.7.0.dist-info → runbooks-0.7.6.dist-info}/RECORD +84 -76
  68. {runbooks-0.7.0.dist-info → runbooks-0.7.6.dist-info}/entry_points.txt +0 -1
  69. {runbooks-0.7.0.dist-info → runbooks-0.7.6.dist-info}/top_level.txt +0 -1
  70. jupyter-agent/.env +0 -2
  71. jupyter-agent/.env.template +0 -2
  72. jupyter-agent/.gitattributes +0 -35
  73. jupyter-agent/.gradio/certificate.pem +0 -31
  74. jupyter-agent/README.md +0 -16
  75. jupyter-agent/__main__.log +0 -8
  76. jupyter-agent/app.py +0 -256
  77. jupyter-agent/cloudops-agent.png +0 -0
  78. jupyter-agent/ds-system-prompt.txt +0 -154
  79. jupyter-agent/jupyter-agent.png +0 -0
  80. jupyter-agent/llama3_template.jinja +0 -123
  81. jupyter-agent/requirements.txt +0 -9
  82. jupyter-agent/tmp/4ojbs8a02ir/jupyter-agent.ipynb +0 -68
  83. jupyter-agent/tmp/cm5iasgpm3p/jupyter-agent.ipynb +0 -91
  84. jupyter-agent/tmp/crqbsseag5/jupyter-agent.ipynb +0 -91
  85. jupyter-agent/tmp/hohanq1u097/jupyter-agent.ipynb +0 -57
  86. jupyter-agent/tmp/jns1sam29wm/jupyter-agent.ipynb +0 -53
  87. jupyter-agent/tmp/jupyter-agent.ipynb +0 -27
  88. jupyter-agent/utils.py +0 -409
  89. runbooks/aws/__init__.py +0 -58
  90. runbooks/aws/dynamodb_operations.py +0 -231
  91. runbooks/aws/ec2_copy_image_cross-region.py +0 -195
  92. runbooks/aws/ec2_describe_instances.py +0 -202
  93. runbooks/aws/ec2_ebs_snapshots_delete.py +0 -186
  94. runbooks/aws/ec2_run_instances.py +0 -213
  95. runbooks/aws/ec2_start_stop_instances.py +0 -212
  96. runbooks/aws/ec2_terminate_instances.py +0 -143
  97. runbooks/aws/ec2_unused_eips.py +0 -196
  98. runbooks/aws/ec2_unused_volumes.py +0 -188
  99. runbooks/aws/s3_create_bucket.py +0 -142
  100. runbooks/aws/s3_list_buckets.py +0 -152
  101. runbooks/aws/s3_list_objects.py +0 -156
  102. runbooks/aws/s3_object_operations.py +0 -183
  103. runbooks/aws/tagging_lambda_handler.py +0 -183
  104. runbooks/inventory/FAILED_SCRIPTS_TROUBLESHOOTING.md +0 -619
  105. runbooks/inventory/PASSED_SCRIPTS_GUIDE.md +0 -738
  106. runbooks/inventory/aws_organization.png +0 -0
  107. runbooks/inventory/cfn_move_stack_instances.py +0 -1526
  108. runbooks/inventory/delete_s3_buckets_objects.py +0 -169
  109. runbooks/inventory/lockdown_cfn_stackset_role.py +0 -224
  110. runbooks/inventory/update_aws_actions.py +0 -173
  111. runbooks/inventory/update_cfn_stacksets.py +0 -1215
  112. runbooks/inventory/update_cloudwatch_logs_retention_policy.py +0 -294
  113. runbooks/inventory/update_iam_roles_cross_accounts.py +0 -478
  114. runbooks/inventory/update_s3_public_access_block.py +0 -539
  115. runbooks/organizations/__init__.py +0 -12
  116. runbooks/organizations/manager.py +0 -374
  117. runbooks-0.7.0.dist-info/METADATA +0 -375
  118. /runbooks/inventory/{tests → Tests}/common_test_data.py +0 -0
  119. /runbooks/inventory/{tests → Tests}/common_test_functions.py +0 -0
  120. /runbooks/inventory/{tests → Tests}/script_test_data.py +0 -0
  121. /runbooks/inventory/{tests → Tests}/setup.py +0 -0
  122. /runbooks/inventory/{tests → Tests}/src.py +0 -0
  123. /runbooks/inventory/{tests/test_inventory_modules.py → Tests/test_Inventory_Modules.py} +0 -0
  124. /runbooks/inventory/{tests → Tests}/test_cfn_describe_stacks.py +0 -0
  125. /runbooks/inventory/{tests → Tests}/test_ec2_describe_instances.py +0 -0
  126. /runbooks/inventory/{tests → Tests}/test_lambda_list_functions.py +0 -0
  127. /runbooks/inventory/{tests → Tests}/test_moto_integration_example.py +0 -0
  128. /runbooks/inventory/{tests → Tests}/test_org_list_accounts.py +0 -0
  129. /runbooks/inventory/{Inventory_Modules.py → inventory_modules.py} +0 -0
  130. /runbooks/{aws → operate}/tags.json +0 -0
  131. {runbooks-0.7.0.dist-info → runbooks-0.7.6.dist-info}/WHEEL +0 -0
  132. {runbooks-0.7.0.dist-info → runbooks-0.7.6.dist-info}/licenses/LICENSE +0 -0
@@ -1,154 +0,0 @@
1
- # Data Science Agent Protocol
2
-
3
- You are an intelligent data science assistant with access to an IPython interpreter. Your primary goal is to solve analytical tasks through careful, iterative exploration and execution of code. You must avoid making assumptions and instead verify everything through code execution.
4
-
5
- ## Core Principles
6
- 1. Always execute code to verify assumptions
7
- 2. Break down complex problems into smaller steps
8
- 3. Learn from execution results
9
- 4. Maintain clear communication about your process
10
-
11
- ## Available Packages
12
- You have access to these pre-installed packages:
13
-
14
- ### Core Data Science
15
- - numpy (1.26.4)
16
- - pandas (1.5.3)
17
- - scipy (1.12.0)
18
- - scikit-learn (1.4.1.post1)
19
-
20
- ### Visualization
21
- - matplotlib (3.9.2)
22
- - seaborn (0.13.2)
23
- - plotly (5.19.0)
24
- - bokeh (3.3.4)
25
- - e2b_charts (latest)
26
-
27
- ### Image & Signal Processing
28
- - opencv-python (4.9.0.80)
29
- - pillow (9.5.0)
30
- - scikit-image (0.22.0)
31
- - imageio (2.34.0)
32
-
33
- ### Text & NLP
34
- - nltk (3.8.1)
35
- - spacy (3.7.4)
36
- - gensim (4.3.2)
37
- - textblob (0.18.0)
38
-
39
- ### Audio Processing
40
- - librosa (0.10.1)
41
- - soundfile (0.12.1)
42
-
43
- ### File Handling
44
- - python-docx (1.1.0)
45
- - openpyxl (3.1.2)
46
- - xlrd (2.0.1)
47
-
48
- ### Other Utilities
49
- - requests (2.26.0)
50
- - beautifulsoup4 (4.12.3)
51
- - sympy (1.12)
52
- - xarray (2024.2.0)
53
- - joblib (1.3.2)
54
-
55
- ## Environment Constraints
56
- - You cannot install new packages or libraries
57
- - Work only with pre-installed packages in the environment
58
- - If a solution requires a package that's not available:
59
- 1. Check if the task can be solved with base libraries
60
- 2. Propose alternative approaches using available packages
61
- 3. Inform the user if the task cannot be completed with current limitations
62
-
63
- ## Analysis Protocol
64
-
65
- ### 1. Initial Assessment
66
- - Acknowledge the user's task and explain your high-level approach
67
- - List any clarifying questions needed before proceeding
68
- - Identify which available files might be relevant from: {}
69
- - Verify which required packages are available in the environment
70
-
71
- ### 2. Data Exploration
72
- Execute code to:
73
- - Read and validate each relevant file
74
- - Determine file formats (CSV, JSON, etc.)
75
- - Check basic properties:
76
- - Number of rows/records
77
- - Column names and data types
78
- - Missing values
79
- - Basic statistical summaries
80
- - Share key insights about the data structure
81
-
82
- ### 3. Execution Planning
83
- - Based on the exploration results, outline specific steps to solve the task
84
- - Break down complex operations into smaller, verifiable steps
85
- - Identify potential challenges or edge cases
86
-
87
- ### 4. Iterative Solution Development
88
- For each step in your plan:
89
- - Write and execute code for that specific step
90
- - Verify the results meet expectations
91
- - Debug and adjust if needed
92
- - Document any unexpected findings
93
- - Only proceed to the next step after current step is working
94
-
95
- ### 5. Result Validation
96
- - Verify the solution meets all requirements
97
- - Check for edge cases
98
- - Ensure results are reproducible
99
- - Document any assumptions or limitations
100
-
101
- ## Error Handling Protocol
102
- When encountering errors:
103
- 1. Show the error message
104
- 2. Analyze potential causes
105
- 3. Propose specific fixes
106
- 4. Execute modified code
107
- 5. Verify the fix worked
108
- 6. Document the solution for future reference
109
-
110
- ## Communication Guidelines
111
- - Explain your reasoning at each step
112
- - Share relevant execution results
113
- - Highlight important findings or concerns
114
- - Ask for clarification when needed
115
- - Provide context for your decisions
116
-
117
- ## Code Execution Rules
118
- - Execute code through the IPython interpreter directly
119
- - Understand that the environment is stateful (like a Jupyter notebook):
120
- - Variables and objects from previous executions persist
121
- - Reference existing variables instead of recreating them
122
- - Only rerun code if variables are no longer in memory or need updating
123
- - Don't rewrite or re-execute code unnecessarily:
124
- - Use previously computed results when available
125
- - Only rewrite code that needs modification
126
- - Indicate when you're using existing variables from previous steps
127
- - Run code after each significant change
128
- - Don't show code blocks without executing them
129
- - Verify results before proceeding
130
- - Keep code segments focused and manageable
131
-
132
- ## Memory Management Guidelines
133
- - Track important variables and objects across steps
134
- - Clear large objects when they're no longer needed
135
- - Inform user about significant objects kept in memory
136
- - Consider memory impact when working with large datasets:
137
- - Avoid creating unnecessary copies of large data
138
- - Use inplace operations when appropriate
139
- - Clean up intermediate results that won't be needed later
140
-
141
- ## Best Practices
142
- - Use descriptive variable names
143
- - Include comments for complex operations
144
- - Handle errors gracefully
145
- - Clean up resources when done
146
- - Document any dependencies
147
- - Prefer base Python libraries when possible
148
- - Verify package availability before using
149
- - Leverage existing computations:
150
- - Check if required data is already in memory
151
- - Reference previous results instead of recomputing
152
- - Document which existing variables you're using
153
-
154
- Remember: Verification through execution is always better than assumption!
Binary file
@@ -1,123 +0,0 @@
1
- {{- bos_token }}
2
- {%- if custom_tools is defined %}
3
- {%- set tools = custom_tools %}
4
- {%- endif %}
5
- {%- if not tools_in_user_message is defined %}
6
- {%- set tools_in_user_message = true %}
7
- {%- endif %}
8
- {%- if not date_string is defined %}
9
- {%- set date_string = "26 Jul 2024" %}
10
- {%- endif %}
11
- {%- if not tools is defined %}
12
- {%- set tools = none %}
13
- {%- endif %}
14
-
15
- {#- This block extracts the system message, so we can slot it into the right place. #}
16
- {%- if messages[0]['role'] == 'system' %}
17
- {%- set system_message = messages[0]['content']|trim %}
18
- {%- set messages = messages[1:] %}
19
- {%- else %}
20
- {%- set system_message = "" %}
21
- {%- endif %}
22
-
23
- {#- System message + builtin tools #}
24
- {{- "<|start_header_id|>system<|end_header_id|>\n\n" }}
25
- {%- if builtin_tools is defined or tools is not none %}
26
- {{- "Environment: ipython\n" }}
27
- {%- endif %}
28
- {%- if builtin_tools is defined %}
29
- {%- set filtered_tools = builtin_tools | reject('equalto', 'code_interpreter') | list %}
30
- {%- if filtered_tools | length > 0 %}
31
- {{- "Tools: " + filtered_tools | join(", ") + "\n\n"}}
32
- {%- else %}
33
- {{- "\n" }}
34
- {%- endif %}
35
- {%- endif %}
36
- {{- "Cutting Knowledge Date: December 2023\n" }}
37
- {{- "Today Date: " + date_string + "\n\n" }}
38
- {%- if tools is not none and not tools_in_user_message %}
39
- {{- "You have access to the following functions. To call a function, please respond with JSON for a function call." }}
40
- {{- 'Respond in the format {"name": function name, "parameters": dictionary of argument name and its value}.' }}
41
- {{- "Do not use variables.\n\n" }}
42
- {%- for t in tools %}
43
- {{- t | tojson(indent=4) }}
44
- {{- "\n\n" }}
45
- {%- endfor %}
46
- {%- endif %}
47
- {{- system_message }}
48
- {{- "<|eot_id|>" }}
49
-
50
- {#- Custom tools are passed in a user message with some extra guidance #}
51
- {%- if tools_in_user_message and not tools is none %}
52
- {#- Extract the first user message so we can plug it in here #}
53
- {%- if messages | length != 0 %}
54
- {%- set first_user_message = messages[0]['content']|trim %}
55
- {%- set messages = messages[1:] %}
56
- {%- else %}
57
- {{- raise_exception("Cannot put tools in the first user message when there's no first user message!") }}
58
- {%- endif %}
59
- {{- '<|start_header_id|>user<|end_header_id|>\n\n' -}}
60
- {{- "Given the following functions, please respond with a JSON for a function call " }}
61
- {{- "with its proper arguments that best answers the given prompt.\n\n" }}
62
- {{- 'Respond in the format {"name": function name, "parameters": dictionary of argument name and its value}.' }}
63
- {{- "Do not use variables.\n\n" }}
64
- {%- for t in tools %}
65
- {{- t | tojson(indent=4) }}
66
- {{- "\n\n" }}
67
- {%- endfor %}
68
- {{- first_user_message + "<|eot_id|>"}}
69
- {%- endif %}
70
-
71
- {%- for message in messages %}
72
- {%- if not (message.role == 'ipython' or message.role == 'tool' or 'tool_calls' in message) %}
73
- {{- '<|start_header_id|>' + message['role'] + '<|end_header_id|>\n\n'+ message['content'] | trim}}
74
- {%- if loop.nextitem and loop.nextitem.role == 'assistant' and message.role == 'assistant' %}
75
- {{- '<|eom_id|>' }}
76
- {%- else %}
77
- {{- '<|eot_id|>' }}
78
- {%- endif %}
79
- {%- elif 'tool_calls' in message %}
80
- {%- if not message.tool_calls|length == 1 %}
81
- {{- raise_exception("This model only supports single tool-calls at once!") }}
82
- {%- endif %}
83
- {%- set tool_call = message.tool_calls[0].function %}
84
- {%- if builtin_tools is defined and tool_call.name in builtin_tools %}
85
- {{- '<|start_header_id|>assistant<|end_header_id|>\n\n' -}}
86
- {%- if tool_call.name == "code_interpreter" %}
87
- {{- "<|python_tag|>" + tool_call.arguments.code }}
88
- {%- else %}
89
- {{- "<|python_tag|>" + tool_call.name + ".call(" }}
90
- {%- for arg_name, arg_val in tool_call.arguments | items %}
91
- {{- arg_name + '="' + arg_val + '"' }}
92
- {%- if not loop.last %}
93
- {{- ", " }}
94
- {%- endif %}
95
- {%- endfor %}
96
- {{- ")" }}
97
- {%- endif %}
98
- {%- else %}
99
- {{- '<|start_header_id|>assistant<|end_header_id|>\n\n' -}}
100
- {{- '{"name": "' + tool_call.name + '", ' }}
101
- {{- '"parameters": ' }}
102
- {{- tool_call.arguments | tojson }}
103
- {{- "}" }}
104
- {%- endif %}
105
- {%- if builtin_tools is defined %}
106
- {#- This means we're in ipython mode #}
107
- {{- "<|eom_id|>" }}
108
- {%- else %}
109
- {{- "<|eot_id|>" }}
110
- {%- endif %}
111
- {%- elif message.role == "tool" or message.role == "ipython" %}
112
- {{- "<|start_header_id|>ipython<|end_header_id|>\n\n" }}
113
- {%- if not message.content is string and (message.content is mapping or message.content is iterable) %}
114
- {{- message.content | tojson }}
115
- {%- else %}
116
- {{- message.content }}
117
- {%- endif %}
118
- {{- "<|eot_id|>" }}
119
- {%- endif %}
120
- {%- endfor %}
121
- {%- if add_generation_prompt %}
122
- {{- '<|start_header_id|>assistant<|end_header_id|>\n\n' }}
123
- {%- endif %}
@@ -1,9 +0,0 @@
1
- nbformat
2
- nbconvert
3
- huggingface_hub
4
- e2b-code-interpreter
5
- transformers
6
- traitlets
7
- gradio
8
- ## For local development, to load environment variables from a .env file
9
- python-dotenv
@@ -1,68 +0,0 @@
1
- {
2
- "metadata": {
3
- "kernel_info": {
4
- "name": "python3"
5
- },
6
- "language_info": {
7
- "name": "python",
8
- "version": "3.12"
9
- }
10
- },
11
- "nbformat": 4,
12
- "nbformat_minor": 0,
13
- "cells": [
14
- {
15
- "cell_type": "markdown",
16
- "metadata": {},
17
- "source": "<p align=\"center\">\n <img src=\"https://huggingface.co/spaces/lvwerra/jupyter-agent/resolve/main/cloudops-agent.png\" />\n</p>\n\n\n<p style=\"text-align:center;\">Let a LLM agent write and execute code inside a notebook!</p>"
18
- },
19
- {
20
- "cell_type": "markdown",
21
- "metadata": {},
22
- "source": "<details>\n <summary style=\"display: flex; align-items: center;\">\n <div class=\"alert alert-block alert-info\" style=\"margin: 0; width: 100%;\">\n <b>System: <span class=\"arrow\">\u25b6</span></b>\n </div>\n </summary>\n <div class=\"alert alert-block alert-info\">\n # Data Science Agent Protocol<br><br>You are an intelligent data science assistant with access to an IPython interpreter. Your primary goal is to solve analytical tasks through careful, iterative exploration and execution of code. You must avoid making assumptions and instead verify everything through code execution.<br><br>## Core Principles<br>1. Always execute code to verify assumptions<br>2. Break down complex problems into smaller steps<br>3. Learn from execution results<br>4. Maintain clear communication about your process<br><br>## Available Packages<br>You have access to these pre-installed packages:<br><br>### Core Data Science<br>- numpy (1.26.4)<br>- pandas (1.5.3)<br>- scipy (1.12.0)<br>- scikit-learn (1.4.1.post1)<br><br>### Visualization<br>- matplotlib (3.9.2)<br>- seaborn (0.13.2)<br>- plotly (5.19.0)<br>- bokeh (3.3.4)<br>- e2b_charts (latest)<br><br>### Image & Signal Processing<br>- opencv-python (4.9.0.80)<br>- pillow (9.5.0)<br>- scikit-image (0.22.0)<br>- imageio (2.34.0)<br><br>### Text & NLP<br>- nltk (3.8.1)<br>- spacy (3.7.4)<br>- gensim (4.3.2)<br>- textblob (0.18.0)<br><br>### Audio Processing<br>- librosa (0.10.1)<br>- soundfile (0.12.1)<br><br>### File Handling<br>- python-docx (1.1.0)<br>- openpyxl (3.1.2)<br>- xlrd (2.0.1)<br><br>### Other Utilities<br>- requests (2.26.0)<br>- beautifulsoup4 (4.12.3)<br>- sympy (1.12)<br>- xarray (2024.2.0)<br>- joblib (1.3.2)<br><br>## Environment Constraints<br>- You cannot install new packages or libraries<br>- Work only with pre-installed packages in the environment<br>- If a solution requires a package that's not available:<br> 1. Check if the task can be solved with base libraries<br> 2. Propose alternative approaches using available packages<br> 3. Inform the user if the task cannot be completed with current limitations<br><br>## Analysis Protocol<br><br>### 1. Initial Assessment<br>- Acknowledge the user's task and explain your high-level approach<br>- List any clarifying questions needed before proceeding<br>- Identify which available files might be relevant from: - <br>- Verify which required packages are available in the environment<br><br>### 2. Data Exploration<br>Execute code to:<br>- Read and validate each relevant file<br>- Determine file formats (CSV, JSON, etc.)<br>- Check basic properties:<br> - Number of rows/records<br> - Column names and data types<br> - Missing values<br> - Basic statistical summaries<br>- Share key insights about the data structure<br><br>### 3. Execution Planning<br>- Based on the exploration results, outline specific steps to solve the task<br>- Break down complex operations into smaller, verifiable steps<br>- Identify potential challenges or edge cases<br><br>### 4. Iterative Solution Development<br>For each step in your plan:<br>- Write and execute code for that specific step<br>- Verify the results meet expectations<br>- Debug and adjust if needed<br>- Document any unexpected findings<br>- Only proceed to the next step after current step is working<br><br>### 5. Result Validation<br>- Verify the solution meets all requirements<br>- Check for edge cases<br>- Ensure results are reproducible<br>- Document any assumptions or limitations<br><br>## Error Handling Protocol<br>When encountering errors:<br>1. Show the error message<br>2. Analyze potential causes<br>3. Propose specific fixes<br>4. Execute modified code<br>5. Verify the fix worked<br>6. Document the solution for future reference<br><br>## Communication Guidelines<br>- Explain your reasoning at each step<br>- Share relevant execution results<br>- Highlight important findings or concerns<br>- Ask for clarification when needed<br>- Provide context for your decisions<br><br>## Code Execution Rules<br>- Execute code through the IPython interpreter directly<br>- Understand that the environment is stateful (like a Jupyter notebook):<br> - Variables and objects from previous executions persist<br> - Reference existing variables instead of recreating them<br> - Only rerun code if variables are no longer in memory or need updating<br>- Don't rewrite or re-execute code unnecessarily:<br> - Use previously computed results when available<br> - Only rewrite code that needs modification<br> - Indicate when you're using existing variables from previous steps<br>- Run code after each significant change<br>- Don't show code blocks without executing them<br>- Verify results before proceeding<br>- Keep code segments focused and manageable<br><br>## Memory Management Guidelines<br>- Track important variables and objects across steps<br>- Clear large objects when they're no longer needed<br>- Inform user about significant objects kept in memory<br>- Consider memory impact when working with large datasets:<br> - Avoid creating unnecessary copies of large data<br> - Use inplace operations when appropriate<br> - Clean up intermediate results that won't be needed later<br><br>## Best Practices<br>- Use descriptive variable names<br>- Include comments for complex operations<br>- Handle errors gracefully<br>- Clean up resources when done<br>- Document any dependencies<br>- Prefer base Python libraries when possible<br>- Verify package availability before using<br>- Leverage existing computations:<br> - Check if required data is already in memory<br> - Reference previous results instead of recomputing<br> - Document which existing variables you're using<br><br>Remember: Verification through execution is always better than assumption!\n </div>\n</details>\n\n<style>\ndetails > summary .arrow {\n display: inline-block;\n transition: transform 0.2s;\n}\ndetails[open] > summary .arrow {\n transform: rotate(90deg);\n}\n</style>\n"
23
- },
24
- {
25
- "cell_type": "markdown",
26
- "metadata": {},
27
- "source": "<div class=\"alert alert-block alert-success\">\n<b>User:</b> Solve the Lotka-Volterra equation and plot the results.\n</div>\n"
28
- },
29
- {
30
- "cell_type": "markdown",
31
- "metadata": {},
32
- "source": "### Step 1: Import necessary packages\n\nThe Lotka-Volterra equations describe the dynamics of predator-prey systems. To solve and visualize these equations, we'll use `scipy` for numerical integration, `numpy` for array operations, and `matplotlib` for plotting.\n\n```python\nimport numpy as np\nfrom scipy.integrate import odeint\nimport matplotlib.pyplot as plt\n```\n\n### Step 2: Define the Lotka-Volterra model\n\nThe Lotka-Volterra model consists of four differential equations representing the population dynamics of two species, prey (`r`), and predators (`p`). We will implement these equations as a system of ordinary differential equations (ODEs).\n\n```python\ndef lotka_volterra(state, t, a, b, c, d):\n r = state[0]\n p = state[1]\n\n drdt = a * r - b * r * p\n dpdt = -c * p + d * r * p\n \n return [drdt, dpdt]\n```\n\n### Step 3: Set parameters and initial conditions\n\nWe need to specify the system parameters (`a`, `b`, `c`, `d`) and the initial conditions (`r0`, `p0`) for both populations (prey and predators) at time `t=0`.\n\n```python\n# System parameters (Lotka-Volterra model)\na = 0.5 # Prey growth rate\nb = 0.02 # Predation rate\nc = 0.01 # Predator mortality rate\nd = 0.001 # Conversion efficiency of prey consumption\n\n# Initial conditions\nr0 = 100 # Initial prey population\np0 = 50 # Initial predator population\n\n# Time points to solve ODE (from 0 to 100 with 1000 intervals)\nt = np.linspace(0, 100, 1000)\n```\n\n### Step 4: Solve the ODE\n\nNext, we will numerically integrate the Lotka-Volterra model using `scipy.integrate.odeint`.\n\n```python\n# Solve the Lotka-Volterra model\nstate0 = [r0, p0] # Initial state vector\nsolution = odeint(lotka_volterra, state0, t, args=(a, b, c, d))\nr, p = solution.T\n```\n\n### Step 5: Plot the results\n\nFinally, let's create a"
33
- },
34
- {
35
- "cell_type": "code",
36
- "execution_count": 1,
37
- "metadata": {},
38
- "source": "import numpy as np\nfrom scipy.integrate import odeint\nimport matplotlib.pyplot as plt\n\n# Define the Lotka-Volterra model\ndef lotka_volterra(state, t, a, b, c, d):\n r = state[0]\n p = state[1]\n\n drdt = a * r - b * r * p\n dpdt = -c * p + d * r * p\n \n return [drdt, dpdt]\n\n# System parameters (Lotka-Volterra model)\na = 0.5 # Prey growth rate\nb = 0.02 # Predation rate\nc = 0.01 # Predator mortality rate\nd = 0.001 # Conversion efficiency of prey consumption\n\n# Initial conditions\nr0 = 100 # Initial prey population\np0 = 50 # Initial predator population\n\n# Time points to solve ODE (from 0 to 100 with 1000 intervals)\nt = np.linspace(0, 100, 1000)\n\n# Solve the Lotka-Volterra model\nstate0 = [r0, p0] # Initial state vector\nsolution = odeint(lotka_volterra, state0, t, args=(a, b, c, d))\nr, p = solution.T\n\n# Plot the results\nplt.figure(figsize=(10, 5))\n\nplt.subplot(121)\nplt.plot(t, r, label='Prey population')\nplt.plot(t, p, label='Predator population')\nplt.xlabel('Time')\nplt.ylabel('Population size')\nplt.title('Lotka-Volterra Model')\nplt.legend()\n\nplt.subplot(122)\nplt.plot(r, p)\nplt.xlabel('Prey population')\nplt.ylabel('Predator population')\nplt.title('Phase plane')\n\nplt.tight_layout()\nplt.show()",
39
- "outputs": [
40
- {
41
- "output_type": "display_data",
42
- "metadata": {},
43
- "data": {
44
- "text/plain": [
45
- "<Figure size 1000x500 with 2 Axes>"
46
- ],
47
- "image/png": "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8kuqVavGokWLbGqYMmXKDV1v0KBB3H///fj7+9O9e/erPqYwf+8RERHW39Rf6a/PjY6OBiAwMJDOnTvfUO0iIlK6rVixgvPnz7No0SLatWtnPf/X7uh5GjRoQIMGDZg4cSJr1qyhdevWvP3228yYMaPIPn8PHDhgMxhw8OBBcnJy/rbhZ0F/ZimovM9IX19ffUZKmaI13iIF5OTkxO233863335rM+Xq9OnTLFiwgDZt2linCHt5eQHGh861hIWFsXTpUi5dusRtt93G+fPnbV4r7ze/eb744gtOnDhhc65z5842x5Uj4H369MHT05O33nqLn3/+mX79+uHu7m69v3v37sTFxdl0V83KyuL111/H29ubW2+99Zq1X+v99evXDycnJ6ZNm5avfovFYvMeb0Teb8mvvPb69etZu3btDV3vX//6F1OmTOGtt9665pT3wvy9d+/enXXr1rFhwwbr486ePcv8+fNtrtmlSxd8fX159tlnbabLX/kcEREp2672mZaRkcFbb71l87jExESysrJszjVo0ACz2Ux6ejpQdJ+/b775ps3t119/HTD2Lv+791GQn1kKqlmzZkRHR/PSSy+RnJyc7359RkpppRFvkb/48MMPWbx4cb7zY8aMYcaMGfz666+0adOGhx56CGdnZ9555x3S09N54YUXrI9t3LgxTk5OPP/88yQkJODm5kbHjh3zbVVVvXp1fvnlF9q3b0+XLl347bff8PX1pWfPnkyfPp1hw4Zxyy23sHPnTubPn2/T3Ot6vL296dOnDwsWLADIN8185MiRvPPOOwwdOpTNmzcTGRnJl19+yerVq5k1a9ZV1zvnadasGQD//e9/GTBgAC4uLvTq1Yvo6GhmzJjBhAkTOHLkCH369MHHx4eYmBi+/vprRo4cyeOPP17g9/BXPXv2ZNGiRfTt25cePXoQExPD22+/Td26da/64Xw9fn5+TJ069bqPK+jf+/jx4/nkk0/o2rUrY8aMsW4nlje7II+vry9z5szh3//+N02bNmXAgAFUrlyZY8eO8eOPP9K6dWveeOONQr8fEREpPW655RYqVKjAkCFDGD16NCaTiU8++SRfiP3tt98YNWoUd955JzVr1iQrK4tPPvkEJycn+vfvD1Bkn78xMTH07t2brl27snbtWj799FMGDRpEo0aNrvmcoviZ5Upms5n333+fbt26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2w5cclvcax9vEREpq7p162b9umHDhrRs2ZKIiAj+97//4eHhcUPXnDBhAuPGjbPeTkxMJDw8/B/XCpCjqeYiIuVOkK87vRqF0qtRKADnk4014ZV93Iq9lhK9CVp2djaTJk0iKioKDw8PoqOjefrpp63rtMBYszV58mRCQkLw8PCgc+fOHDhwwIFVa423iIiUP/7+/tSsWZODBw8SHBxMRkYG8fHxNo85ffr0VdeE53Fzc8PX19fmKGoa8RYRKb8CvN3oWj+YZhEViv21S3Twfv7555kzZw5vvPEGe/bs4fnnn+eFF17g9ddftz7mhRdeYPbs2bz99tusX78eLy8vunTpQlpamsPqdtWIt4iIlDPJyckcOnSIkJAQmjVrhouLC8uWLbPev2/fPo4dO0arVq0cWKWIiIhjlOip5mvWrOGOO+6gR48eAERGRvLZZ5+xYcMGwBjtnjVrFhMnTuSOO+4A4OOPPyYoKIhvvvmGAQMGOKRuN+t2YgreIiJSNj3++OP06tWLiIgITp48yZQpU3BycmLgwIH4+fkxfPhwxo0bR8WKFfH19eWRRx6hVatWDuloLiIi4mglesT7lltuYdmyZezfvx+A7du388cff1jXlcXExBAXF2fTNdXPz4+WLVuydu3aa143PT2dxMREm6MouTgb09g04i0iImXV8ePHGThwILVq1eKuu+4iICCAdevWUblyZQBeffVVevbsSf/+/WnXrh3BwcEsWrTIwVWLiIg4Roke8X7qqadITEykdu3aODk5kZ2dzTPPPMPgwYMBrJ1Rg4KCbJ7nyK6pAK5OToBGvEVEpOxauHDh397v7u7Om2++yZtvvllMFYmIiJRcJXrE+3//+x/z589nwYIFbNmyhY8++oiXXnqJjz766B9dd8KECSQkJFiP2NjYIqrYoDXeIiIiIiIikqdEj3g/8cQTPPXUU9a12g0aNODo0aPMnDmTIUOGWDujnj59mpCQEOvzTp8+TePGja95XTc3N9zc7NdCXsFbRERERERE8pToEe/U1FTMZtsSnZycyMkxAm1UVBTBwcE2XVMTExNZv369Q7umujjlrvHWVHMREREREZFyr0SPePfq1YtnnnmGqlWrUq9ePbZu3corr7zCfffdBxh7cT766KPMmDGDGjVqEBUVxaRJkwgNDaVPnz4Oq9vNWft4i4iIiIiIiKFEB+/XX3+dSZMm8dBDD3HmzBlCQ0N54IEHmDx5svUx48ePJyUlhZEjRxIfH0+bNm1YvHgx7u7uDqvb2lxNU81FRERERETKvRIdvH18fJg1axazZs265mNMJhPTp09n+vTpxVfYdWiNt4iIiIiIiOQp0Wu8SyvrGm8FbxERERERkXJPwdsO8ka807XGW0REREREpNxT8LYD1yuaq1ksFgdXIyIiIiIiIo6k4G0HbrnN1SwWyMpR8BYRERERESnPFLztwMXZZP1a67xFRERERETKNwVvO3B1uvxtVfAWEREREREp3xS87cDZyYw5d9A7Uw3WREREREREyjUFbzuxdjbXiLeIiIiIiEi5puBtJy65080zNOItIiIiIiJSril424lb7oi31niLiIiIiIiUbwredpLXYE3BW0REREREpHxT8LaTvDXeaq4mIiJSAlgcXYCIiJRnCt524qqp5iIiIiWOydEFiIhIuaTgbSd5zdXSNeItIiIiIiJSril424lGvEVERERERAQUvO0mr7ma1niLiIiIiIiUbwredqIRbxEREREREQEFb7vRdmIiIiIiIiICCt52Yx3x1lRzERERERGRck3B20401VxERERERERAwdturFPNNeItIiIiIiJSril424mLRrxFREREREQEBW+7UXM1ERERERERAQVvu3HTiLeIiIiIiIig4G03ec3VMrXGW0REREREpFxT8LYTFzVXExERERERERS87SZvxDtdU81FRERERETKNQVvO1FzNREREREREQEFb7vRGm8REREREREBBW+70Yi3iIiIiIiIgIK33eSNeKu5moiIiIiISPmm4G0nrtrHW0RERERERFDwthtNNRcRERERERFQ8LYbF+tUc4uDKxERERERERFHUvC2k8sj3tkOrkRERET0a3AREXEkBW87UXM1ERGRksdkcnQFIiJSHil424mbmquJiEgJk52dzQcffMCgQYPo3LkzHTt2tDlu1HPPPYfJZOLRRx+1nmvfvj0mk8nmePDBB4vgXYiIiJQ+zo4uoKxyyZ1qnqk13iIiUkKMGTOGefPm0aNHD+rXr4+pCIZ/N27cyDvvvEPDhg3z3TdixAimT59uve3p6fmPX09ERKQ0UvC2E20nJiIiJc3ChQv53//+R/fu3YvkesnJyQwePJj33nuPGTNm5Lvf09OT4ODgInktERGR0kxTze1E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WsuN0D7eIiJSkkybNo1XXnmFu+++m4SEBMaNG0e/fv0wm81MnTrV0eWJiIiUWYUO3nkhu1+/fvz+++98+eWXdOvWjfj4+KKuje+++47mzZtz5513EhgYSJMmTXjvvfes98fExBAXF0fnzp2t5/z8/GjZsiVr164t8noKS83VRESkJJk/fz7vvfcejz32GM7OzgwcOJD333+fyZMn51tCJiIiIkXnhqaa52nSpAkbNmwgPj6eTp06FVVNVocPH2bOnDnUqFGDJUuW8J///IfRo0fz0UcfARAXFwdAUFCQzfOCgoKs911Neno6iYmJNoc9uGmNt4iIlCBxcXE0aNAAAG9vbxISEgDo2bMnP/74oyNLExERKdMKHbyHDBmCh4eH9XZwcDArV66kU6dOVK1atUiLy8nJoWnTpjz77LM0adKEkSNHMmLECN5+++1/dN2ZM2fi5+dnPa7szl6UrF3NtY+3iIiUAGFhYZw6dQqA6OhofvnlFwA2btyIm5ubI0sTEREp0wodvOfOnYuPj4/NOTc3Nz766CNiYmKKrDCAkJAQ6tata3OuTp06HDt2DDBCP8Dp06dtHnP69GnrfVczYcIEEhISrEdsbGyR1p1HU81FRKQk6du3L8uWLQPgkUceYdKkSdSoUYN7772X++67z8HViYiIlF0F2sd7x44d1K9fH7PZzI4dO/72sQ0bNiySwgBat27Nvn37bM7t37+fiIgIAKKioggODmbZsmU0btwYgMTERNavX89//vOfa17Xzc2tWH6zb51qrhFvEREpAZ577jnr13fffTdVq1Zl7dq11KhRg169ejmwMhERkbKtQMG7cePGxMXFERgYSOPGjTGZTDZbh+XdNplMZGcXXcgcO3Yst9xyC88++yx33XUXGzZs4N133+Xdd9+1vu6jjz7KjBkzqFGjBlFRUUyaNInQ0FD69OlTZHXcKHcXjXiLiEjJ1apVK1q1auXoMkRERMq8AgXvmJgYKleubP26uNx00018/fXXTJgwgenTpxMVFcWsWbMYPHiw9THjx48nJSWFkSNHEh8fT5s2bVi8eDHu7u7FVue1qLmaiIg42nfffVfgx/bu3duOlYiIiJRfBQreeVO7//p1cejZsyc9e/a85v0mk4np06czffr0YqyqYKzN1bSPt4iIOEhBZ4AV9aw1ERERuazQzdU++ugjmy1Hxo8f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gB+x4g0AAAAAgB/ReAMAAAAA4Ec03gAAAAAA+BGNdytbtmyZevbsqbCwMI0ePVq7d++2OqSAkZeXp5EjRyoqKkqJiYmaPn26ioqKfObU1NQoOztb8fHxioyM1IwZM1RaWmpRxIHniSeekM1m08KFC71j5OzyPv30U/3TP/2T4uPjFR4ersGDB2vv3r3e/cYYPfroo0pJSVF4eLgmTpyoDz/80MKIrdXQ0KDFixerV69eCg8PV58+ffSzn/1MX74NCDmT3n77bd12221KTU2VzWbTK6+84rO/KTk6c+aMZs2apejoaMXGxmrevHmqqqpqw2/ROVGfG0d9vnbU56ajPjcP9blp2kV9Nmg1a9asMQ6Hw/z+9783f/vb38y9995rYmNjTWlpqdWhBYTJkyebFStWmIMHD5p9+/aZW265xaSnp5uqqirvnPnz55u0tDSTn59v9u7da77xjW+YG2+80cKoA8fu3btNz549zZAhQ8wDDzzgHSdnlzpz5ozp0aOHmTNnjtm1a5f56KOPzMaNG83Ro0e9c5544gkTExNjXnnlFbN//35z++23m169eplz585ZGLl1Hn/8cRMfH282bNhgjh8/btauXWsiIyPNM888451Dzox5/fXXzSOPPGLWrVtnJJn169f77G9KjqZMmWKGDh1qdu7cabZt22b69u1r7r777jb+Jp0L9fnKqM/XhvrcdNTn5qM+N017qM803q1o1KhRJjs72/u6oaHBpKammry8PAujClxlZWVGktm6dasxxpjy8nITEhJi1q5d651z+PBhI8ns2LHDqjADQmVlpenXr5/ZtGmTuemmm7yFnZxd3kMPPWS++c1vNrrf7Xab5ORk8+STT3rHysvLTWhoqHnxxRfbIsSAc+utt5p77rnHZ+yOO+4ws2bNMsaQs8v5amFvSo4OHTpkJJk9e/Z457zxxhvGZrOZTz/9tM1i72yoz81DfW466nPzUJ+bj/rcfIFanznVvJXU1taqsLBQEydO9I7Z7XZNnDhRO3bssDCywFVRUSFJiouLkyQVFhaqrq7OJ4f9+/dXenp6p89hdna2br31Vp/cSOSsMa+99ppGjBihO++8U4mJiRo2bJief/557/7jx4+rpKTEJ28xMTEaPXp0p83bjTfeqPz8fB05ckSStH//fm3fvl1Tp06VRM6aoik52rFjh2JjYzVixAjv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GRkZWrVq1SXH6tatmyQpMTFRt912m1asWKFevXrpjTfe0JYtW/z2HZrDbrfLGOMzdqVrqHfs2KFZs2Zp6dKlmjx5smJiYrRmzRr913/9l1/iu9zvGRd+pwACHY03AMsMHz5cf/7zn9WzZ89LfpkBAMBqXbp0Ud++fZs8f/jw4XrppZeUmJio6OjoRuf98z//s+6++251795dffr00ZgxY6567J07d+r73/++z+thw4ZJkgYMGKCVK1equrra+48B77zzjux2u/emb5JnRf7cuXMKDw/3HiMyMlJpaWmSPP848OUnmzidTh0/frzRmP7617+qR48eeuSRR7xjH3/8sc8ch8OhhoaGK363psYPtGecag7AMtnZ2Tpz5ozuvvtu7dmzR8eOHdPGjRs1d+7cqxZpAAACzaxZs5SQkKBp06Zp27ZtOn78uLZs2aIf/OAH+uSTT7zzJk+erOjoaP385z/X3Llzm3TstWvX6ve//72OHDmiJUuWaPfu3d6bj82aNUthYWHKysrSwYMHVVBQoAULFmj27Nney7wkzyPP5s2bp0OHDun111/XkiVLlJOTI7vd0xKMHz9eL7zwgrZt26YDBw4oKyvL59Tur+rXr59OnDihNWvW6NixY/rVr36l9evX+8zp2bOnjh8/rn379un06dNyuVyXzVtT4gfaMxpvAJZJTU3VO++8o4aGBk2aNEmDBw/WwoULFRsb6/0lAACA9iIiIkJvv/220tPTdccdd2jAgAGaN2+eampqfFbA7Xa75syZo4aGBp9V7CtZunSp1qxZoyFDhuiPf/yjXnzxRV1//fXez924caPOnDmjkSNH6h//8R81YcIEPfvssz7HmDBhgvr166exY8dq5syZuv32232uWc/NzdVNN92k73znO7r11ls1ffp09enTp9GYbr/9dj344IPKycnRDTfcoL/+9a9avHixz5wZM2ZoypQpuvnmm9WtWze9+OKLl81bU+IH2jOb+eqFHAAAAAD8at68eTp16pT3ueBXYrPZtH79ek2fPr3FnzdnzhyVl5f7PDsbQNvhokoAAACgjVRUVOjAgQNavXp1k5puAB0DjTcAAADQRqZNm6bdu3dr/vz5+va3v211OADaCKeaAwAAAADgR9y9CAAAAAAAP6LxBgAAAADAj2i8AQAAAADwIxpvAAAAAAD8iMYbAAAAAAA/ovEGAAAAAMCPaLwBAAAAAPAjGm8AAAAAAPyIxhsAAAAAAD/6/0N+XusaAChwAAAAAElFTkSuQmCC"
48
- }
49
- }
50
- ]
51
- },
52
- {
53
- "cell_type": "markdown",
54
- "metadata": {},
55
- "source": "This script solves the Lotka-Volterra equations and plots the time series of both populations as well as their phase plane trajectory. The phase plane shows how the prey and predator populations interact over time, illustrating the oscillatory nature of their dynamics."
56
- },
57
- {
58
- "cell_type": "markdown",
59
- "metadata": {},
60
- "source": "<div class=\"alert alert-block alert-success\">\n<b>User:</b> Solve the Lotka-Volterra equation and plot the results.\n</div>\n"
61
- },
62
- {
63
- "cell_type": "markdown",
64
- "metadata": {},
65
- "source": "In my previous response, I provided the corrected code snippet to solve the Lotka-Volterra equations and plot the results. Here it is again for clarity:\n\n\n```python\nimport numpy as np\nfrom scipy.integrate import odeint\nimport matplotlib.pyplot as plt\n\n# Define the Lotka-Volterra model\ndef lotka_volterra(state, t, a, b, c, d):\n r = state[0]\n p = state[1]\n\n drdt = a * r - b * r * p\n dpdt = -c * p + d * r * p\n \n return [drdt, dpdt]\n\n# System parameters (Lotka-Volterra model)\na = 0.5 # Prey growth rate\nb = 0.02 # Predation rate\nc = 0.03 # Predator mortality rate\nd = 0.0002 # Conversion efficiency of prey consumption\n\n# Initial conditions\nr0 = 100 # Initial prey population\np0 = 50 # Initial predator population\n\n# Time points to solve ODE (from 0 to 100 with 1000 intervals)\nt = np.linspace(0, 100, 1000)\n\n# Solve the Lotka-Volterra model\nstate0 = [r0, p0] # Initial state vector\nsolution = odeint(lotka_volterra, state0, t, args=(a, b, c, d))\nr, p = solution.T\n\n# Plot the results\nplt.figure(figsize=(10, 5))\n\nplt.subplot(121)\nplt.plot(t, r, label='Prey population')\nplt.plot(t, p, label='Predator population')\nplt.xlabel('Time')\nplt.ylabel('Population size')\nplt.title('Lotka-Volterra Model')\nplt.legend()\n\nplt.subplot(122)\nplt.plot(r, p)\nplt.xlabel('Prey population')\nplt.ylabel('Predator population')\nplt.title('Phase plane')\n\nplt.tight_layout()\nplt.show()\n```\n\nThis code defines the Lotka-Volterra equations, sets the system parameters and initial conditions, solves the equations using `scipy.integrate.odeint`, and plots the population sizes over time as well as their phase plane trajectory. The phase plane demonstrates the oscillatory behavior characteristic of Lotka-Volterra models."
66
- }
67
- ]
68
- }