mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	 80a2a4ed7d
			
		
	
	
		80a2a4ed7d
		
			
		
	
	
	
	
		
			
			- Make case-swaps half the cost of any other edit - Refactor Levenshtein code to not use memory allocator, and to bail early on no match. - Add comments to Levenshtein distance code - Add test cases for Levenshtein distance behind a debug macro - Set threshold to `(name_size + item_size + 3) * MOVE_COST / 6`. - Reasoning: similar to `difflib.SequenceMatcher.ratio()` >= 2/3: ``` "Multiset Jaccard similarity" >= 2/3 matching letters / total letters >= 2/3 (name_size - distance + item_size - distance) / (name_size + item_size) >= 2/3 1 - (2*distance) / (name_size + item_size) >= 2/3 1/3 >= (2*distance) / (name_size + item_size) (name_size + item_size) / 6 >= distance With rounding: (name_size + item_size + 3) // 6 >= distance ``` Co-authored-by: Pablo Galindo <pablogsal@gmail.com>
		
			
				
	
	
		
			96 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef Py_INTERNAL_PYERRORS_H
 | |
| #define Py_INTERNAL_PYERRORS_H
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| #ifndef Py_BUILD_CORE
 | |
| #  error "this header requires Py_BUILD_CORE define"
 | |
| #endif
 | |
| 
 | |
| static inline PyObject* _PyErr_Occurred(PyThreadState *tstate)
 | |
| {
 | |
|     assert(tstate != NULL);
 | |
|     return tstate->curexc_type;
 | |
| }
 | |
| 
 | |
| static inline void _PyErr_ClearExcState(_PyErr_StackItem *exc_state)
 | |
| {
 | |
|     PyObject *t, *v, *tb;
 | |
|     t = exc_state->exc_type;
 | |
|     v = exc_state->exc_value;
 | |
|     tb = exc_state->exc_traceback;
 | |
|     exc_state->exc_type = NULL;
 | |
|     exc_state->exc_value = NULL;
 | |
|     exc_state->exc_traceback = NULL;
 | |
|     Py_XDECREF(t);
 | |
|     Py_XDECREF(v);
 | |
|     Py_XDECREF(tb);
 | |
| }
 | |
| 
 | |
| 
 | |
| PyAPI_FUNC(void) _PyErr_Fetch(
 | |
|     PyThreadState *tstate,
 | |
|     PyObject **type,
 | |
|     PyObject **value,
 | |
|     PyObject **traceback);
 | |
| 
 | |
| PyAPI_FUNC(int) _PyErr_ExceptionMatches(
 | |
|     PyThreadState *tstate,
 | |
|     PyObject *exc);
 | |
| 
 | |
| PyAPI_FUNC(void) _PyErr_Restore(
 | |
|     PyThreadState *tstate,
 | |
|     PyObject *type,
 | |
|     PyObject *value,
 | |
|     PyObject *traceback);
 | |
| 
 | |
| PyAPI_FUNC(void) _PyErr_SetObject(
 | |
|     PyThreadState *tstate,
 | |
|     PyObject *type,
 | |
|     PyObject *value);
 | |
| 
 | |
| PyAPI_FUNC(void) _PyErr_ChainStackItem(
 | |
|     _PyErr_StackItem *exc_info);
 | |
| 
 | |
| PyAPI_FUNC(void) _PyErr_Clear(PyThreadState *tstate);
 | |
| 
 | |
| PyAPI_FUNC(void) _PyErr_SetNone(PyThreadState *tstate, PyObject *exception);
 | |
| 
 | |
| PyAPI_FUNC(PyObject *) _PyErr_NoMemory(PyThreadState *tstate);
 | |
| 
 | |
| PyAPI_FUNC(void) _PyErr_SetString(
 | |
|     PyThreadState *tstate,
 | |
|     PyObject *exception,
 | |
|     const char *string);
 | |
| 
 | |
| PyAPI_FUNC(PyObject *) _PyErr_Format(
 | |
|     PyThreadState *tstate,
 | |
|     PyObject *exception,
 | |
|     const char *format,
 | |
|     ...);
 | |
| 
 | |
| PyAPI_FUNC(void) _PyErr_NormalizeException(
 | |
|     PyThreadState *tstate,
 | |
|     PyObject **exc,
 | |
|     PyObject **val,
 | |
|     PyObject **tb);
 | |
| 
 | |
| PyAPI_FUNC(PyObject *) _PyErr_FormatFromCauseTstate(
 | |
|     PyThreadState *tstate,
 | |
|     PyObject *exception,
 | |
|     const char *format,
 | |
|     ...);
 | |
| 
 | |
| PyAPI_FUNC(int) _PyErr_CheckSignalsTstate(PyThreadState *tstate);
 | |
| 
 | |
| PyAPI_FUNC(void) _Py_DumpExtensionModules(int fd, PyInterpreterState *interp);
 | |
| 
 | |
| extern PyObject* _Py_Offer_Suggestions(PyObject* exception);
 | |
| PyAPI_FUNC(Py_ssize_t) _Py_UTF8_Edit_Cost(PyObject *str_a, PyObject *str_b,
 | |
|                                           Py_ssize_t max_cost);
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | |
| #endif /* !Py_INTERNAL_PYERRORS_H */
 |