LouisLou2 opened a new issue, #2118:
URL: https://github.com/apache/fury/issues/2118

   ### Search before asking
   
   - [x] I had searched in the [issues](https://github.com/apache/fury/issues) 
and found no similar issues.
   
   
   ### Version
   
   Fury: Latest development branch
   OS: Windows 11
   Python: 3.12
   The issue is not present on Linux
   
   ### Component(s)
   
   Python
   
   ### Minimal reproduce step
   
   The issue occurs in CrossLanguageTest.java when running on Windows. The 
error happens when Fury tries to serialize datetime objects with timestamps 
close to the epoch (1970-01-01).
   
   The root cause is in python/pyfury/_serialization.pyx at line 1192:
   ```python
   timestamp = int(value.timestamp() * 1000000)
   ```
   The timestamp() method on naive datetime objects fails on Windows for early 
dates. This can be reproduced with:
   ```python
   import datetime
   
   # This fails on Windows
   d = datetime.datetime.fromtimestamp(timestamp=100)  # Early date: Jan 1, 
1970 00:01:40
   t = d.timestamp()  # OSError: [Errno 22] Invalid argument
   
   # These work fine on Windows
   d1 = datetime.datetime.fromtimestamp(timestamp=1000000)  # Later date
   t1 = d1.timestamp()  # Works fine
   
   d2 = datetime.datetime.fromtimestamp(timestamp=100, 
tz=datetime.timezone.utc)  # With timezone
   t2 = d2.timestamp()  # Works fine
   ```
   
   ### What did you expect to see?
   
   Cross-language serialization tests should pass on both Linux and Windows 
platforms.
   
   ### What did you see instead?
   
   On Windows, serialization fails with:
   ```bash
   ERROR:root:Execute ['test_cross_language_serializer', 
'C:\\Users\\86511\\AppData\\Local\\Temp\\test_cross_language_serializer2918297548183494188data']
 failed with [Errno 22] Invalid argument
   Traceback (most recent call last):
     File 
"d:\projects\fury_dev\fury\python\pyfury\tests\test_cross_language.py", line 
622, in <module>
       func(*args[1:])
     File 
"d:\projects\fury_dev\fury\python\pyfury\tests\test_cross_language.py", line 
337, in test_cross_language_serializer
       fury.serialize(obj, buffer=new_buf)
     File "python/pyfury/_serialization.pyx", line 639, in 
pyfury._serialization.Fury.serialize
     File "python/pyfury/_serialization.pyx", line 688, in 
pyfury._serialization.Fury._serialize
     File "python/pyfury/_serialization.pyx", line 746, in 
pyfury._serialization.Fury.xserialize_ref
     File "python/pyfury/_serialization.pyx", line 764, in 
pyfury._serialization.Fury.xserialize_nonref
     File "python/pyfury/_serialization.pyx", line 1071, in 
pyfury._serialization.CrossLanguageCompatibleSerializer.xwrite
     File "python/pyfury/_serialization.pyx", line 1192, in 
pyfury._serialization.TimestampSerializer.write
   OSError: [Errno 22] Invalid argument
   Traceback (most recent call last):
     File "C:\Users\86511\.conda\envs\pyfury_dev6\lib\runpy.py", line 197, in 
_run_module_as_main
       return _run_code(code, main_globals, None,
     File "C:\Users\86511\.conda\envs\pyfury_dev6\lib\runpy.py", line 87, in 
_run_code
       exec(code, run_globals)
     File 
"d:\projects\fury_dev\fury\python\pyfury\tests\test_cross_language.py", line 
622, in <module>
       func(*args[1:])
     File 
"d:\projects\fury_dev\fury\python\pyfury\tests\test_cross_language.py", line 
337, in test_cross_language_serializer
       fury.serialize(obj, buffer=new_buf)
     File "python/pyfury/_serialization.pyx", line 639, in 
pyfury._serialization.Fury.serialize
     File "python/pyfury/_serialization.pyx", line 688, in 
pyfury._serialization.Fury._serialize
     File "python/pyfury/_serialization.pyx", line 746, in 
pyfury._serialization.Fury.xserialize_ref
     File "python/pyfury/_serialization.pyx", line 764, in 
pyfury._serialization.Fury.xserialize_nonref
     File "python/pyfury/_serialization.pyx", line 1071, in 
pyfury._serialization.CrossLanguageCompatibleSerializer.xwrite
     File "python/pyfury/_serialization.pyx", line 1192, in 
pyfury._serialization.TimestampSerializer.write
   OSError: [Errno 22] Invalid argument
   ```
   The error trace shows that it occurs in TimestampSerializer.write when 
calling value.timestamp() on datetime objects with early timestamps.
   
   ### Anything Else?
   
   This appears to be a Windows-specific issue in Python's datetime 
implementation. There's an open Python issue for this:  [Timestamp conversion 
on windows fails with timestamps close to EPOCH 
#81708](https://github.com/python/cpython/issues/81708)
   
   Workaround: Add timezone information to datetime objects before calling 
timestamp(), for example by using:
   ```python
   datetime.datetime.fromtimestamp(timestamp=100, tz=datetime.UTC)
   ```
   
   ### Are you willing to submit a PR?
   
   - [x] I'm willing to submit a PR!


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to