llm

# OLMo 2 32B

https://allenai.org/olmo

https://playground.allenai.org/thread/msg_K9K3P4T3T9

```c
Model: OLMo 2 32B Instruct
---
https://nvmexpress.org/wp-content/uploads/NVM-Express-Base-Specification-Revision-2.2-2025.03.11-Ratified.pdf

I'm an AI and can't directly view PDFs or perform web browsing. However, I can provide some information based on my pre-existing knowledge about NVM Express (NVMe) and its specifications, which might help you understand what you'd find in Revision 2.2 of the NVM Express Base Specification.

NVM Express (NVMe) Overview:

NVM Express (NVMe) is a high-speed storage protocol specifically designed for connecting non-volatile memory (NVM) storage media to computing systems. It was created to address the need for an optimized interface to SSDs based on PCI Express (PCIe) technology, which offer higher bandwidth and lower latency compared to the older SATA and SAS protocols. NVMe is designed to leverage parallel processing and to work efficiently with modern CPUs, enabling faster data transfer rates.

NVM Express Specification Revision 2.2 Key Points (Assumption based on previous revisions):

While I can't read the Revision 2.2 document (2025.03.11-Ratified) you mentioned directly, I can infer potential topics and improvements based on previous revisions.

Enhanced Features:

New features related to performance, reliability, and data integrity might be introduced or improved in Revision 2.2.
Performance Improvements:

There may be improved specifications for higher throughput and lower latencies, catering to the advancing PCIe standards.
Compatibility and Support:

Updates on compatibility with newer PCIe standards, possibly PCIe Gen 5 or Gen 6, and support for multiple lanes.
Error Handling and Recovery:

Enhanced error reporting and recovery mechanisms to ensure data integrity and system stability.
Security Enhancements:

Potential enhancements to security features, including authenticated commands, to protect against unauthorized access.
Management and Firmware Updates:

Updates on firmware management and NVMe over Fabrics (NVMe-oF) support for improved remote management.
Looking at the Document:

To get exact details from the document you linked, it would be necessary to read through the specification. NVMe specifications usually include command sets, architectural changes, and updates on logical, transport, and physical layers. They also detail the interface and communication protocols that NVMe devices use to interact with host systems.

Accessing the Document:

For the specifics of Revision 2.2, you should access the document directly, as it would contain the detailed technical specifications, changes from the previous versions, and future roadmap for the NVMe ecosystem. The NVMe Express website or the official specification repository would be the most accurate source for such documents.

Take Action:

Visit the NVM Express Organization's official website and their repository for obtaining the latest NVMe specifications.
Look for the "NVM Express Base Specification Revision 2.2" document to get the detailed analysis.
Remember to review the document directly for the latest and most accurate information.

Can I upload the PDF file for you?

As an AI, I don't have the capability to directly view, process, or upload files, including PDFs. My functionality is restricted to text-based interactions and answering questions or providing information based on my pre-existing knowledge.

However, here are some steps you can take to understand the content of the PDF file:

Read the Document: Open the PDF file using a PDF viewer or reader on your computer and read through the document. Look for sections labeled "Changes from Previous Version" or similar, which often summarize the updates and new features introduced in the revision.

Search Inside the PDF: Use the search function within your PDF reader to look for specific keywords like "new features," "performance improvements," "security enhancements," etc., to navigate directly to the relevant sections.

NVMe Community: If you're looking for interpretation or clarification on certain aspects, consider reaching out to the NVMe community forums or professional forums. This can provide insights from experts and users working with NVMe devices and standards.

Summary and Analysis: Once you've reviewed the document, you can summarize key points or ask specific questions about the content. I can provide explanations or context based on the information you provide from the document.

For detailed analysis or specific questions on the content of the NVM Express Specification Revision 2.2, please extract key points, findings, or questions that you want to discuss, and I'll do my best to help based on my existing knowledge of the topic. If you have any particular sections or pieces of technical jargon that you need explained or would like to know the implications of, feel free to ask!

So you can not read the PDF file itself is this correct really?

Yes, that's correct. I cannot read or process PDF files directly. As an AI language model, my functionality is limited to text-based interactions. I can help with understanding content and answering questions based on the information you provide or from my pre-existing knowledge database.

If you have specific sections, quotes, or information from the PDF file, you can share them as text, and I can help analyze, explain, or elaborate on the content.

For more detailed analysis of the NVM Express (NVMe) Specification Revision 2.2, here's how you can proceed without direct PDF reading assistance from me:

Extract Relevant Information: Read the PDF and extract key points, sections, or paragraphs that you're interested in. Highlight any features, changes, or specifications that you want to learn more about.

Summarize Key Points: Type out summaries or questions related to the content. For example, if you find new features in the specification, you might wonder how they differ from previous versions or what benefits they offer.

Ask Specific Questions: Based on the content you've read, formulate questions about concepts, terminologies, or implications of the changes. For instance, you might ask, "What are the new error handling mechanisms introduced in NVMe Revision 2.2 and how do they improve reliability?"

Provide Context: If you're discussing a specific technical term or feature, providing the surrounding text or context can be very helpful for me to give an accurate and helpful explanation.

Remember, I can only work with text input, so direct PDF content access is not possible. If you have text from the PDF, feel free to share, and I'll do my best to provide insightful responses!

Thank you! I would like to get the C language source code from the PDF file specification do you have any advice or comment?

If you're looking to extract C language source code from a PDF specification, such as the NVM Express Specification, it might seem challenging because specifications typically describe the interface, protocol, and behavior rather than providing actual implementation code. However, for certain parts of the specification, example code or pseudo-code might be included for clarity. Here are some steps to approach this task and some advice:

1. Manual Extraction:

Read the Specification: Thoroughly read the specification to identify sections containing example code, pseudo-code, or any C snippets meant to illustrate concepts.
Extract Code: Manually copy code snippets from the PDF to a text editor. PDF readers usually allow you to copy text.
Review and Correct: Due to PDF formatting and the potential for OCR errors, the code you extract may require manual review and correction. Ensure variable names, function names, and syntax are accurate.
2. Use OCR (Optical Character Recognition):

If there are extensive code listings, you might use OCR software to scan the PDF and convert text. However, OCR can be unreliable with code due to the precise syntax requirements.
Post-OCR Correction: After OCR conversion, manually review and correct any errors introduced during the conversion process.
3. Use Text Extraction Tools:

There are tools and scripts that can extract text from PDFs. These may be more reliable than OCR for code due to their ability to maintain formatting.
Tools like pdftotext (part of the poppler utilities on Linux) can be useful. Remember that these tools may not perfectly preserve code indentation and syntax, so manual review is still essential.
4. Consult the Official Repositories:

Often, specification bodies maintain reference implementations or example code on their official websites or repositories. For NVMe, check the NVM Express organization's website or GitHub repositories for any such resources.
These would be more reliable than trying to extract code directly from the specification document.
5. Interpretation and Implementation:

Keep in mind that specifications usually outline how something should work, not necessarily how to implement it in C (or any other language).
You may need to interpret the specification and write your own C code based on the guidelines and requirements outlined in the document.
6. Community and Forums:

Engage with the developer community or forums related to NVMe or the topic specified. They might have shared code snippets or interpretations of the standard that could be helpful.
Comment: The NVM Express specification is primarily a standard that outlines how NVMe devices should behave and communicate, not a source of implementable code. While you can find examples and pseudo-code for illustration, you'll need to translate these into actual C code for your application. Typically, this involves understanding the specifications and implementing the protocol accordingly, rather than directly translating provided code.

Lastly, if you're looking for reference implementations, the NVM Express organization might offer such resources or could point you to reputable third-party implementations. Always look for official or community-endorsed resources for the most accurate and secure implementations.

Okay I see. I would like to get the source code for register property and data structure fields. I will do consider more later. Thank you.

You're welcome! To obtain source code related to register properties and data structure fields, especially for something like NVMe specifications, the process generally involves a combination of manual extraction from the documents, understanding the specifications, and possibly referencing existing implementations. Here's how to proceed effectively:

1. Understand the Specification:

Read the specification thoroughly: Pay special attention to chapters or sections discussing register maps, command formats, or data structures. These sections often detail the properties and fields you're interested in.
2. Manual Extraction:

Extract relevant information: As mentioned earlier, manually extract code snippets, pseudo-code, or detailed descriptions of registers and data structures from the specification.
3. Reference Implementations:

Look for official or community implementations: The NVM Express organization's GitHub repositories or community forums might contain reference implementations or sample code. These can be invaluable for understanding how to structure your code and handle specific registers and data structures in C.
4. Developing Your Implementation:

Translate specifications to code: Once you understand the properties and data structure fields from the specification, translate this understanding into C code.
Registers: For each register, define a structure that mirrors the register layout as described in the specification.
Data Structures: Define C structures for any data structures described in the spec.
Accessors and Mutators: Write functions to read from and write to these structures and registers.
Example Structure in C: For illustration, let's create a simple example of how you might represent a register in C based on a hypothetical specification.

// Example: Hypothetical NVMe register structure
typedef struct {
    uint32_t commandCode;     // Command code (specify its layout according to the spec)
    uint8_t  flags;           // Flags (according to the spec)
    uint8_t  reserved;        // Reserved fields (follow the spec on how to handle these)
    uint32_t payloadLength;   // Length of payload (again, follow the spec)
} NVMeCommandRegister;

// Example function to read from the register
uint32_t readNVMeCommandCode(NVMeCommandRegister* reg) {
    return reg->commandCode;
}

// Example function to write to the register
void setNVMeCommandCode(NVMeCommandRegister* reg, uint32_t newCode) {
    reg->commandCode = newCode;
}
5. Testing and Validation:

Testing: Once you've implemented your version of the registers and data structures, thoroughly test your code using NVMe commands and expected responses from the specification.
Validation: Validate your implementation against the official NVMe test suite, if available, or use known good traffic to validate your implementation's correctness.
6. Online Resources and Communities:

NVMe-oF Community and Forums: Engage with the NVMe over Fabrics (NVMe-oF) community or other NVMe related forums. They often share code snippets, samples, and experiences that could be invaluable.
GitHub Repositories: Look at repositories with NVMe drivers or utilities; they might have open-source implementations that can serve as good examples.
Remember, the exact details of the register properties and data structure fields you need will be dictated by the specific areas of interest within the NVMe specification. Always refer back to the most current version of the specification and any reference implementations provided by the NVM Express organization.

If you encounter specific difficulties or need additional clarity on certain aspects of the specification, don't hesitate to reach out to the community or ask for guidance on forums or developer groups related to NVMe. Good luck with your implementation!
```

