pydiverse-common 0.3.10__py3-none-any.whl → 0.3.12__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -23,6 +23,10 @@ class Dtype:
23
23
  """Return a string representation of this dtype."""
24
24
  return self.__class__.__name__
25
25
 
26
+ def __str__(self):
27
+ """Return a string representation of this dtype."""
28
+ return self.__repr__()
29
+
26
30
  @classmethod
27
31
  def is_int(cls):
28
32
  """Return ``True`` if this dtype is an integer type."""
@@ -71,7 +75,7 @@ class Dtype:
71
75
  # otherwise.
72
76
  return Float64()
73
77
  if isinstance(sql_type, sa.String):
74
- return String()
78
+ return String(sql_type.length)
75
79
  if isinstance(sql_type, sa.Boolean):
76
80
  return Bool()
77
81
  if isinstance(sql_type, sa.Date):
@@ -307,6 +311,15 @@ class Dtype:
307
311
 
308
312
  if isinstance(self, Enum):
309
313
  return pd.CategoricalDtype(self.categories)
314
+ if isinstance(self, String):
315
+ return pd.StringDtype() # max_length not needed for dataframes
316
+ if isinstance(self, Decimal):
317
+ # NumericDtype exists but is not used because fixpoint is more common
318
+ # in SQL than in dataframes.
319
+ return pd.Float64Dtype()
320
+ if isinstance(self, List):
321
+ # we don't want to produce object columns
322
+ raise TypeError("pandas doesn't have a native list dtype")
310
323
 
