feat: add optional numpy serialization support #104
                
     Merged
            
            
          
  Add this suggestion to a batch that can be applied as a single commit.
  This suggestion is invalid because no changes were made to the code.
  Suggestions cannot be applied while the pull request is closed.
  Suggestions cannot be applied while viewing a subset of changes.
  Only one suggestion per line can be applied in a batch.
  Add this suggestion to a batch that can be applied as a single commit.
  Applying suggestions on deleted lines is not supported.
  You must change the existing code in this line in order to create a valid suggestion.
  Outdated suggestions cannot be applied.
  This suggestion has been applied or marked resolved.
  Suggestions cannot be applied from pending reviews.
  Suggestions cannot be applied on multi-line comments.
  Suggestions cannot be applied while the pull request is queued to merge.
  Suggestion cannot be applied right now. Please check back later.
  
    
  
    
Summary
Implements optional NumPy array serialization support in SQLSpec's serialization system, following the established pattern for optional dependencies (pydantic, msgspec, attrs, pyarrow).
Changes
Type System (
_typing.py,typing.py)NumpyArrayStubprotocol for type safety when numpy not installedNumpyArraytype for public APINUMPY_INSTALLEDflag for runtime checksSerialization (
_serialization.py)NUMPY_INSTALLEDflag_type_to_stringreturn type bug (was returningstr, now returnsAny)OPT_SERIALIZE_NUMPYflag in OrjsonSerializerTesting (
test_serialization.py)Backward Compatibility
Test Results
Implementation Details
Type Stubs Pattern
Following the established pattern from PyArrow:
Conditional Serialization
In
_type_to_string:In
OrjsonSerializer.encode:Test Coverage
27 new tests covering:
Test Plan
Migration Guide
No migration needed - this is a purely additive feature. If numpy is installed, arrays will automatically serialize. If not, everything works as before.
Example Usage
Related Issues
N/A - This is a proactive enhancement to support a common use case.