## translate text format specification data structure fields to C language source

```c
Hi, Can you do translate the following specification data structure fields to C language source code?

5.1.13.4.2 Get Ports List (CNS 1Eh)
A Ports List data structure (refer to Figure 336) is returned containing a list of Underlying Ports that may be used to export NVMe over Fabrics NVM subsystems.

Figure 336: Ports List Data Structure
Bytes	Description
07:00	Generation Counter (GENCTR): This field indicates the version of Port information. This field shall be cleared to 0h as a result of NVM Subsystem Reset of the Underlying NVM Subsystem. For each change in the Ports List, this counter is incremented by one. If the value of this field is FFFFFFFF_FFFFFFFFh, then the field shall be cleared to 0h when incremented (i.e., rolls over to 0h).
15:08	Number Entries (NUMENT): Number of Fabrics Transport Entries in the Ports List.
Ports List	Ports List
591:16	Fabrics Transport Entry 1: The first Underlying Fabrics Transport Entry data structure (refer to Figure 337) in the Ports List, if any.
1167:592	Fabrics Transport Entry 2: The second Underlying Fabrics Transport Entry data structure (refer to Figure 337) in the Ports List, if any..
…	…
576NUMENT+15: 576(NUMENT-1)+16	Fabrics Transport Entry NUMENT: The last Underlying Fabrics Transport Entry data structure (refer to Figure 337) in the Ports List, if any..
Figure 337: Underlying Fabrics Transport Entry Data Structure
Bytes	Description
255:00	Transport Address (TRADDR): This field indicates the address of the NVM subsystem that may be used for a Connect command as an ASCII string. The Transport Address Family field describes the reference for parsing this field. Refer to section 1.4 for ASCII string requirements. For the definition of this field, refer to the appropriate NVMe Transport specification.
511:256	Transport Specific Address Subtype (TSAS): This field indicates NVMe Transport specific information about the address. For the definition of this field, refer to the appropriate NVMe Transport specification.
513:512	Port ID of the Underlying Port (PIDUP): Refer to the PORTID field in Figure 295.
Figure 337: Underlying Fabrics Transport Entry Data Structure

Bytes	Description
514	Transport Type (TRTYPE): Specifies the NVMe Transport Type. Refer to Figure 295.
515	Transport Address Family (ADRFAM): Specifies the Address Family. Refer Figure 295.
516	Transport Requirements (TREQ): This field indicates requirements for the NVMe Transport. Refer to Figure 295.
575:517	Reserved
Command Completion
Upon completion of the Identify command, the controller posts a completion queue entry to the Admin Completion Queue.

Certainly! Translating the provided specifications into C code results in defining structures that mirror the data layout as described. Here's how you might represent the "Ports List" and "Underlying Fabrics Transport Entry" data structures in C:

Ports List Data Structure
// Define constants for readability
#define GENCTR_MAX   0xFFFFFFFFFFFFFFFF // Maximum value for Generation Counter rollover
#define NUMENT_MAX   0xFF             // Maximum number of entries (assuming each entry uses 576 bytes)

typedef struct NVMePortsList {
    uint32_t generationCounter;     // Generation Counter (GENCTR)
    uint16_t numberOfEntries;       // Number of Entries (NUMENT)
    NVMeFabricsTransportEntry entries[NUMENT_MAX]; // Array for storing Fabrics Transport Entries
} NVMePortsList;

// Note: entries is dynamically sized based on numberOfEntries.
// In practice, you would allocate memory as needed based on the actual number of entries.

// Function to handle dynamic allocation
NVMePortsList* allocateNVMePortsList(uint16_t numberOfEntries) {
    NVMePortsList* portsList = (NVMePortsList*)malloc(sizeof(NVMePortsList) + (numberOfEntries * sizeof(NVMeFabricsTransportEntry)));
    if (!portsList) {
        return NULL;
    }
    portsList->generationCounter = 0; // Reset GENCTR
    portsList->numberOfEntries = numberOfEntries;
    return portsList;
}

// Free allocated memory
void freeNVMePortsList(NVMePortsList* portsList) {
    free(portsList);
}

### Underlying Fabrics Transport Entry Data Structure


typedef struct NVMeFabricsTransportEntry {
    uint8_t transportAddress[256];  // Transport Address (TRADDR) as an ASCII string
    uint8_t transportSpecificAddressSubtype; // Transport Specific Address Subtype (TSAS)
    uint8_t portIDUnderlyingPort[2]; // Port ID of the Underlying Port (PIDUP)
    uint8_t transportType;           // Transport
Great! Let me ask you more about different coding style format.

Absolutely, understanding different coding style formats is important for writing clean, maintainable, and
```

