File: //usr/local/lib/python3.10/dist-packages/pip/_internal/req/__pycache__/constructors.cpython-310.pyc
o
��h�G �
@ s" d Z ddlmZ ddlZddlZddlZddlZddlmZ ddl m
Z
ddlmZ ddl
mZmZ ddlmZ dd lmZ dd
lmZmZ ddlmZ ddlmZ dd
lmZ ddlmZ ddlm Z ddl!m"Z" ddl#m$Z$ ddl%m&Z& ddl'm(Z(m)Z) g d�Z*e�+e,�Z-ej.�/� Z0dgdd�Z1dhdd�Z2did#d$�Z3djd'd(�Z4dkd+d,�Z5dld-d.�Z6e
d/d0�G d1d2� d2��Z7dmd3d4�Z8 dndd5ddd5d5d5dd6�dodGdH�Z9dpdJdK�Z:dqdLdM�Z;drdOdP�Z< dndd5ddd5dd5ddQ�dsdSdT�Z= 5 5dtdudWdX�Z> 5 5 dvdwd[d\�Z?dxd`da�Z@dydbdc�ZAdzdedf�ZBdS ){a~ Backing implementation for InstallRequirement's various constructors
The idea here is that these formed a major chunk of InstallRequirement's size
so, moving them and support code dedicated to them outside of that class
helps creates for better understandability for the rest of the code.
These are meant to be used elsewhere within pip to create instances of
InstallRequirement.
� )�annotationsN)�
Collection)� dataclass)�Marker)�InvalidRequirement�Requirement)� Specifier)�InstallationError)�PyPI�TestPyPI)�Link)�Wheel)�ParsedRequirement)�InstallRequirement)�is_archive_file)�is_installable_dir)�get_requirement)�path_to_url)�is_url�vcs)�install_req_from_editable�install_req_from_line�parse_editable�path�str�return�tuple[str, str | None]c C s<