-
Notifications
You must be signed in to change notification settings - Fork 8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add docstrings and typehints with github co-pilot #317
Changes from all commits
a20e7a6
8549a55
cd7f5b0
dced358
6750d3d
ca668a7
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -3,18 +3,40 @@ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import queue | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import re | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
from concurrent.futures import Future | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
from typing import List | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import cloudpickle | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def deserialize(funct_dict: dict) -> dict: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Deserialize a dictionary of serialized functions. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Args: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
funct_dict (dict): A dictionary containing serialized functions. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Returns: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
dict: A dictionary with deserialized functions. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
try: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return {k: cloudpickle.loads(v) for k, v in funct_dict.items()} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
except EOFError: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return {} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def find_executed_tasks(future_queue: queue.Queue, cache_directory: str): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def find_executed_tasks(future_queue: queue.Queue, cache_directory: str) -> None: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Find executed tasks from the future queue and update the task memory dictionary. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Args: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
future_queue (queue.Queue): The queue containing the futures of executed tasks. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cache_directory (str): The directory where the task cache is stored. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Returns: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
None | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
task_memory_dict = {} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
while True: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
task_dict = {} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -33,14 +55,36 @@ def find_executed_tasks(future_queue: queue.Queue, cache_directory: str): | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def read_from_file(file_name: str) -> dict: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Read the contents of a file and return it as a dictionary. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Args: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
file_name (str): The name of the file to read. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Returns: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
dict: A dictionary containing the contents of the file, with the file name as the key. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
name = file_name.split("/")[-1].split(".")[0] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
with open(file_name, "rb") as f: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return {name: f.read()} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def reload_previous_futures( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
future_queue: queue.Queue, future_dict: dict, cache_directory: str | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) -> None: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Reload previous futures from the cache directory and update the future dictionary. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Args: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
future_queue (queue.Queue): The queue containing the futures of executed tasks. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
future_dict (dict): A dictionary containing the current futures. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cache_directory (str): The directory where the task cache is stored. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Returns: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
None | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
file_lst = os.listdir(cache_directory) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
for f in file_lst: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if f.endswith(".in.pl"): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -56,16 +100,50 @@ def reload_previous_futures( | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
future_queue.put({key: future_dict[key]}) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def serialize_result(result_dict: dict): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def serialize_result(result_dict: dict) -> dict: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Serialize the values in a dictionary using cloudpickle. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Args: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
result_dict (dict): A dictionary containing the values to be serialized. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Returns: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
dict: A dictionary with serialized values. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return {k: cloudpickle.dumps(v) for k, v in result_dict.items()} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def serialize_funct(fn: callable, *args, **kwargs): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def serialize_funct(fn: callable, *args, **kwargs) -> dict: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Serialize a function along with its arguments and keyword arguments. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Args: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fn (callable): The function to be serialized. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
*args: The arguments to be passed to the function. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
**kwargs: The keyword arguments to be passed to the function. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Returns: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
dict: A dictionary containing the serialized function. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
binary = cloudpickle.dumps({"fn": fn, "args": args, "kwargs": kwargs}) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return {fn.__name__ + _get_hash(binary=binary): binary} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def write_to_file(funct_dict: dict, state, cache_directory: str): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def write_to_file(funct_dict: dict, state: str, cache_directory: str) -> List[str]: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Write the contents of a dictionary to files in the cache directory. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Args: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
funct_dict (dict): A dictionary containing the contents to be written. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
state (str): The state of the files to be written. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cache_directory (str): The directory where the files will be written. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Returns: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
List[str]: A list of file names that were written. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+134
to
+146
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fix undefined name The + from typing import List Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
file_name_lst = [] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
for k, v in funct_dict.items(): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
file_name = _get_file_name(name=k, state=state) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -75,23 +153,69 @@ def write_to_file(funct_dict: dict, state, cache_directory: str): | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return file_name_lst | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def _get_file_name(name, state): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def _get_file_name(name: str, state: str) -> str: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Generate a file name based on the given name and state. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Args: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
name (str): The name to be included in the file name. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
state (str): The state of the file. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Returns: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
str: The generated file name. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return name + "." + state + ".pl" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def _get_hash(binary): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def _get_hash(binary: bytes) -> str: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Get the hash of a binary using MD5 algorithm. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Args: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
binary (bytes): The binary data to be hashed. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Returns: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
str: The hexadecimal representation of the hash. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# Remove specification of jupyter kernel from hash to be deterministic | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
binary_no_ipykernel = re.sub(b"(?<=/ipykernel_)(.*)(?=/)", b"", binary) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return str(hashlib.md5(binary_no_ipykernel).hexdigest()) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def _set_future(file_name, future): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def _set_future(file_name: str, future: Future) -> None: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Set the result of a future based on the contents of a file. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Args: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
file_name (str): The name of the file containing the result. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
future (Future): The future to set the result for. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Returns: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
None | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
values = deserialize(funct_dict=read_from_file(file_name=file_name)).values() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if len(values) == 1: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
future.set_result(list(values)[0]) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def _update_task_dict(task_dict, task_memory_dict, cache_directory): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
def _update_task_dict( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
task_dict: dict, task_memory_dict: dict, cache_directory: str | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) -> None: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Update the task memory dictionary with the futures from the task dictionary. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Args: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
task_dict (dict): A dictionary containing the futures of tasks. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
task_memory_dict (dict): The dictionary to store the task memory. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cache_directory (str): The directory where the task cache is stored. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Returns: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
None | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
file_lst = os.listdir(cache_directory) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
for key, future in task_dict.items(): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
task_memory_dict[key] = future | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix undefined name
List
.The
List
type hint is used but not imported. ImportList
fromtyping
to fix this issue.+ from typing import List
Committable suggestion
Tools
Ruff