## change coding style to linux kernel coding style

```c
Can you do change the following source code translated from the text format specification data structure fields by you to the linux kernel coding style? // Define constants for readability #define GENCTR_MAX 0xFFFFFFFFFFFFFFFF // Maximum value for Generation Counter rollover #define NUMENT_MAX 0xFF // Maximum number of entries (assuming each entry uses 576 bytes)

typedef struct NVMePortsList { uint32_t generationCounter; // Generation Counter (GENCTR) uint16_t numberOfEntries; // Number of Entries (NUMENT) NVMeFabricsTransportEntry entries[NUMENT_MAX]; // Array for storing Fabrics Transport Entries } NVMePortsList;

// Note: entries is dynamically sized based on numberOfEntries. // In practice, you would allocate memory as needed based on the actual number of entries.

// Function to handle dynamic allocation NVMePortsList* allocateNVMePortsList(uint16_t numberOfEntries) { NVMePortsList* portsList = (NVMePortsList*)malloc(sizeof(NVMePortsList) + (numberOfEntries * sizeof(NVMeFabricsTransportEntry))); if (!portsList) { return NULL; } portsList->generationCounter = 0; // Reset GENCTR portsList->numberOfEntries = numberOfEntries; return portsList; }

// Free allocated memory void freeNVMePortsList(NVMePortsList* portsList) { free(portsList); }

Underlying Fabrics Transport Entry Data Structure
typedef struct NVMeFabricsTransportEntry { uint8_t transportAddress[256]; // Transport Address (TRADDR) as an ASCII string uint8_t transportSpecificAddressSubtype; // Transport Specific Address Subtype (TSAS) uint8_t portIDUnderlyingPort[2]; // Port ID of the Underlying Port (PIDUP) uint8_t transportType; // Transport

Here's the rewritten code in the Linux kernel coding style. The Linux kernel coding style prefers 8 spaces for indentation, a specific way of handling comments, and specific naming conventions (e.g., function names are usually lower case with underscores between words). Also, the use of the 'KERN_...' macros for printk debugging is common but not added here as it doesn't relate directly to this translation task.

/* Define constants for readability (Linux kernel style) */
#define GENCTR_MAX   0xFFFFFFFFFFFFFFFF  /* Maximum value for Generation Counter rollover */
#define NUMENT_MAX   0xFF              /* Maximum number of entries (assuming each entry uses 576 bytes) */

/* NVMePortsList struct definition */
typedef struct {
    uint32_t generation_counter;   /* Generation Counter (GENCTR) */
    uint16_t number_of_entries;    /* Number of Entries (NUMENT) */
    struct {
        uint8_t transport_address[256];  /* Transport Address (TRADDR) as an ASCII string */
        uint8_t transport_specific_address_subtype; /* Transport Specific Address Subtype (TSAS) */
        uint8_t port_id_underlying_port[2]; /* Port ID of the Underlying Port (PIDUP) */
        uint8_t transport_type;            /* Transport Type */
    } entries[NUMENT_MAX];  /* Array for storing Fabrics Transport Entries, dynamically sized in allocateNVMePortsList() */
} NVMePortsList;

/* Function to handle dynamic allocation */
NVMePortsList *allocate_nvme_ports_list(uint16_t number_of_entries) {
    NVMePortsList *ports_list;
    ports_list = kmalloc(sizeof(*ports_list) + (number_of_entries * sizeof(ports_list->entries[0])), GFP_KERNEL);
    if (!ports_list) {
        pr_debug("Failed to allocate memory for NVMePortsList.");
        return NULL;
    }
    ports_list->generation_counter = 0; /* Reset GENCTR */
    ports_list->number_of_entries = number_of_entries;
    return ports_list;
}

/* Function to free allocated memory */
void free_nvme_ports_list(NVMePortsList *ports_list) {
    kfree(ports_list);
}

/* Note: In the Linux kernel, kmalloc() is preferred for dynamic memory allocation instead of malloc().
   Also, the GFP_ flags specify the allocation priority and are used to tell the memory allocation
   subsystem the nature of the allocation. Here, GFP_KERNEL is used as it's a typical choice for
   allocating memory in a process context.

** Please note that the proper use of kmalloc() includes checking the return value and appropriate flags
   based on the context where the allocation occurs (e.g., interrupt context or non-interrupt context).
   Additionally, the actual implementation may need to include error handling and compliance with the
   requirements of the Linux kernel APIs.

** Also, for actual kernel code, you should include relevant header files and ensure compatibility
   with the kernel's APIs and coding standards. Check the Linux kernel's Documentation directory for
   details on kernel coding style and API usage.

** This code snippet does not include such details for brevity and focuses on demonstrating the
   stylistic changes.**

** Important: Actual kernel development involves more than just coding style and includes understanding
   the kernel's API, memory management, and other kernel-specific features.**
Please note that in an actual Linux kernel environment, more care is taken to ensure the code is safe, efficient, and follows all kernel coding conventions and API usage guidelines. This includes proper error handling, appropriate memory flags, and correct use of kernel APIs such as kmalloc and kfree.

Thank you.

You're welcome! If you have any more questions or need further assistance with programming, Linux kernel development, or any other topic, feel free to ask. Happy coding!
```

# docling

https://github.com/docling-project/docling?tab=readme-ov-file

