NDArray doesn't handle types with custom core schemas properly

Open
#58 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
42/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
numpy, python
Domain
data

Research direction

Start by running the inline reproduction with NDArray[MyEnum], TypeAdapter, and the numpy array to confirm the serialization failure. Trace how NDArray handles classes with custom pydantic core schemas, then verify that ta_my_array.dump_json(my_array) serializes the MyEnum value successfully.

Written by the indexing model from the issue text.

Description

lang: python type: bug

Describe the bug
NDArray type does not handle classes with custom pydantic core schemas properly

To Reproduce

# /// script
# dependencies = [
#   "csp",
#   "ccflow>=0.5.1",
# ]
# ///


from csp import Enum
from ccflow import NDArray
from pydantic import TypeAdapter

import numpy as np

class MyEnum(Enum):
    X = Enum.auto()
    Y = Enum.auto()

ta_my_array = TypeAdapter(NDArray[MyEnum])

my_array = ta_my_array.validate_python(np.array([MyEnum.X]))
print(f'{my_array = }')
print(ta_my_array.dump_json(my_array))

Expected behavior
This should serialize properly

Error Message
Reading inline script metadata from /test_ccflow.py
my_array = array([<MyEnum.X: 0>], dtype=object)
Traceback (most recent call last):
File "/test_ccflow.py", line 23, in
print(ta_my_array.dump_json(my_array))
File "pydantic/type_adapter.py", line 581, in dump_json
return self.serializer.to_json(
pydantic_core._pydantic_core.PydanticSerializationError: Error serializing to JSON: PydanticSerializationError: Unable to serialize unknown type: <class 'main.MyEnum'>

Runtime Environment

0.5.1
3.9.16 | packaged by conda-forge | (main, Feb  1 2023, 21:39:03) 
[GCC 11.3.0]
linux

ccflow version 0.5.1

Dominant language
Python
Stars
44
Forks
7
Avg merge
18h 20m
Merged PRs (30d)
14

Getting set up

  • No Dockerfile or Docker Compose file
  • Has a pull request template
  • No contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from Point72/ccflow

All issues in Point72/ccflow

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.