import { ClassType, FunctionParam, FunctionType, Type, TypeVarType } from './types'; export declare function isTypedKwargs(param: FunctionParam, effectiveParamType: Type): boolean; export declare enum ParamKind { Positional = 0, Standard = 1, Keyword = 2, ExpandedArgs = 3 } export interface VirtualParamDetails { param: FunctionParam; type: Type; declaredType: Type; defaultType?: Type | undefined; index: number; kind: ParamKind; } export interface ParamListDetails { params: VirtualParamDetails[]; positionOnlyParamCount: number; positionParamCount: number; kwargsIndex?: number; argsIndex?: number; firstKeywordOnlyIndex?: number; firstPositionOrKeywordIndex: number; hasUnpackedTypeVarTuple: boolean; hasUnpackedTypedDict: boolean; unpackedKwargsTypedDictType?: ClassType; paramSpec?: TypeVarType; } export interface ParamListDetailsOptions { disallowExtraKwargsForTd?: boolean; } export declare function getParamListDetails(type: FunctionType, options?: ParamListDetailsOptions): ParamListDetails; export declare function isParamSpecArgs(paramSpec: TypeVarType, argType: Type): boolean; export declare function isParamSpecKwargs(paramSpec: TypeVarType, argType: Type): boolean; export interface ParamAssignmentInfo { paramDetails: VirtualParamDetails; keywordName?: string; argsNeeded: number; argsReceived: number; } export declare class ParamAssignmentTracker { params: ParamAssignmentInfo[]; constructor(paramInfos: VirtualParamDetails[]); addKeywordParam(name: string, info: VirtualParamDetails): void; lookupName(name: string): ParamAssignmentInfo | undefined; lookupDetails(paramInfo: VirtualParamDetails): ParamAssignmentInfo; markArgReceived(paramInfo: VirtualParamDetails): void; getUnassignedParams(): string[]; }