```sh
tokunori@tokunori-desktop:~/nvme-cli/subprojects/libnvme$ pip install docling
Defaulting to user installation because normal site-packages is not writeable
Collecting docling
  Downloading docling-2.36.1-py3-none-any.whl.metadata (10 kB)
Collecting pydantic<3.0.0,>=2.0.0 (from docling)
  Downloading pydantic-2.11.5-py3-none-any.whl.metadata (67 kB)
Collecting docling-core<3.0.0,>=2.29.0 (from docling-core[chunking]<3.0.0,>=2.29.0->docling)
  Downloading docling_core-2.34.0-py3-none-any.whl.metadata (6.5 kB)
Collecting docling-ibm-models<4.0.0,>=3.4.4 (from docling)
  Downloading docling_ibm_models-3.4.4-py3-none-any.whl.metadata (6.4 kB)
Collecting docling-parse<5.0.0,>=4.0.0 (from docling)
  Downloading docling_parse-4.0.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (9.6 kB)
Collecting filetype<2.0.0,>=1.2.0 (from docling)
  Downloading filetype-1.2.0-py2.py3-none-any.whl.metadata (6.5 kB)
Collecting pypdfium2<5.0.0,>=4.30.0 (from docling)
  Downloading pypdfium2-4.30.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (48 kB)
Collecting pydantic-settings<3.0.0,>=2.3.0 (from docling)
  Downloading pydantic_settings-2.9.1-py3-none-any.whl.metadata (3.8 kB)
Collecting huggingface_hub<1,>=0.23 (from docling)
  Downloading huggingface_hub-0.32.4-py3-none-any.whl.metadata (14 kB)
Requirement already satisfied: requests<3.0.0,>=2.32.2 in /usr/lib/python3/dist-packages (from docling) (2.32.3)
Collecting easyocr<2.0,>=1.7 (from docling)
  Downloading easyocr-1.7.2-py3-none-any.whl.metadata (10 kB)
Requirement already satisfied: certifi>=2024.7.4 in /usr/lib/python3/dist-packages (from docling) (2025.1.31)
Collecting rtree<2.0.0,>=1.3.0 (from docling)
  Downloading rtree-1.4.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (2.1 kB)
Collecting typer<0.17.0,>=0.12.5 (from docling)
  Downloading typer-0.16.0-py3-none-any.whl.metadata (15 kB)
Collecting python-docx<2.0.0,>=1.1.2 (from docling)
  Downloading python_docx-1.1.2-py3-none-any.whl.metadata (2.0 kB)
Collecting python-pptx<2.0.0,>=1.0.2 (from docling)
  Downloading python_pptx-1.0.2-py3-none-any.whl.metadata (2.5 kB)
Requirement already satisfied: beautifulsoup4<5.0.0,>=4.12.3 in /usr/lib/python3/dist-packages (from docling) (4.13.3)
Collecting pandas<3.0.0,>=2.1.4 (from docling)
  Downloading pandas-2.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (91 kB)
Collecting marko<3.0.0,>=2.1.2 (from docling)
  Downloading marko-2.1.3-py3-none-any.whl.metadata (4.5 kB)
Collecting openpyxl<4.0.0,>=3.1.5 (from docling)
  Downloading openpyxl-3.1.5-py2.py3-none-any.whl.metadata (2.5 kB)
Requirement already satisfied: lxml<6.0.0,>=4.0.0 in /usr/lib/python3/dist-packages (from docling) (5.3.2)
Requirement already satisfied: pillow<12.0.0,>=10.0.0 in /usr/lib/python3/dist-packages (from docling) (11.1.0)
Collecting tqdm<5.0.0,>=4.65.0 (from docling)
  Downloading tqdm-4.67.1-py3-none-any.whl.metadata (57 kB)
Collecting pluggy<2.0.0,>=1.0.0 (from docling)
  Downloading pluggy-1.6.0-py3-none-any.whl.metadata (4.8 kB)
Collecting pylatexenc<3.0,>=2.10 (from docling)
  Downloading pylatexenc-2.10.tar.gz (162 kB)
  Preparing metadata (setup.py) ... done
Collecting scipy<2.0.0,>=1.6.0 (from docling)
  Downloading scipy-1.15.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)
Requirement already satisfied: soupsieve>1.2 in /usr/lib/python3/dist-packages (from beautifulsoup4<5.0.0,>=4.12.3->docling) (2.6)
Requirement already satisfied: typing-extensions>=4.0.0 in /usr/lib/python3/dist-packages (from beautifulsoup4<5.0.0,>=4.12.3->docling) (4.12.2)
Requirement already satisfied: jsonschema<5.0.0,>=4.16.0 in /usr/lib/python3/dist-packages (from docling-core<3.0.0,>=2.29.0->docling-core[chunking]<3.0.0,>=2.29.0->docling) (4.19.2)
Collecting jsonref<2.0.0,>=1.1.0 (from docling-core<3.0.0,>=2.29.0->docling-core[chunking]<3.0.0,>=2.29.0->docling)
  Downloading jsonref-1.1.0-py3-none-any.whl.metadata (2.7 kB)
Collecting tabulate<0.10.0,>=0.9.0 (from docling-core<3.0.0,>=2.29.0->docling-core[chunking]<3.0.0,>=2.29.0->docling)
  Downloading tabulate-0.9.0-py3-none-any.whl.metadata (34 kB)
Requirement already satisfied: pyyaml<7.0.0,>=5.1 in /usr/lib/python3/dist-packages (from docling-core<3.0.0,>=2.29.0->docling-core[chunking]<3.0.0,>=2.29.0->docling) (6.0.2)
Collecting latex2mathml<4.0.0,>=3.77.0 (from docling-core<3.0.0,>=2.29.0->docling-core[chunking]<3.0.0,>=2.29.0->docling)
  Downloading latex2mathml-3.78.0-py3-none-any.whl.metadata (14 kB)
Collecting semchunk<3.0.0,>=2.2.0 (from docling-core[chunking]<3.0.0,>=2.29.0->docling)
  Downloading semchunk-2.2.2-py3-none-any.whl.metadata (10 kB)
Collecting transformers<5.0.0,>=4.34.0 (from docling-core[chunking]<3.0.0,>=2.29.0->docling)
  Downloading transformers-4.52.4-py3-none-any.whl.metadata (38 kB)
Collecting torch<3.0.0,>=2.2.2 (from docling-ibm-models<4.0.0,>=3.4.4->docling)
  Downloading torch-2.7.1-cp313-cp313-manylinux_2_28_x86_64.whl.metadata (29 kB)
Collecting torchvision<1,>=0 (from docling-ibm-models<4.0.0,>=3.4.4->docling)
  Downloading torchvision-0.22.1-cp313-cp313-manylinux_2_28_x86_64.whl.metadata (6.1 kB)
Collecting jsonlines<4.0.0,>=3.1.0 (from docling-ibm-models<4.0.0,>=3.4.4->docling)
  Downloading jsonlines-3.1.0-py3-none-any.whl.metadata (1.7 kB)
Collecting opencv-python-headless<5.0.0.0,>=4.6.0.66 (from docling-ibm-models<4.0.0,>=3.4.4->docling)
  Downloading opencv_python_headless-4.11.0.86-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (20 kB)
Collecting safetensors<1,>=0.4.3 (from safetensors[torch]<1,>=0.4.3->docling-ibm-models<4.0.0,>=3.4.4->docling)
  Downloading safetensors-0.5.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.8 kB)
Collecting numpy<3.0.0,>=1.24.4 (from docling-ibm-models<4.0.0,>=3.4.4->docling)
  Downloading numpy-2.3.0-cp313-cp313-manylinux_2_28_x86_64.whl.metadata (62 kB)
Collecting scikit-image (from easyocr<2.0,>=1.7->docling)
  Downloading scikit_image-0.25.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (14 kB)
Collecting python-bidi (from easyocr<2.0,>=1.7->docling)
  Downloading python_bidi-0.6.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.9 kB)
Collecting Shapely (from easyocr<2.0,>=1.7->docling)
  Downloading shapely-2.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.8 kB)
Collecting pyclipper (from easyocr<2.0,>=1.7->docling)
  Downloading pyclipper-1.3.0.post6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (9.0 kB)
Collecting ninja (from easyocr<2.0,>=1.7->docling)
  Downloading ninja-1.11.1.4-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.metadata (5.0 kB)
Collecting filelock (from huggingface_hub<1,>=0.23->docling)
  Downloading filelock-3.18.0-py3-none-any.whl.metadata (2.9 kB)
Collecting fsspec>=2023.5.0 (from huggingface_hub<1,>=0.23->docling)
  Downloading fsspec-2025.5.1-py3-none-any.whl.metadata (11 kB)
Requirement already satisfied: packaging>=20.9 in /usr/lib/python3/dist-packages (from huggingface_hub<1,>=0.23->docling) (24.2)
Collecting hf-xet<2.0.0,>=1.1.2 (from huggingface_hub<1,>=0.23->docling)
  Downloading hf_xet-1.1.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (879 bytes)
Collecting et-xmlfile (from openpyxl<4.0.0,>=3.1.5->docling)
  Downloading et_xmlfile-2.0.0-py3-none-any.whl.metadata (2.7 kB)
Requirement already satisfied: python-dateutil>=2.8.2 in /usr/lib/python3/dist-packages (from pandas<3.0.0,>=2.1.4->docling) (2.9.0)
Collecting pytz>=2020.1 (from pandas<3.0.0,>=2.1.4->docling)
  Downloading pytz-2025.2-py2.py3-none-any.whl.metadata (22 kB)
Collecting tzdata>=2022.7 (from pandas<3.0.0,>=2.1.4->docling)
  Downloading tzdata-2025.2-py2.py3-none-any.whl.metadata (1.4 kB)
Collecting annotated-types>=0.6.0 (from pydantic<3.0.0,>=2.0.0->docling)
  Downloading annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)
Collecting pydantic-core==2.33.2 (from pydantic<3.0.0,>=2.0.0->docling)
  Downloading pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.8 kB)
Collecting typing-inspection>=0.4.0 (from pydantic<3.0.0,>=2.0.0->docling)
  Downloading typing_inspection-0.4.1-py3-none-any.whl.metadata (2.6 kB)
Collecting python-dotenv>=0.21.0 (from pydantic-settings<3.0.0,>=2.3.0->docling)
  Downloading python_dotenv-1.1.0-py3-none-any.whl.metadata (24 kB)
Collecting XlsxWriter>=0.5.7 (from python-pptx<2.0.0,>=1.0.2->docling)
  Downloading XlsxWriter-3.2.3-py3-none-any.whl.metadata (2.7 kB)
Requirement already satisfied: chardet>=3.0.2 in /usr/lib/python3/dist-packages (from requests<3.0.0,>=2.32.2->docling) (5.2.0)
Requirement already satisfied: idna<4,>=2.5 in /usr/lib/python3/dist-packages (from requests<3.0.0,>=2.32.2->docling) (3.10)
Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/lib/python3/dist-packages (from requests<3.0.0,>=2.32.2->docling) (2.3.0)
Requirement already satisfied: click>=8.0.0 in /usr/lib/python3/dist-packages (from typer<0.17.0,>=0.12.5->docling) (8.1.8)
Collecting shellingham>=1.3.0 (from typer<0.17.0,>=0.12.5->docling)
  Downloading shellingham-1.5.4-py2.py3-none-any.whl.metadata (3.5 kB)
Requirement already satisfied: rich>=10.11.0 in /usr/lib/python3/dist-packages (from typer<0.17.0,>=0.12.5->docling) (13.9.4)
Requirement already satisfied: attrs>=19.2.0 in /usr/lib/python3/dist-packages (from jsonlines<4.0.0,>=3.1.0->docling-ibm-models<4.0.0,>=3.4.4->docling) (25.1.0)
Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /usr/lib/python3/dist-packages (from jsonschema<5.0.0,>=4.16.0->docling-core<3.0.0,>=2.29.0->docling-core[chunking]<3.0.0,>=2.29.0->docling) (2023.12.1)
Requirement already satisfied: referencing>=0.28.4 in /usr/lib/python3/dist-packages (from jsonschema<5.0.0,>=4.16.0->docling-core<3.0.0,>=2.29.0->docling-core[chunking]<3.0.0,>=2.29.0->docling) (0.35.1)
Requirement already satisfied: rpds-py>=0.7.1 in /usr/lib/python3/dist-packages (from jsonschema<5.0.0,>=4.16.0->docling-core<3.0.0,>=2.29.0->docling-core[chunking]<3.0.0,>=2.29.0->docling) (0.21.0)
Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/lib/python3/dist-packages (from rich>=10.11.0->typer<0.17.0,>=0.12.5->docling) (3.0.0)
Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/lib/python3/dist-packages (from rich>=10.11.0->typer<0.17.0,>=0.12.5->docling) (2.18.0)
Collecting mpire[dill] (from semchunk<3.0.0,>=2.2.0->docling-core[chunking]<3.0.0,>=2.29.0->docling)
  Downloading mpire-2.10.2-py3-none-any.whl.metadata (14 kB)
Requirement already satisfied: setuptools in /usr/lib/python3/dist-packages (from torch<3.0.0,>=2.2.2->docling-ibm-models<4.0.0,>=3.4.4->docling) (75.8.0)
Collecting sympy>=1.13.3 (from torch<3.0.0,>=2.2.2->docling-ibm-models<4.0.0,>=3.4.4->docling)
  Downloading sympy-1.14.0-py3-none-any.whl.metadata (12 kB)
Collecting networkx (from torch<3.0.0,>=2.2.2->docling-ibm-models<4.0.0,>=3.4.4->docling)
  Downloading networkx-3.5-py3-none-any.whl.metadata (6.3 kB)
Requirement already satisfied: jinja2 in /usr/lib/python3/dist-packages (from torch<3.0.0,>=2.2.2->docling-ibm-models<4.0.0,>=3.4.4->docling) (3.1.5)
Collecting nvidia-cuda-nvrtc-cu12==12.6.77 (from torch<3.0.0,>=2.2.2->docling-ibm-models<4.0.0,>=3.4.4->docling)
  Downloading nvidia_cuda_nvrtc_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)
Collecting nvidia-cuda-runtime-cu12==12.6.77 (from torch<3.0.0,>=2.2.2->docling-ibm-models<4.0.0,>=3.4.4->docling)
  Downloading nvidia_cuda_runtime_cu12-12.6.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (1.5 kB)
Collecting nvidia-cuda-cupti-cu12==12.6.80 (from torch<3.0.0,>=2.2.2->docling-ibm-models<4.0.0,>=3.4.4->docling)
  Downloading nvidia_cuda_cupti_cu12-12.6.80-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (1.6 kB)
Collecting nvidia-cudnn-cu12==9.5.1.17 (from torch<3.0.0,>=2.2.2->docling-ibm-models<4.0.0,>=3.4.4->docling)
  Downloading nvidia_cudnn_cu12-9.5.1.17-py3-none-manylinux_2_28_x86_64.whl.metadata (1.6 kB)
Collecting nvidia-cublas-cu12==12.6.4.1 (from torch<3.0.0,>=2.2.2->docling-ibm-models<4.0.0,>=3.4.4->docling)
  Downloading nvidia_cublas_cu12-12.6.4.1-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (1.5 kB)
Collecting nvidia-cufft-cu12==11.3.0.4 (from torch<3.0.0,>=2.2.2->docling-ibm-models<4.0.0,>=3.4.4->docling)
  Downloading nvidia_cufft_cu12-11.3.0.4-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (1.5 kB)
Collecting nvidia-curand-cu12==10.3.7.77 (from torch<3.0.0,>=2.2.2->docling-ibm-models<4.0.0,>=3.4.4->docling)
  Downloading nvidia_curand_cu12-10.3.7.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (1.5 kB)
Collecting nvidia-cusolver-cu12==11.7.1.2 (from torch<3.0.0,>=2.2.2->docling-ibm-models<4.0.0,>=3.4.4->docling)
  Downloading nvidia_cusolver_cu12-11.7.1.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (1.6 kB)
Collecting nvidia-cusparse-cu12==12.5.4.2 (from torch<3.0.0,>=2.2.2->docling-ibm-models<4.0.0,>=3.4.4->docling)
  Downloading nvidia_cusparse_cu12-12.5.4.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (1.6 kB)
Collecting nvidia-cusparselt-cu12==0.6.3 (from torch<3.0.0,>=2.2.2->docling-ibm-models<4.0.0,>=3.4.4->docling)
  Downloading nvidia_cusparselt_cu12-0.6.3-py3-none-manylinux2014_x86_64.whl.metadata (6.8 kB)
Collecting nvidia-nccl-cu12==2.26.2 (from torch<3.0.0,>=2.2.2->docling-ibm-models<4.0.0,>=3.4.4->docling)
  Downloading nvidia_nccl_cu12-2.26.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (2.0 kB)
Collecting nvidia-nvtx-cu12==12.6.77 (from torch<3.0.0,>=2.2.2->docling-ibm-models<4.0.0,>=3.4.4->docling)
  Downloading nvidia_nvtx_cu12-12.6.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (1.6 kB)
Collecting nvidia-nvjitlink-cu12==12.6.85 (from torch<3.0.0,>=2.2.2->docling-ibm-models<4.0.0,>=3.4.4->docling)
  Downloading nvidia_nvjitlink_cu12-12.6.85-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl.metadata (1.5 kB)
Collecting nvidia-cufile-cu12==1.11.1.6 (from torch<3.0.0,>=2.2.2->docling-ibm-models<4.0.0,>=3.4.4->docling)
  Downloading nvidia_cufile_cu12-1.11.1.6-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (1.5 kB)
Collecting triton==3.3.1 (from torch<3.0.0,>=2.2.2->docling-ibm-models<4.0.0,>=3.4.4->docling)
  Downloading triton-3.3.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (1.5 kB)
Collecting regex!=2019.12.17 (from transformers<5.0.0,>=4.34.0->docling-core[chunking]<3.0.0,>=2.29.0->docling)
  Downloading regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (40 kB)
Collecting tokenizers<0.22,>=0.21 (from transformers<5.0.0,>=4.34.0->docling-core[chunking]<3.0.0,>=2.29.0->docling)
  Downloading tokenizers-0.21.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.8 kB)
Collecting imageio!=2.35.0,>=2.33 (from scikit-image->easyocr<2.0,>=1.7->docling)
  Downloading imageio-2.37.0-py3-none-any.whl.metadata (5.2 kB)
Collecting tifffile>=2022.8.12 (from scikit-image->easyocr<2.0,>=1.7->docling)
  Downloading tifffile-2025.6.1-py3-none-any.whl.metadata (32 kB)
Collecting lazy-loader>=0.4 (from scikit-image->easyocr<2.0,>=1.7->docling)
  Downloading lazy_loader-0.4-py3-none-any.whl.metadata (7.6 kB)
Requirement already satisfied: mdurl~=0.1 in /usr/lib/python3/dist-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer<0.17.0,>=0.12.5->docling) (0.1.2)
Collecting mpmath<1.4,>=1.1.0 (from sympy>=1.13.3->torch<3.0.0,>=2.2.2->docling-ibm-models<4.0.0,>=3.4.4->docling)
  Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)
Requirement already satisfied: MarkupSafe>=2.0 in /usr/lib/python3/dist-packages (from jinja2->torch<3.0.0,>=2.2.2->docling-ibm-models<4.0.0,>=3.4.4->docling) (2.1.5)
Collecting multiprocess>=0.70.15 (from mpire[dill]->semchunk<3.0.0,>=2.2.0->docling-core[chunking]<3.0.0,>=2.29.0->docling)
  Downloading multiprocess-0.70.18-py313-none-any.whl.metadata (7.2 kB)
Collecting dill>=0.4.0 (from multiprocess>=0.70.15->mpire[dill]->semchunk<3.0.0,>=2.2.0->docling-core[chunking]<3.0.0,>=2.29.0->docling)
  Downloading dill-0.4.0-py3-none-any.whl.metadata (10 kB)
Downloading docling-2.36.1-py3-none-any.whl (178 kB)
Downloading docling_core-2.34.0-py3-none-any.whl (146 kB)
Downloading docling_ibm_models-3.4.4-py3-none-any.whl (80 kB)
Downloading docling_parse-4.0.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (15.1 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 15.1/15.1 MB 2.0 MB/s eta 0:00:00
Downloading easyocr-1.7.2-py3-none-any.whl (2.9 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.9/2.9 MB 2.4 MB/s eta 0:00:00
Downloading filetype-1.2.0-py2.py3-none-any.whl (19 kB)
Downloading huggingface_hub-0.32.4-py3-none-any.whl (512 kB)
Downloading marko-2.1.3-py3-none-any.whl (42 kB)
Downloading openpyxl-3.1.5-py2.py3-none-any.whl (250 kB)
Downloading pandas-2.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.0 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.0/12.0 MB 2.1 MB/s eta 0:00:00
Downloading pluggy-1.6.0-py3-none-any.whl (20 kB)
Downloading pydantic-2.11.5-py3-none-any.whl (444 kB)
Downloading pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 2.3 MB/s eta 0:00:00
Downloading pydantic_settings-2.9.1-py3-none-any.whl (44 kB)
Downloading pypdfium2-4.30.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.9 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.9/2.9 MB 2.5 MB/s eta 0:00:00
Downloading python_docx-1.1.2-py3-none-any.whl (244 kB)
Downloading python_pptx-1.0.2-py3-none-any.whl (472 kB)
Downloading rtree-1.4.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (541 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 541.1/541.1 kB 3.2 MB/s eta 0:00:00
Downloading scipy-1.15.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (37.3 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 37.3/37.3 MB 2.5 MB/s eta 0:00:00
Downloading tqdm-4.67.1-py3-none-any.whl (78 kB)
Downloading typer-0.16.0-py3-none-any.whl (46 kB)
Downloading annotated_types-0.7.0-py3-none-any.whl (13 kB)
Downloading fsspec-2025.5.1-py3-none-any.whl (199 kB)
Downloading hf_xet-1.1.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.8 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.8/4.8 MB 2.8 MB/s eta 0:00:00
Downloading jsonlines-3.1.0-py3-none-any.whl (8.6 kB)
Downloading jsonref-1.1.0-py3-none-any.whl (9.4 kB)
Downloading latex2mathml-3.78.0-py3-none-any.whl (73 kB)
Downloading numpy-2.3.0-cp313-cp313-manylinux_2_28_x86_64.whl (16.6 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 16.6/16.6 MB 2.7 MB/s eta 0:00:00
Downloading opencv_python_headless-4.11.0.86-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (50.0 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 50.0/50.0 MB 2.3 MB/s eta 0:00:00
Downloading python_dotenv-1.1.0-py3-none-any.whl (20 kB)
Downloading pytz-2025.2-py2.py3-none-any.whl (509 kB)
Downloading safetensors-0.5.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (471 kB)
Downloading semchunk-2.2.2-py3-none-any.whl (10 kB)
Downloading shellingham-1.5.4-py2.py3-none-any.whl (9.8 kB)
Downloading tabulate-0.9.0-py3-none-any.whl (35 kB)
Downloading torch-2.7.1-cp313-cp313-manylinux_2_28_x86_64.whl (821.0 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 821.0/821.0 MB 2.3 MB/s eta 0:00:00
Downloading nvidia_cublas_cu12-12.6.4.1-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (393.1 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 393.1/393.1 MB 2.6 MB/s eta 0:00:00
Downloading nvidia_cuda_cupti_cu12-12.6.80-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (8.9 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.9/8.9 MB 2.5 MB/s eta 0:00:00
Downloading nvidia_cuda_nvrtc_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl (23.7 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 23.7/23.7 MB 2.2 MB/s eta 0:00:00
Downloading nvidia_cuda_runtime_cu12-12.6.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (897 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 897.7/897.7 kB 3.0 MB/s eta 0:00:00
Downloading nvidia_cudnn_cu12-9.5.1.17-py3-none-manylinux_2_28_x86_64.whl (571.0 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 571.0/571.0 MB 2.7 MB/s eta 0:00:00
Downloading nvidia_cufft_cu12-11.3.0.4-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (200.2 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 200.2/200.2 MB 2.7 MB/s eta 0:00:00
Downloading nvidia_cufile_cu12-1.11.1.6-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (1.1 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 2.9 MB/s eta 0:00:00
Downloading nvidia_curand_cu12-10.3.7.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (56.3 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.3/56.3 MB 2.9 MB/s eta 0:00:00
Downloading nvidia_cusolver_cu12-11.7.1.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (158.2 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 158.2/158.2 MB 3.1 MB/s eta 0:00:00
Downloading nvidia_cusparse_cu12-12.5.4.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (216.6 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 216.6/216.6 MB 2.8 MB/s eta 0:00:00
Downloading nvidia_cusparselt_cu12-0.6.3-py3-none-manylinux2014_x86_64.whl (156.8 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 156.8/156.8 MB 3.0 MB/s eta 0:00:00
Downloading nvidia_nccl_cu12-2.26.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (201.3 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 201.3/201.3 MB 3.1 MB/s eta 0:00:00
Downloading nvidia_nvjitlink_cu12-12.6.85-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl (19.7 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 19.7/19.7 MB 3.3 MB/s eta 0:00:00
Downloading nvidia_nvtx_cu12-12.6.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (89 kB)
Downloading triton-3.3.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (155.7 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 155.7/155.7 MB 3.1 MB/s eta 0:00:00
Downloading torchvision-0.22.1-cp313-cp313-manylinux_2_28_x86_64.whl (7.5 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.5/7.5 MB 3.0 MB/s eta 0:00:00
Downloading transformers-4.52.4-py3-none-any.whl (10.5 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.5/10.5 MB 2.8 MB/s eta 0:00:00
Downloading typing_inspection-0.4.1-py3-none-any.whl (14 kB)
Downloading tzdata-2025.2-py2.py3-none-any.whl (347 kB)
Downloading XlsxWriter-3.2.3-py3-none-any.whl (169 kB)
Downloading et_xmlfile-2.0.0-py3-none-any.whl (18 kB)
Downloading filelock-3.18.0-py3-none-any.whl (16 kB)
Downloading ninja-1.11.1.4-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (422 kB)
Downloading pyclipper-1.3.0.post6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (962 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 962.5/962.5 kB 3.2 MB/s eta 0:00:00
Downloading python_bidi-0.6.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (291 kB)
Downloading scikit_image-0.25.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (15.0 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 15.0/15.0 MB 2.9 MB/s eta 0:00:00
Downloading shapely-2.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1/3.1 MB 3.5 MB/s eta 0:00:00
Downloading imageio-2.37.0-py3-none-any.whl (315 kB)
Downloading lazy_loader-0.4-py3-none-any.whl (12 kB)
Downloading networkx-3.5-py3-none-any.whl (2.0 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 3.1 MB/s eta 0:00:00
Downloading regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (796 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 796.9/796.9 kB 3.2 MB/s eta 0:00:00
Downloading sympy-1.14.0-py3-none-any.whl (6.3 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.3/6.3 MB 3.6 MB/s eta 0:00:00
Downloading tifffile-2025.6.1-py3-none-any.whl (230 kB)
Downloading tokenizers-0.21.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.0 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.0/3.0 MB 3.6 MB/s eta 0:00:00
Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 3.3 MB/s eta 0:00:00
Downloading multiprocess-0.70.18-py313-none-any.whl (151 kB)
Downloading mpire-2.10.2-py3-none-any.whl (272 kB)
Downloading dill-0.4.0-py3-none-any.whl (119 kB)
Building wheels for collected packages: pylatexenc
  Building wheel for pylatexenc (setup.py) ... done
  Created wheel for pylatexenc: filename=pylatexenc-2.10-py3-none-any.whl size=136863 sha256=62a2206e7a576961d60de189becb77876398ea9364b6658cfee28c11ed262bc0
  Stored in directory: /home/tokunori/.cache/pip/wheels/3c/d9/c1/bb2a15d13c742b9035ef7ae6ebe236af270b1d1d9b386dcd5e
Successfully built pylatexenc
Installing collected packages: pytz, python-bidi, pylatexenc, pyclipper, nvidia-cusparselt-cu12, mpmath, filetype, XlsxWriter, tzdata, typing-inspection, triton, tqdm, tabulate, sympy, shellingham, safetensors, rtree, regex, python-dotenv, python-docx, pypdfium2, pydantic-core, pluggy, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufile-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, numpy, ninja, networkx, marko, lazy-loader, latex2mathml, jsonref, jsonlines, hf-xet, fsspec, filelock, et-xmlfile, dill, annotated-types, tifffile, Shapely, scipy, python-pptx, pydantic, pandas, openpyxl, opencv-python-headless, nvidia-cusparse-cu12, nvidia-cufft-cu12, nvidia-cudnn-cu12, multiprocess, mpire, imageio, huggingface_hub, typer, tokenizers, scikit-image, pydantic-settings, nvidia-cusolver-cu12, transformers, torch, semchunk, docling-core, torchvision, docling-parse, easyocr, docling-ibm-models, docling
Successfully installed Shapely-2.1.1 XlsxWriter-3.2.3 annotated-types-0.7.0 dill-0.4.0 docling-2.36.1 docling-core-2.34.0 docling-ibm-models-3.4.4 docling-parse-4.0.3 easyocr-1.7.2 et-xmlfile-2.0.0 filelock-3.18.0 filetype-1.2.0 fsspec-2025.5.1 hf-xet-1.1.3 huggingface_hub-0.32.4 imageio-2.37.0 jsonlines-3.1.0 jsonref-1.1.0 latex2mathml-3.78.0 lazy-loader-0.4 marko-2.1.3 mpire-2.10.2 mpmath-1.3.0 multiprocess-0.70.18 networkx-3.5 ninja-1.11.1.4 numpy-2.3.0 nvidia-cublas-cu12-12.6.4.1 nvidia-cuda-cupti-cu12-12.6.80 nvidia-cuda-nvrtc-cu12-12.6.77 nvidia-cuda-runtime-cu12-12.6.77 nvidia-cudnn-cu12-9.5.1.17 nvidia-cufft-cu12-11.3.0.4 nvidia-cufile-cu12-1.11.1.6 nvidia-curand-cu12-10.3.7.77 nvidia-cusolver-cu12-11.7.1.2 nvidia-cusparse-cu12-12.5.4.2 nvidia-cusparselt-cu12-0.6.3 nvidia-nccl-cu12-2.26.2 nvidia-nvjitlink-cu12-12.6.85 nvidia-nvtx-cu12-12.6.77 opencv-python-headless-4.11.0.86 openpyxl-3.1.5 pandas-2.3.0 pluggy-1.6.0 pyclipper-1.3.0.post6 pydantic-2.11.5 pydantic-core-2.33.2 pydantic-settings-2.9.1 pylatexenc-2.10 pypdfium2-4.30.1 python-bidi-0.6.6 python-docx-1.1.2 python-dotenv-1.1.0 python-pptx-1.0.2 pytz-2025.2 regex-2024.11.6 rtree-1.4.0 safetensors-0.5.3 scikit-image-0.25.2 scipy-1.15.3 semchunk-2.2.2 shellingham-1.5.4 sympy-1.14.0 tabulate-0.9.0 tifffile-2025.6.1 tokenizers-0.21.1 torch-2.7.1 torchvision-0.22.1 tqdm-4.67.1 transformers-4.52.4 triton-3.3.1 typer-0.16.0 typing-inspection-0.4.1 tzdata-2025.2
tokunori@tokunori-desktop:~/nvme-cli/subprojects/libnvme$ docling ~/ドキュメント/spec/nvme/NVM-Express-Base-Specification-Revision-2.2-2025.03.11-Ratified.pdf 
WARNING:easyocr.easyocr:Downloading detection model, please wait. This may take several minutes depending upon your network connection.
WARNING:easyocr.easyocr:Downloading recognition model, please wait. This may take several minutes depending upon your network connection.
```