311
324
  return {
312
325
  Int(): pd.Int64Dtype(), # we default to 64 bit
@@ -321,8 +334,6 @@ class Dtype:
321
334
  Float(): pd.Float64Dtype(), # we default to 64 bit
322
335
  Float32(): pd.Float32Dtype(),
323
336
  Float64(): pd.Float64Dtype(),
324
- Decimal(): pd.Float64Dtype(), # NumericDtype exists but is not used
325
- String(): pd.StringDtype(),
326
337
  Bool(): pd.BooleanDtype(),
327
338
  Date(): "datetime64[s]",
328
339
  Datetime(): "datetime64[us]",
@@ -416,6 +427,20 @@ class Decimal(Float):
416
427
  self.precision = precision or 31
417
428
  self.scale = scale or (self.precision // 3 + 1)
418
429
 
430
+ def __eq__(self, rhs):
431
+ return (
432
+ isinstance(rhs, self.__class__)
433
+ and self.precision == rhs.precision
434
+ and self.scale == rhs.scale
435
+ )
436
+
437
+ def __hash__(self):
438
+ return hash((self.__class__.__name__, self.precision, self.scale))
439
+
440
+ def __repr__(self):
441
+ """Return a string representation of this dtype."""
442
+ return f"{self.__class__.__name__}({self.precision}, {self.scale})"
443
+
419
444
  def to_sql(self):
420
445
  import sqlalchemy as sa
421
446
 
@@ -480,6 +505,16 @@ class String(Dtype):
480
505
  """
481
506
  self.max_length = max_length
482
507
 
508
+ def __eq__(self, rhs):
509
+ return isinstance(rhs, self.__class__) and self.max_length == rhs.max_length
510
+
511
+ def __hash__(self):
512
+ return hash((self.__class__.__name__, self.max_length))
513
+
514
+ def __repr__(self):
515
+ """Return a string representation of this dtype."""
516
+ return f"{self.__class__.__name__}({self.max_length})"
517
+
483
518
  def to_sql(self):
484
519
  """Convert this Dtype to a SQL type."""
485
520
  import sqlalchemy as sa
@@ -523,10 +558,11 @@ class List(Dtype):
523
558
  return isinstance(rhs, List) and self.inner == rhs.inner
524
559
 
525
560
  def __hash__(self):
526
- return hash((0, hash(self.inner)))
561
+ return hash((self.__class__.__name__, hash(self.inner)))
527
562
 
528
563
  def __repr__(self):
529
- return f"List[{repr(self.inner)}]"
564
+ """Return a string representation of this dtype."""
565
+ return f"{self.__class__.__name__}[{self.inner}]"
530
566
 
531
567
  def to_sql(self):
532
568
  import sqlalchemy as sa
@@ -556,11 +592,13 @@ class Enum(String):
556
592
  def __eq__(self, rhs):
557
593
  return isinstance(rhs, Enum) and self.categories == rhs.categories
558
594
 
559
- def __repr__(self) -> str:
560
- return f"Enum[{', '.join(repr(c) for c in self.categories)}]"
561
-
562
595
  def __hash__(self):
563
- return hash(tuple(self.categories))
596
+ return hash((self.__class__.__name__, tuple(self.categories)))
597
+
598
+ def __repr__(self) -> str:
599
+ return (
600
+ f"{self.__class__.__name__}[{', '.join(repr(c) for c in self.categories)}]"
601
+ )
564
602
 
565
603
  def to_polars(self):
566
604
  import polars as pl
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pydiverse-common
3
- Version: 0.3.10
3
+ Version: 0.3.12
4
4
  Summary: Common functionality shared between pydiverse libraries
5
5
  Author: QuantCo, Inc.
6
6
  Author-email: Martin Trautmann <windiana@users.sf.net>, Finn Rudolph <finn.rudolph@t-online.de>
@@ -1,5 +1,5 @@
1
1
  pydiverse/common/__init__.py,sha256=J7b4iStFyaEMYre_jdlZ4l_8dLyrMWCIpQdsMQcB8aI,806
2
- pydiverse/common/dtypes.py,sha256=ekeH6Ygnfy6sTsMVG4CcEdGHH_C6Z550tkdkaMQNIyY,18782
2
+ pydiverse/common/dtypes.py,sha256=eoPzUCVZ6UG_-jjmr1W-uqIaQJh14d1qTvnxrxi9xq4,20229
3
3
  pydiverse/common/testing.py,sha256=FcivI5wn0X3gzJhwnysKvCOgjSTTXaN6FtSFJ72jfSg,341
4
4
  pydiverse/common/version.py,sha256=1IU_m4r76_Qq0u-Tyo2_bERZFOkh0ZFueVzDqcCfLO0,336
5
5
  pydiverse/common/errors/__init__.py,sha256=FNeEfVbUa23b9sHkFsmxHYhY6sRgjaZysPQmlovpJrI,262
@@ -11,7 +11,7 @@ pydiverse/common/util/disposable.py,sha256=4XoGz70YRWA9TAqnUBvRCTAdsOGBviFN0gzxU
11
11
  pydiverse/common/util/hashing.py,sha256=EofnKULVKXv-S9kry0mOqHU5bxPGomCtr6XfYqIhGgc,4650
12
12
  pydiverse/common/util/import_.py,sha256=K7dSgz4YyrqEvqhoOzbwgD7D8HScMoO5XoSWtjbaoUs,4056
13
13
  pydiverse/common/util/structlog.py,sha256=xxhauxMuyxcKXTVg1MiPTkuvPBj8Zcr4o_v8Bq59Nig,3778
14
- pydiverse_common-0.3.10.dist-info/METADATA,sha256=8xmLOqUJZbuETqz49ve_W8NNVkHGyaeOwT2exOhk0uY,3400
15
- pydiverse_common-0.3.10.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
16
- pydiverse_common-0.3.10.dist-info/licenses/LICENSE,sha256=AcE6SDVuAq6v9ZLE_8eOCe_NvSE0rAPR3NR7lSowYh4,1517
17
- pydiverse_common-0.3.10.dist-info/RECORD,,
14
+ pydiverse_common-0.3.12.dist-info/METADATA,sha256=im41Bu6fJ7PTEWoXMoRVasFnObelq_2Su8PFOyvbQPc,3400
15
+ pydiverse_common-0.3.12.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
16
+ pydiverse_common-0.3.12.dist-info/licenses/LICENSE,sha256=AcE6SDVuAq6v9ZLE_8eOCe_NvSE0rAPR3NR7lSowYh4,1517
17
+ pydiverse_common-0.3.12.dist-info/RECORD,,