diff --git a/imap_processing/codice/L0/decom_python_example.py b/imap_processing/codice/L0/decom_python_example.py index cf6d2f88f..102152b97 100644 --- a/imap_processing/codice/L0/decom_python_example.py +++ b/imap_processing/codice/L0/decom_python_example.py @@ -1,67 +1,70 @@ """ Main script to extract and decommute parameters from a binary file containing packets. -This script reads a binary file containing packet data, searches for a packet with a specific Application Process Identifier (APID), -and then decommutes the packet's parameters using a provided decommutation table. The extracted parameter values are printed. +This script reads a binary file containing packet data, searches for a packet with a +specific Application Process Identifier (APID), and then decommutes the packet's +parameters using a provided decommutation table. The extracted values are printed. Usage: - 1. Set the 'bin_file_path' variable to the path of the binary file containing packet data. - 2. Replace 'target_apid' with the desired APID to search for. - 3. Define the 'decomm_table' with the decommutation information for different parameters. + 1. Set the `bin_file_path` variable to the path containing packet data. + 2. Replace `target_apid` with the desired APID to search for. + 3. Define the `decomm_table` with the decommutation info for different parameters. 4. Run the script to extract and print decommuted parameter values. Example: - Assuming 'read_binary_file' and other functions are defined: - - Given a binary file at 'bin_file_path' and a desired 'target_apid': - - If a packet with the 'target_apid' is found, its parameters are extracted and printed. + Assuming `read_binary_file` and other functions are defined: + - Given a binary file at `bin_file_path` and a desired `target_apid`: + - If a packet with the `target_apid` is found, parameters are extracted and printed. - If no matching packet is found, a message indicating such is printed. """ -""" -Parameters ----------- -bin_file_path : str - Path to the binary file containing packet data. - target_apid : int - APID of the packet to search for. - decomm_table : list - List of dictionaries, each containing decommutation information for a parameter. - Each dictionary should contain: - - "mnemonic": A unique identifier for the parameter. - - "sequence": An optional parameter sequence number. - - "startByte": Starting byte index in the packet. - - "startBitInByte": Starting bit index within the starting byte. - - "startBit": Overall starting bit index in the packet. - - "lengthInBits": Number of bits to extract for this parameter. - - "dataType": Data type of the parameter, e.g., "unsigned_int", "float", etc. - """ - def read_binary_file(file_path): + """ + Parameters + ---------- + file_path : str + Path to the binary file containing packet data. + + Returns + -------- + data : dict + Each dictionary should contain: + - "mnemonic": A unique identifier for the parameter. + - "sequence": An optional parameter sequence number. + - "startByte": Starting byte index in the packet. + - "startBitInByte": Starting bit index within the starting byte. + - "startBit": Overall starting bit index in the packet. + - "lengthInBits": Number of bits to extract for this parameter. + - "dataType": Data type of the parameter: "unsigned_int", "float", etc. + """ with open(file_path, "rb") as file: data = file.read() return data -""" -Extracts a value from binary data by interpreting a specified range of bits. - -This function is used to extract a value from a sequence of binary data by specifying the starting bit position and the number of bits to consider. The bits are interpreted as an unsigned integer value. - -Parameters ----------- - data (bytes): The binary data from which the value will be extracted. - start_bit (int): The index of the starting bit for extraction. - length (int): The number of bits to extract. - -Returns -------- - int: The extracted value represented as an integer. - -""" - - def extract_bits(data, start_bit, length): + """ + Extracts a value from binary data by interpreting a specified range of bits. + + This function is used to extract a value from a sequence of binary data by + specifying the starting bit position and the number of bits to consider. + The bits are interpreted as an unsigned integer value. + + Parameters + ---------- + data : bytes + The binary data from which the value will be extracted. + start_bit : int + The index of the starting bit for extraction. + length : int + The number of bits to extract. + + Returns + ------- + int + The extracted value represented as an integer. + """ byte_offset = start_bit // 8 bit_shift = start_bit % 8 mask = (1 << length) - 1 @@ -74,28 +77,35 @@ def extract_bits(data, start_bit, length): return value & mask -""" -Finds the index of the first occurrence of a packet with a specific APID in binary data. - -This function searches through a sequence of binary data to find the index of the first packet that matches the specified Application Process Identifier (APID). The APID is a unique identifier used in packet-based data communication protocols. - -Parameters ----------- - bin_data (bytes): The binary data to search within. - target_apid (int): The target APID to search for. - -Returns -------- - int: The index of the first occurrence of the packet with the specified APID, or -1 if not found. - -Example: - binary_data = bytes([0x12, 0x34, 0x56, 0x12, 0x78, 0x90]) # Example binary data - target_apid = 0x1234 # Example target APID - packet_index = find_packet_with_apid(binary_data, target_apid) -""" - - def find_packet_with_apid(bin_data, target_apid): + """ + Finds the index of the first occurrence of a packet with a specific + APID in binary data. + + This function searches through a sequence of binary data to find the + index of the first packet that matches the specified Application Process + Identifier (APID). The APID is a unique identifier used in packet-based data + communication protocols. + + Parameters + ---------- + bin_data : bytes + The binary data to search within. + target_apid : int + The target APID to search for. + + Returns + ------- + idx : int + The index of the first occurrence of the packet with the specified APID + + Example: + binary_data = bytes ([0x12, 0x34, 0x56, 0x12, 0x78, 0x90]) + target_apid = 0x1234 + Example target APID + packet_index = find_packet_with_apid + (binary_data, target_apid) + """ # Search for the target APID in the binary data target_apid_bytes = target_apid.to_bytes(2, byteorder="big") idx = bin_data.find(target_apid_bytes) @@ -103,29 +113,34 @@ def find_packet_with_apid(bin_data, target_apid): return idx -""" -Decommutes packet data using a provided decommutation table. +# Decommutation table variables may not all be the same +def decommute_packet(packet_data, decomm_table): + """ + Decommutes packet data using a provided decommutation table. -This function takes a packet's binary data and a decommutation table as input, and returns a dictionary of parameter values extracted from the packet according to the table. + This function takes a packet's binary data and a decommutation table as input, and + returns a dictionary of parameter values extracted from the packet + according to the table. -Parameters ----------- - packet_data (bytes): Binary data of the packet to decommute. - decomm_table (list): List of dictionaries, each containing decommutation information for a parameter. - Each dictionary should contain: + Parameters + ---------- + packet_data : bytes + Binary data of the packet to decommute. + decomm_table : list + List of dictionaries, each containing decommutation information for a parameter. + + Returns + ------- + parameters : dict + The decommuted parameters. Each dictionary should contain: - "mnemonic": A unique identifier for the parameter. - "sequence": An optional parameter sequence number. - "startByte": Starting byte index in the packet. - "startBitInByte": Starting bit index within the starting byte. - "startBit": Overall starting bit index in the packet. - "lengthInBits": Number of bits to extract for this parameter. - - "dataType": Data type of the parameter, e.g., "unsigned_int", "float", etc. - -""" - - -# Decommutation table variables may not all be the same -def decommute_packet(packet_data, decomm_table): + - "dataType": Data type of the parameter: "unsigned_int", "float", etc. + """ parameters = {} for entry in decomm_table: diff --git a/imap_processing/codice/CcsdsHeaderXtceGenerator.py b/imap_processing/codice/ccsds_header_xtce_generator.py similarity index 86% rename from imap_processing/codice/CcsdsHeaderXtceGenerator.py rename to imap_processing/codice/ccsds_header_xtce_generator.py index 8e5abfc8a..4add2117f 100644 --- a/imap_processing/codice/CcsdsHeaderXtceGenerator.py +++ b/imap_processing/codice/ccsds_header_xtce_generator.py @@ -29,12 +29,14 @@ def __init__(self): { "name": "SRC_SEQ_CTR", "parameterTypeRef": "uint14", - "description": "CCSDS Packet Sequence Count (increments with each new packet)", + "description": "CCSDS Packet Sequence Count " + "(increments with each new packet)", }, { "name": "PKT_LEN", "parameterTypeRef": "uint16", - "description": "CCSDS Packet Length (number of bytes after Packet length minus 1)", + "description": "CCSDS Packet Length " + "(number of bytes after Packet length minus 1)", }, { "name": "SHCOARSE", diff --git a/imap_processing/codice/decom.py b/imap_processing/codice/decom.py index 043908740..a05fbdc5e 100644 --- a/imap_processing/codice/decom.py +++ b/imap_processing/codice/decom.py @@ -1,15 +1,16 @@ -""" This is an example of how to use the 'space_packet_parser' module to parse with a XTCE file specifically for the - CODICE L0 data. This is a modified version of the example found in the 'space_packet_parser' module documentation. - This is the start of CODICE L0 data processing. - +""" This is an example of how to use the 'space_packet_parser' module to parse with a +XTCE file specifically for the CODICE L0 data. This is a modified version of the +example found in the 'space_packet_parser' module documentation. +This is the start of CODICE L0 data processing. """ from pathlib import Path from space_packet_parser import parser, xtcedef -# Define the APID. This is the APID for the CODICE L0 data that is in the 'RAW.bin' file. -# Data bins like 'RAW.bin' will encompass multiple APIDs. This is why we need to specify the APID. +# Define the APID. This is the APID for the CODICE L0 data that is in the +# 'RAW.bin' file. Data bins like 'RAW.bin' will encompass multiple APIDs. +# This is why we need to specify the APID. # The APID should be in the packet definition file given by instrument team. apid = 0x460 diff --git a/imap_processing/codice/generate_ccsds_header_xml.py b/imap_processing/codice/generate_ccsds_header_xml.py index 4b4388abd..fb4749c78 100644 --- a/imap_processing/codice/generate_ccsds_header_xml.py +++ b/imap_processing/codice/generate_ccsds_header_xml.py @@ -3,48 +3,48 @@ the CCSDS header parameters in the XTCE file. """ -import xml.etree.ElementTree as ET +import xml.etree.ElementTree as Et -ET.register_namespace("xtce", "http://www.omg.org/space") +Et.register_namespace("xtce", "http://www.omg.org/space") # Create the root element -root = ET.Element("{http://www.omg.org/space}SpaceSystem") +root = Et.Element("{http://www.omg.org/space}SpaceSystem") root.attrib["name"] = "CCSDS_Headers" # Create the Header element and its attributes -header = ET.SubElement(root, "{http://www.omg.org/space}Header") +header = Et.SubElement(root, "{http://www.omg.org/space}Header") header.attrib["date"] = "2023" header.attrib["version"] = "1.0" header.attrib["author"] = "IMAP SDC" # Create the TelemetryMetaData element -telemetry_metadata = ET.SubElement(root, "{http://www.omg.org/space}TelemetryMetaData") +telemetry_metadata = Et.SubElement(root, "{http://www.omg.org/space}TelemetryMetaData") # Create the ParameterTypeSet element -parameter_type_set = ET.SubElement( +parameter_type_set = Et.SubElement( telemetry_metadata, "{http://www.omg.org/space}ParameterTypeSet" ) # Create integer parameter types integer_sizes = [1, 2, 3, 11, 14, 16, 32] for size in integer_sizes: - parameter_type = ET.SubElement( + parameter_type = Et.SubElement( parameter_type_set, "{http://www.omg.org/space}IntegerParameterType" ) parameter_type.attrib["name"] = f"uint{size}" parameter_type.attrib["signed"] = "false" - encoding = ET.SubElement( + encoding = Et.SubElement( parameter_type, "{http://www.omg.org/space}IntegerDataEncoding" ) encoding.attrib["sizeInBits"] = str(size) encoding.attrib["encoding"] = "unsigned" - unit_set = ET.SubElement(parameter_type, "{http://www.omg.org/space}UnitSet") + unit_set = Et.SubElement(parameter_type, "{http://www.omg.org/space}UnitSet") # Create the ParameterSet element -parameter_set = ET.SubElement( +parameter_set = Et.SubElement( telemetry_metadata, "{http://www.omg.org/space}ParameterSet" ) @@ -83,39 +83,40 @@ { "name": "PKT_LEN", "parameterTypeRef": "uint16", - "description": "CCSDS Packet Length (number of bytes after Packet length minus 1)", + "description": "CCSDS Packet Length " + "(number of bytes after Packet length minus 1)", }, ] for parameter_data in ccsds_parameters: - parameter = ET.SubElement(parameter_set, "{http://www.omg.org/space}Parameter") + parameter = Et.SubElement(parameter_set, "{http://www.omg.org/space}Parameter") parameter.attrib["name"] = parameter_data["name"] parameter.attrib["parameterTypeRef"] = parameter_data["parameterTypeRef"] - description = ET.SubElement(parameter, "{http://www.omg.org/space}LongDescription") + description = Et.SubElement(parameter, "{http://www.omg.org/space}LongDescription") description.text = parameter_data["description"] # Create the ContainerSet element -container_set = ET.SubElement( +container_set = Et.SubElement( telemetry_metadata, "{http://www.omg.org/space}ContainerSet" ) # Create the SequenceContainer element -sequence_container = ET.SubElement( +sequence_container = Et.SubElement( container_set, "{http://www.omg.org/space}SequenceContainer" ) sequence_container.attrib["name"] = "CCSDSPacket" # Create the EntryList element and add ParameterRefEntry elements -entry_list = ET.SubElement(sequence_container, "{http://www.omg.org/space}EntryList") +entry_list = Et.SubElement(sequence_container, "{http://www.omg.org/space}EntryList") for parameter_data in ccsds_parameters: - parameter_ref_entry = ET.SubElement( + parameter_ref_entry = Et.SubElement( entry_list, "{http://www.omg.org/space}ParameterRefEntry" ) parameter_ref_entry.attrib["parameterRef"] = parameter_data["name"] # Create the XML tree -tree = ET.ElementTree(root) -ET.indent(tree, space="\t", level=0) +tree = Et.ElementTree(root) +Et.indent(tree, space="\t", level=0) # Save the XML document to a file tree.write("L0/ccsds-header.xml", encoding="utf-8", xml_declaration=True) diff --git a/imap_processing/codice/make_xtce.py b/imap_processing/codice/make_xtce.py index 44d737f4f..bde4b30be 100644 --- a/imap_processing/codice/make_xtce.py +++ b/imap_processing/codice/make_xtce.py @@ -1,16 +1,17 @@ -""" The module will take an Excel file and convert it into an XTCE formatted XML file. This is specific for CODICE L0, - but can be modified for other missions. This is the start of CODICE L0 data processing. - +""" The module will take an Excel file and convert it into an XTCE formatted XML file. +This is specific for CODICE L0, but can be modified for other missions. This is the +start of CODICE L0 data processing. """ -import xml.etree.ElementTree as ET +import xml.etree.ElementTree as Et import pandas as pd -from imap_processing.codice.CcsdsHeaderXtceGenerator import CCSDSParameters +from imap_processing.codice.ccsds_header_xtce_generator import CCSDSParameters -# Make sure the "sheet" name is correct. In an Excel file, there might be several "packets", which are "sheets" -# within the file.This is case-sensitive. -packet_name = "P_COD_AUT" # This is the name of the packet (sheet) in the Excel file you want to convert to XML +# Make sure the "sheet" name is correct. In an Excel file +# There might be several "packets", which are "sheets" within the file. +# This is case-sensitive. +packet_name = "P_COD_AUT" # This is the name of the packet (sheet) in the Excel file # This is the path to the Excel file you want to convert to XML path_to_excel_file = "/Users/gamo6782/Desktop/IMAP/TLM_COD_20230629-110638(update).xlsx" @@ -18,10 +19,11 @@ ccsds_parameters = CCSDSParameters().parameters if __name__ == "__main__": - # ET.register_namespace is important! Make sure you use the correct namespace for the xtce file you are using. + # ET.register_namespace is important! + # Make sure you use the correct namespace for the xtce file you are using. # This is the namespace for the IMAP xtce files currently. - ET.register_namespace( + Et.register_namespace( "xtce", "http://www.omg.org/space" ) # Update the namespace here @@ -33,7 +35,7 @@ pkt.fillna("", inplace=True) # Create the root element and add namespaces - root = ET.Element( + root = Et.Element( "{http://www.omg.org/space}SpaceSystem", nsmap={"xtce": "http://www.omg.org/space/xtce"}, ) @@ -42,103 +44,114 @@ # Create the Header element with attributes 'date', 'version', and 'author' # Versioning is used to keep track of changes to the XML file. - header = ET.SubElement(root, "{http://www.omg.org/space}Header") + header = Et.SubElement(root, "{http://www.omg.org/space}Header") header.attrib["date"] = "2023-08-21" header.attrib["version"] = "1.0" header.attrib["author"] = "IMAP SDC" """ - These lines of code create a structured XML hierarchy to represent data according to a defined XML schema: - - The 'TelemetryMetaData' element is added under the 'root' element, providing a namespace. - - Within 'TelemetryMetaData', the 'ParameterTypeSet' element is created to define parameter types. - - Similarly, the 'ParameterSet' element is added to 'TelemetryMetaData' to define specific parameters. - These elements and their organization help organize and standardize data representation in XML format. + These lines of code create a structured XML hierarchy to represent data according + to a defined XML schema: + - The `TelemetryMetaData` element is added under the 'root' element, + providing a namespace. + - Within `TelemetryMetaData`, the `ParameterTypeSet` element is created + to define parameter types. + - Similarly, the `ParameterSet` element is added to `TelemetryMetaData` + to define specific parameters. + These elements and their organization help organize and standardize + data representation in XML format. """ # Create the TelemetryMetaData element - telemetry_metadata = ET.SubElement( + telemetry_metadata = Et.SubElement( root, "{http://www.omg.org/space}TelemetryMetaData" ) # Create the ParameterTypeSet element - parameter_type_set = ET.SubElement(telemetry_metadata, "xtce:ParameterTypeSet") + parameter_type_set = Et.SubElement(telemetry_metadata, "xtce:ParameterTypeSet") # Create the ParameterSet element - parameter_set = ET.SubElement(telemetry_metadata, "xtce:ParameterSet") + parameter_set = Et.SubElement(telemetry_metadata, "xtce:ParameterSet") """ - The following loop creates a series of XML elements to define integer parameter types: - - The loop iterates from 0 to 32, creating an 'IntegerParameterType' element for each number. - - Within each 'IntegerParameterType' element, attributes like 'name' and 'signed' are set. - - An 'IntegerDataEncoding' element is added with attributes 'sizeInBits' and 'encoding'. - - Lastly, a 'UnitSet' element is added within each 'IntegerParameterType'. - This loop efficiently defines integer parameter types for a range of values in the XML structure. + The following loop creates a series of XML elements to + define integer parameter types: + - The loop iterates from 0 - 32, creating an 'IntegerParameterType' element for + each number. + - In `IntegerParameterType` element, attributes like `name` and `signed` are set. + - An `IntegerDataEncoding` is added with attributes `sizeInBits` and `encoding`. + - Lastly, a `UnitSet` element is added within each `IntegerParameterType`. + This loop efficiently defines integer parameter types for a range of + values in the XML structure. """ # Create integer parameter types for all numbers between 0-32 for size in range(33): # Range goes up to 33 to include 0-32 - parameter_type = ET.SubElement(parameter_type_set, "xtce:IntegerParameterType") + parameter_type = Et.SubElement(parameter_type_set, "xtce:IntegerParameterType") parameter_type.attrib["name"] = f"uint{size}" parameter_type.attrib["signed"] = "false" - encoding = ET.SubElement(parameter_type, "xtce:IntegerDataEncoding") + encoding = Et.SubElement(parameter_type, "xtce:IntegerDataEncoding") encoding.attrib["sizeInBits"] = str(size) encoding.attrib["encoding"] = "unsigned" - # unit_set is used to define the units for the parameter. This is not needed for CODICE L0. + # unit_set is used to define the units for the parameter. + # This is not needed for CODICE L0. # UnitSet will be used for CODICE L1. It can be used for other missions as well. - unit_set = ET.SubElement(parameter_type, "xtce:UnitSet") + unit_set = Et.SubElement(parameter_type, "xtce:UnitSet") """ This loop generates XML elements to define CCSDS packet parameters: - - It iterates over a list of 'ccsds_parameters', each containing parameter data. - - For each parameter, an 'xtce:Parameter' element is added to the 'parameter_set'. - - Attributes like 'name' and 'parameterTypeRef' are set using the parameter data. - - A 'LongDescription' element is created with the description text. - This loop effectively creates XML elements to define CCSDS packet parameters based on the given data. + - It iterates over a list of `ccsds_parameters`, each containing parameter data. + - For each parameter, an `xtce:Parameter` element is added to the 'parameter_set'. + - Attributes like `name` and `parameterTypeRef` are set using the parameter data. + - A `LongDescription` element is created with the description text. + This loop effectively creates XML elements to define CCSDS packet parameters + based on the given data. """ for parameter_data in ccsds_parameters: - parameter = ET.SubElement(parameter_set, "xtce:Parameter") + parameter = Et.SubElement(parameter_set, "xtce:Parameter") parameter.attrib["name"] = parameter_data["name"] parameter.attrib["parameterTypeRef"] = parameter_data["parameterTypeRef"] - description = ET.SubElement(parameter, "xtce:LongDescription") + description = Et.SubElement(parameter, "xtce:LongDescription") description.text = parameter_data["description"] # Create ContainerSet element - container_set = ET.SubElement(telemetry_metadata, "xtce:ContainerSet") + container_set = Et.SubElement(telemetry_metadata, "xtce:ContainerSet") # Create CCSDSPacket SequenceContainer - ccsds_packet_container = ET.SubElement(container_set, "xtce:SequenceContainer") + ccsds_packet_container = Et.SubElement(container_set, "xtce:SequenceContainer") ccsds_packet_container.attrib["name"] = "CCSDSPacket" - ccsds_packet_entry_list = ET.SubElement(ccsds_packet_container, "xtce:EntryList") + ccsds_packet_entry_list = Et.SubElement(ccsds_packet_container, "xtce:EntryList") for parameter_data in ccsds_parameters: - parameter_ref_entry = ET.SubElement( + parameter_ref_entry = Et.SubElement( ccsds_packet_entry_list, "xtce:ParameterRefEntry" ) parameter_ref_entry.attrib["parameterRef"] = parameter_data["name"] # Create CoDICESciencePacket SequenceContainer - codice_science_container = ET.SubElement(container_set, "xtce:SequenceContainer") + codice_science_container = Et.SubElement(container_set, "xtce:SequenceContainer") codice_science_container.attrib["name"] = "CoDICESciencePacket" - base_container = ET.SubElement(codice_science_container, "xtce:BaseContainer") + base_container = Et.SubElement(codice_science_container, "xtce:BaseContainer") base_container.attrib["containerRef"] = "CCSDSPacket" - restriction_criteria = ET.SubElement(base_container, "xtce:RestrictionCriteria") - comparison = ET.SubElement(restriction_criteria, "xtce:Comparison") + restriction_criteria = Et.SubElement(base_container, "xtce:RestrictionCriteria") + comparison = Et.SubElement(restriction_criteria, "xtce:Comparison") comparison.attrib["parameterRef"] = "PKT_APID" comparison.attrib["value"] = "1120" comparison.attrib["useCalibratedValue"] = "false" - codice_science_entry_list = ET.SubElement( + codice_science_entry_list = Et.SubElement( codice_science_container, "xtce:EntryList" ) # Add ParameterRefEntry elements for CoDICESciencePacket # ******************************* NEED TO LOOK AT THIS: To pkt specific - # This will be the list of parameters that will be included in the CoDICE Science Packet after the CCSDS header''' + # This will be the list of parameters that will be included in the + # CoDICE Science Packet after the CCSDS header''' parameter_refs = [ "Spare", "Power_Cycle_Rq", @@ -150,20 +163,23 @@ ] for parameter_ref in parameter_refs: - parameter_ref_entry = ET.SubElement( + parameter_ref_entry = Et.SubElement( codice_science_entry_list, "xtce:ParameterRefEntry" ) parameter_ref_entry.attrib["parameterRef"] = parameter_ref """ This loop processes rows from the DataFrame starting from the 9th row onwards: - - It iterates over the DataFrame rows using the 'iterrows()' function. + - It iterates over the DataFrame rows using the `iterrows()` function. - For each row, it checks if the row index is less than 8 (rows before the 9th row). - - If the condition is met, the loop continues to the next iteration, skipping these rows. - - Otherwise, it creates an 'xtce:Parameter' element and adds it to the 'parameter_set'. - - Attributes like 'name' and 'parameterTypeRef' are set based on row data. - - A 'LongDescription' element is created with the description text from the row. - This loop effectively generates XML elements for parameters starting from the 9th row of the DataFrame. + - If the condition is met, the loop continues to the next iteration, + skipping these rows. + - Otherwise, it creates an `xtce:Parameter` element and adds it to + the `parameter_set`. + - Attributes like `name` and `parameterTypeRef` are set based on row data. + - A `LongDescription` element is created with the description text from the row. + This loop effectively generates XML elements for parameters starting from the + 9th row of the DataFrame. """ # Process rows from 9 until the last available row in the DataFrame @@ -171,32 +187,34 @@ if index < 8: continue # Skip rows before row 9 - parameter = ET.SubElement(parameter_set, "{http://www.omg.org/space}Parameter") + parameter = Et.SubElement(parameter_set, "{http://www.omg.org/space}Parameter") parameter.attrib["name"] = row["mnemonic"] parameter_type_ref = f"uint{row['lengthInBits']}" parameter.attrib["parameterTypeRef"] = parameter_type_ref - description = ET.SubElement( + description = Et.SubElement( parameter, "{http://www.omg.org/space}LongDescription" ) description.text = row["longDescription"] """ - This section creates the final XML structure, indents it, and then saves it to a file: - - The 'ET.ElementTree(root)' creates an ElementTree with the root element 'root'. - - 'ET.indent(tree, space="\t", level=0)' adds indentation to the XML structure for readability. + This section creates the final XML structure, indents it, then saves it to a file: + - The 'Et.ElementTree(root)' creates an ElementTree with the root element 'root'. + - 'Et.indent(tree, space="\t", level=0)' adds indentation for readability. - 'tree' is the ElementTree object. - 'space="\t"' specifies the character used for indentation (a tab in this case). - 'level=0' indicates the starting level of indentation. - - 'tree.write("p_cod_aut_test.xml", encoding="utf-8", xml_declaration=True)' writes the XML content to a file named "p_cod_aut_test.xml". + - 'tree.write("p_cod_aut_test.xml", encoding="utf-8", xml_declaration=True)' + writes the XML content to a file named "p_cod_aut_test.xml". - 'encoding="utf-8"' specifies the character encoding for the file. - 'xml_declaration=True' adds an XML declaration at the beginning of the file. - This section completes the XML generation process by creating a structured XML tree, formatting it with indentation, and saving it to a file. + This section completes the XML generation process by creating a structured XML tree + formatting it with indentation, and saving it to a file. """ # Create the XML tree - tree = ET.ElementTree(root) - ET.indent(tree, space="\t", level=0) + tree = Et.ElementTree(root) + Et.indent(tree, space="\t", level=0) # Save the XML document to a file output_xml_path = "L0/p_cod_aut_test.xml" diff --git a/imap_processing/codice/tests/test_bin_data.py b/imap_processing/codice/tests/test_bin_data.py index d3a12e4e2..9240a1126 100644 --- a/imap_processing/codice/tests/test_bin_data.py +++ b/imap_processing/codice/tests/test_bin_data.py @@ -1,4 +1,5 @@ -""" This code is used to test the size of a binary file. It is not used in the actual decom.py file. +""" This code is used to test the size of a binary file. + It is not used in the actual decom.py file. It is used to test the size of the binary file that is used in the decom.py file. """ import pytest diff --git a/poetry.lock b/poetry.lock index 64b5c54b3..58e877a6a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -152,13 +152,13 @@ files = [ [[package]] name = "cfgv" -version = "3.3.1" +version = "3.4.0" description = "Validate configuration and produce human readable error messages." optional = true -python-versions = ">=3.6.1" +python-versions = ">=3.8" files = [ - {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, - {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, + {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, + {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, ] [[package]] @@ -247,13 +247,13 @@ files = [ [[package]] name = "click" -version = "8.1.6" +version = "8.1.7" description = "Composable command line interface toolkit" optional = true python-versions = ">=3.7" files = [ - {file = "click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"}, - {file = "click-8.1.6.tar.gz", hash = "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd"}, + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, ] [package.dependencies] @@ -294,28 +294,31 @@ files = [ [[package]] name = "filelock" -version = "3.12.2" +version = "3.12.3" description = "A platform independent file lock." optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, - {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, + {file = "filelock-3.12.3-py3-none-any.whl", hash = "sha256:f067e40ccc40f2b48395a80fcbd4728262fab54e232e090a4063ab804179efeb"}, + {file = "filelock-3.12.3.tar.gz", hash = "sha256:0ecc1dd2ec4672a10c8550a8182f1bd0c0a5088470ecd5a125e45f49472fac3d"}, ] +[package.dependencies] +typing-extensions = {version = ">=4.7.1", markers = "python_version < \"3.11\""} + [package.extras] -docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] +docs = ["furo (>=2023.7.26)", "sphinx (>=7.1.2)", "sphinx-autodoc-typehints (>=1.24)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3)", "diff-cover (>=7.7)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)", "pytest-timeout (>=2.1)"] [[package]] name = "identify" -version = "2.5.26" +version = "2.5.27" description = "File identification library for Python" optional = true python-versions = ">=3.8" files = [ - {file = "identify-2.5.26-py2.py3-none-any.whl", hash = "sha256:c22a8ead0d4ca11f1edd6c9418c3220669b3b7533ada0a0ffa6cc0ef85cf9b54"}, - {file = "identify-2.5.26.tar.gz", hash = "sha256:7243800bce2f58404ed41b7c002e53d4d22bcf3ae1b7900c2d7aefd95394bf7f"}, + {file = "identify-2.5.27-py2.py3-none-any.whl", hash = "sha256:fdb527b2dfe24602809b2201e033c2a113d7bdf716db3ca8e3243f735dcecaba"}, + {file = "identify-2.5.27.tar.gz", hash = "sha256:287b75b04a0e22d727bc9a41f0d4f3c1bcada97490fa6eabb5b28f0e9097e733"}, ] [package.extras] @@ -567,39 +570,39 @@ files = [ [[package]] name = "pathspec" -version = "0.11.1" +version = "0.11.2" description = "Utility library for gitignore style pattern matching of file paths." optional = true python-versions = ">=3.7" files = [ - {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, - {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, + {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, + {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, ] [[package]] name = "platformdirs" -version = "3.9.1" +version = "3.10.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = true python-versions = ">=3.7" files = [ - {file = "platformdirs-3.9.1-py3-none-any.whl", hash = "sha256:ad8291ae0ae5072f66c16945166cb11c63394c7a3ad1b1bc9828ca3162da8c2f"}, - {file = "platformdirs-3.9.1.tar.gz", hash = "sha256:1b42b450ad933e981d56e59f1b97495428c9bd60698baab9f3eb3d00d5822421"}, + {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, + {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, ] [package.extras] -docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] [[package]] name = "pluggy" -version = "1.2.0" +version = "1.3.0" description = "plugin and hook calling mechanisms for python" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, - {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, + {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, + {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, ] [package.extras] @@ -663,13 +666,13 @@ test = ["codecov", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "pygments" -version = "2.15.1" +version = "2.16.1" description = "Pygments is a syntax highlighting package written in Python." optional = true python-versions = ">=3.7" files = [ - {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, - {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, + {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, + {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, ] [package.extras] @@ -711,6 +714,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -718,8 +722,15 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -736,6 +747,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -743,6 +755,7 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -797,18 +810,18 @@ files = [ [[package]] name = "setuptools" -version = "68.0.0" +version = "68.1.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, - {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, + {file = "setuptools-68.1.2-py3-none-any.whl", hash = "sha256:3d8083eed2d13afc9426f227b24fd1659489ec107c0e86cec2ffdde5c92e790b"}, + {file = "setuptools-68.1.2.tar.gz", hash = "sha256:3d4dfa6d95f1b101d695a6160a7626e15583af71a5f52176efa5d39a054d475d"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5,<=7.1.2)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] @@ -849,13 +862,13 @@ bitstring = ">=3.0.0,<5" [[package]] name = "sphinx" -version = "7.1.0" +version = "7.2.4" description = "Python documentation generator" optional = true -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "sphinx-7.1.0-py3-none-any.whl", hash = "sha256:9bdfb5a2b28351d4fdf40a63cd006dbad727f793b243e669fc950d7116c634af"}, - {file = "sphinx-7.1.0.tar.gz", hash = "sha256:8f336d0221c3beb23006b3164ed1d46db9cebcce9cb41cdb9c5ecd4bcc509be0"}, + {file = "sphinx-7.2.4-py3-none-any.whl", hash = "sha256:9b3aa23254ffc5be468646810543e491653bf5a67f3f23e4ccd4e515b0bd0b9c"}, + {file = "sphinx-7.2.4.tar.gz", hash = "sha256:1aeec862bf1edff4374012ac38082e0d1daa066c9e327841a846401164797988"}, ] [package.dependencies] @@ -867,7 +880,7 @@ imagesize = ">=1.3" importlib-metadata = {version = ">=4.8", markers = "python_version < \"3.10\""} Jinja2 = ">=3.0" packaging = ">=21.0" -Pygments = ">=2.13" +Pygments = ">=2.14" requests = ">=2.25.0" snowballstemmer = ">=2.0" sphinxcontrib-applehelp = "*" @@ -875,54 +888,63 @@ sphinxcontrib-devhelp = "*" sphinxcontrib-htmlhelp = ">=2.0.0" sphinxcontrib-jsmath = "*" sphinxcontrib-qthelp = "*" -sphinxcontrib-serializinghtml = ">=1.1.5" +sphinxcontrib-serializinghtml = ">=1.1.9" [package.extras] docs = ["sphinxcontrib-websupport"] lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-simplify", "isort", "mypy (>=0.990)", "ruff", "sphinx-lint", "types-requests"] -test = ["cython", "filelock", "html5lib", "pytest (>=4.6)"] +test = ["cython (>=3.0)", "filelock", "html5lib", "pytest (>=4.6)", "setuptools (>=67.0)"] [[package]] name = "sphinxcontrib-applehelp" -version = "1.0.4" +version = "1.0.7" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" optional = true -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, - {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, + {file = "sphinxcontrib_applehelp-1.0.7-py3-none-any.whl", hash = "sha256:094c4d56209d1734e7d252f6e0b3ccc090bd52ee56807a5d9315b19c122ab15d"}, + {file = "sphinxcontrib_applehelp-1.0.7.tar.gz", hash = "sha256:39fdc8d762d33b01a7d8f026a3b7d71563ea3b72787d5f00ad8465bd9d6dfbfa"}, ] +[package.dependencies] +Sphinx = ">=5" + [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] [[package]] name = "sphinxcontrib-devhelp" -version = "1.0.2" -description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +version = "1.0.5" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" optional = true -python-versions = ">=3.5" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, - {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, + {file = "sphinxcontrib_devhelp-1.0.5-py3-none-any.whl", hash = "sha256:fe8009aed765188f08fcaadbb3ea0d90ce8ae2d76710b7e29ea7d047177dae2f"}, + {file = "sphinxcontrib_devhelp-1.0.5.tar.gz", hash = "sha256:63b41e0d38207ca40ebbeabcf4d8e51f76c03e78cd61abe118cf4435c73d4212"}, ] +[package.dependencies] +Sphinx = ">=5" + [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] [[package]] name = "sphinxcontrib-htmlhelp" -version = "2.0.1" +version = "2.0.4" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" optional = true -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-htmlhelp-2.0.1.tar.gz", hash = "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff"}, - {file = "sphinxcontrib_htmlhelp-2.0.1-py3-none-any.whl", hash = "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903"}, + {file = "sphinxcontrib_htmlhelp-2.0.4-py3-none-any.whl", hash = "sha256:8001661c077a73c29beaf4a79968d0726103c5605e27db92b9ebed8bab1359e9"}, + {file = "sphinxcontrib_htmlhelp-2.0.4.tar.gz", hash = "sha256:6c26a118a05b76000738429b724a0568dbde5b72391a688577da08f11891092a"}, ] +[package.dependencies] +Sphinx = ">=5" + [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] test = ["html5lib", "pytest"] @@ -943,30 +965,36 @@ test = ["flake8", "mypy", "pytest"] [[package]] name = "sphinxcontrib-qthelp" -version = "1.0.3" -description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +version = "1.0.6" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" optional = true -python-versions = ">=3.5" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, - {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, + {file = "sphinxcontrib_qthelp-1.0.6-py3-none-any.whl", hash = "sha256:bf76886ee7470b934e363da7a954ea2825650013d367728588732c7350f49ea4"}, + {file = "sphinxcontrib_qthelp-1.0.6.tar.gz", hash = "sha256:62b9d1a186ab7f5ee3356d906f648cacb7a6bdb94d201ee7adf26db55092982d"}, ] +[package.dependencies] +Sphinx = ">=5" + [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] [[package]] name = "sphinxcontrib-serializinghtml" -version = "1.1.5" -description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +version = "1.1.9" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" optional = true -python-versions = ">=3.5" +python-versions = ">=3.9" files = [ - {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, - {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, + {file = "sphinxcontrib_serializinghtml-1.1.9-py3-none-any.whl", hash = "sha256:9b36e503703ff04f20e9675771df105e58aa029cfcbc23b8ed716019b7416ae1"}, + {file = "sphinxcontrib_serializinghtml-1.1.9.tar.gz", hash = "sha256:0c64ff898339e1fac29abd2bf5f11078f3ec413cfe9c046d3120d7ca65530b54"}, ] +[package.dependencies] +Sphinx = ">=5" + [package.extras] lint = ["docutils-stubs", "flake8", "mypy"] test = ["pytest"] @@ -1023,13 +1051,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.24.2" +version = "20.24.3" description = "Virtual Python Environment builder" optional = true python-versions = ">=3.7" files = [ - {file = "virtualenv-20.24.2-py3-none-any.whl", hash = "sha256:43a3052be36080548bdee0b42919c88072037d50d56c28bd3f853cbe92b953ff"}, - {file = "virtualenv-20.24.2.tar.gz", hash = "sha256:fd8a78f46f6b99a67b7ec5cf73f92357891a7b3a40fd97637c27f854aae3b9e0"}, + {file = "virtualenv-20.24.3-py3-none-any.whl", hash = "sha256:95a6e9398b4967fbcb5fef2acec5efaf9aa4972049d9ae41f95e0972a683fd02"}, + {file = "virtualenv-20.24.3.tar.gz", hash = "sha256:e5c3b4ce817b0b328af041506a2a299418c98747c4b1e68cb7527e74ced23efc"}, ] [package.dependencies] @@ -1064,4 +1092,4 @@ test = ["pytest"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "bae1225c6979e2ad2f2695f3a850d73bbbb4c465db167a4e3f968888d791c3b7" +content-hash = "04c615a81fdb8ba6fb8c1a7c0ecfa09876507dfa5459229d185bc59389492d74"