## convert PDF file to markdown text format

```sh
tokunori@tokunori-desktop:~/nvme-cli/subprojects/libnvme$ python3
>>> from docling.document_converter import DocumentConverter
>>> source = "NVM-Express-Base-Specification-Revision-2.2-2025.03.11-Ratified-314-367.pdf"
>>> converter = DocumentConverter()
>>> result = converter.convert(source)
>>> print(result.document.export_to_markdown())
...
## 5.1.13.4.2  Get Ports List (CNS 1Eh)

A Ports List data structure (refer to Figure 336) is returned containing a list of Underlying Ports that may be used to export NVMe over Fabrics NVM subsystems.

## Figure 336: Ports List Data Structure

| Bytes                            | Description                                                                                                                                                                                                                                                                                                                                                                                        |
|----------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 07:00                            | Generation Counter (GENCTR): This field indicates the version of Port information. This field shall be cleared to 0h as a result of NVM Subsystem Reset of the Underlying NVM Subsystem. For each change in the Ports List, this counter is incremented by one. If the value of this field is FFFFFFFF_FFFFFFFFh, then the field shall be cleared to 0h when incremented (i.e., rolls over to 0h). |
| 15:08                            | Number Entries (NUMENT): Number of Fabrics Transport Entries in the Ports List.                                                                                                                                                                                                                                                                                                                    |
| Ports List                       | Ports List                                                                                                                                                                                                                                                                                                                                                                                         |
| 591:16                           | Fabrics Transport Entry 1: The first Underlying Fabrics Transport Entry data structure (refer to Figure 337) in the Ports List, if any.                                                                                                                                                                                                                                                            |
| 1167:592                         | Fabrics Transport Entry 2: The second Underlying Fabrics Transport Entry data structure (refer to Figure 337) in the Ports List, if any..                                                                                                                                                                                                                                                          |
| …                                | …                                                                                                                                                                                                                                                                                                                                                                                                  |
| 576*NUMENT+15: 576*(NUMENT-1)+16 | Fabrics Transport Entry NUMENT: The last Underlying Fabrics Transport Entry data structure (refer to Figure 337) in the Ports List, if any..                                                                                                                                                                                                                                                       |

## Figure 337: Underlying Fabrics Transport Entry Data Structure

| Bytes   | Description                                                                                                                                                                                                                                                                                                                                                                  |
|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 255:00  | Transport Address (TRADDR): This field indicates the address of the NVM subsystem that may be used for a Connect command as an ASCII string. The Transport Address Family field describes the reference for parsing this field. Refer to section 1.4 for ASCII string requirements. For the definition of this field, refer to the appropriate NVMe Transport specification. |
| 511:256 | Transport Specific Address Subtype (TSAS): This field indicates NVMe Transport specific information about the address. For the definition of this field, refer to the appropriate NVMe Transport specification.                                                                                                                                                              |
| 513:512 | Port ID of the Underlying Port (PIDUP): Refer to the PORTID field in Figure 295.                                                                                                                                                                                                                                                                                             |

Figure 337: Underlying Fabrics Transport Entry Data Structure

| Bytes   | Description                                                                                                   |
|---------|---------------------------------------------------------------------------------------------------------------|
| 514     | Transport Type (TRTYPE): Specifies the NVMe Transport Type. Refer to Figure 295.                              |
| 515     | Transport Address Family (ADRFAM): Specifies the Address Family. Refer Figure 295.                            |
| 516     | Transport Requirements (TREQ): This field indicates requirements for the NVMe Transport. Refer to Figure 295. |
| 575:517 | Reserved                                                                                                      |

## Command Completion

Upon completion of the Identify command, the controller posts a completion queue entry to the Admin Completion Queue.
...
```