@@ -470,7 +470,7 @@ public static Tensor shape_tensor(int[] shape)
470
470
return ops . convert_to_tensor ( shape , dtype : TF_DataType . TF_INT32 , name : "shape" ) ;
471
471
}
472
472
473
- public static string to_numpy_string ( Tensor array )
473
+ public static string to_numpy_string ( NDArray array )
474
474
{
475
475
Shape shape = array . shape ;
476
476
if ( shape . ndim == 0 )
@@ -483,10 +483,66 @@ public static string to_numpy_string(Tensor array)
483
483
return s . ToString ( ) ;
484
484
}
485
485
486
- static string Render ( Tensor tensor )
486
+ static void PrettyPrint ( StringBuilder s , NDArray array )
487
+ {
488
+ var shape = array . shape ;
489
+
490
+ if ( shape . Length == 1 )
491
+ {
492
+ s . Append ( "[" ) ;
493
+ s . Append ( Render ( array ) ) ;
494
+ s . Append ( "]" ) ;
495
+ return ;
496
+ }
497
+
498
+ var len = shape [ 0 ] ;
499
+ s . Append ( "[" ) ;
500
+
501
+ if ( len <= 10 )
502
+ {
503
+ for ( int i = 0 ; i < len ; i ++ )
504
+ {
505
+ PrettyPrint ( s , array [ i ] ) ;
506
+ if ( i < len - 1 )
507
+ {
508
+ s . Append ( ", " ) ;
509
+ s . AppendLine ( ) ;
510
+ }
511
+ }
512
+ }
513
+ else
514
+ {
515
+ for ( int i = 0 ; i < 5 ; i ++ )
516
+ {
517
+ PrettyPrint ( s , array [ i ] ) ;
518
+ if ( i < len - 1 )
519
+ {
520
+ s . Append ( ", " ) ;
521
+ s . AppendLine ( ) ;
522
+ }
523
+ }
524
+
525
+ s . Append ( " ... " ) ;
526
+ s . AppendLine ( ) ;
527
+
528
+ for (<
93C6
/span>int i = ( int ) len - 5 ; i < len ; i ++ )
529
+ {
530
+ PrettyPrint ( s , array [ i ] ) ;
531
+ if ( i < len - 1 )
532
+ {
533
+ s . Append ( ", " ) ;
534
+ s . AppendLine ( ) ;
535
+ }
536
+ }
537
+ }
538
+
539
+ s . Append ( "]" ) ;
540
+ }
541
+
542
+ static string Render ( NDArray tensor )
487
543
{
488
544
if ( tensor . buffer == IntPtr . Zero )
489
- return "Empty " ;
545
+ return "<null> " ;
490
546
491
547
var dtype = tensor . dtype ;
492
548
var shape = tensor . shape ;
@@ -508,48 +564,90 @@ static string Render(Tensor tensor)
508
564
{
509
565
return "<unprintable>" ;
510
566
}
511
- else if ( dtype == TF_DataType . TF_BOOL )
512
- {
513
- var array = tensor . ToArray < bool > ( ) ;
514
- return DisplayArrayAsString ( array , tensor . shape ) ;
515
- }
516
- else if ( dtype == TF_DataType . TF_INT32 )
567
+ else
517
568
{
518
- var array = tensor . ToArray < int > ( ) ;
519
- return DisplayArrayAsString ( array , tensor . shape ) ;
569
+ return dtype switch
570
+ {
571
+ TF_DataType . TF_BOOL => DisplayArrayAsString ( tensor . ToArray < bool > ( ) , tensor . shape ) ,
572
+ TF_DataType . TF_INT8 => DisplayArrayAsString ( tensor . ToArray < sbyte > ( ) , tensor . shape ) ,
573
+ TF_DataType . TF_INT32 => DisplayArrayAsString ( tensor . ToArray < int > ( ) , tensor . shape ) ,
574
+ TF_DataType . TF_INT64 => DisplayArrayAsString ( tensor . ToArray < long > ( ) , tensor . shape ) ,
575
+ TF_DataType . TF_FLOAT => DisplayArrayAsString ( tensor . ToArray < float > ( ) , tensor . shape ) ,
576
+ TF_DataType . TF_DOUBLE => DisplayArrayAsString ( tensor . ToArray < double > ( ) , tensor . shape ) ,
577
+ _ => DisplayArrayAsString ( tensor . ToArray < byte > ( ) , tensor . shape )
578
+ } ;
520
579
}
521
- else if ( dtype == TF_DataType . TF_INT64 )
580
+ }
581
+
582
+ public static string to_numpy_string ( Tensor array )
583
+ {
584
+ Shape shape = array . shape ;
585
+ if ( shape . ndim == 0 )
586
+ return array [ 0 ] . ToString ( ) ;
587
+
588
+ var s = new StringBuilder ( ) ;
589
+ s . Append ( "array(" ) ;
590
+ PrettyPrint ( s , array ) ;
591
+ s . Append ( ")" ) ;
592
+ return s . ToString ( ) ;
593
+ }
594
+
595
+ static string Render ( Tensor tensor )
596
+ {
597
+ if ( tensor . buffer == IntPtr . Zero )
598
+ return "<null>" ;
599
+
600
+ var dtype = tensor . dtype ;
601
+ var shape = tensor . shape ;
602
+
603
+ if ( dtype == TF_DataType . TF_STRING )
522
604
{
523
- var array = tensor . ToArray < long > ( ) ;
524
- return DisplayArrayAsString ( array , tensor . shape ) ;
605
+ if ( tensor . rank == 0 )
606
+ return "'" + string . Join ( string . Empty , tensor . StringBytes ( ) [ 0 ]
607
+ . Take ( 25 )
608
+ . Select ( x => x < 32 || x > 127 ? "\\ x" + x . ToString ( "x" ) : Convert . ToChar ( x ) . ToString ( ) ) ) + "'" ;
609
+ else
610
+ return $ "['{ string . Join ( "', '" , tensor . StringData ( ) . Take ( 25 ) ) } ']";
525
611
}
526
- else if ( dtype == TF_DataType . TF_FLOAT )
612
+ else if ( dtype == TF_DataType . TF_VARIANT )
527
613
{
528
- var array = tensor . ToArray < float > ( ) ;
529
- return DisplayArrayAsString ( array , tensor . shape ) ;
614
+ return "<unprintable>" ;
530
615
}
531
- else if ( dtype == TF_DataType . TF_DOUBLE )
616
+ else if ( dtype == TF_DataType . TF_RESOURCE )
532
617
{
533
- var array = tensor . ToArray < double > ( ) ;
534
- return DisplayArrayAsString ( array , tensor . shape ) ;
618
+ return "<unprintable>" ;
535
619
}
536
620
else
537
621
{
538
- var array = tensor . ToArray < byte > ( ) ;
539
- return DisplayArrayAsString ( array , tensor . shape ) ;
622
+ return dtype switch
623
+ {
624
+ TF_DataType . TF_BOOL => DisplayArrayAsString ( tensor . ToArray < bool > ( ) , tensor . shape ) ,
625
+ TF_DataType . TF_INT8 => DisplayArrayAsString ( tensor . ToArray < sbyte > ( ) , tensor . shape ) ,
626
+ TF_DataType . TF_INT32 => DisplayArrayAsString ( tensor . ToArray < int > ( ) , tensor . shape ) ,
627
+ TF_DataType . TF_INT64 => DisplayArrayAsString ( tensor . ToArray < long > ( ) , tensor . shape ) ,
628
+ TF_DataType . TF_FLOAT => DisplayArrayAsString ( tensor . ToArray < float > ( ) , tensor . shape ) ,
629
+ TF_DataType . TF_DOUBLE => DisplayArrayAsString ( tensor . ToArray < double > ( ) , tensor . shape ) ,
630
+ _ => DisplayArrayAsString ( tensor . ToArray < byte > ( ) , tensor . shape )
631
+ } ;
540
632
}
541
633
}
542
634
543
635
static string DisplayArrayAsString < T > ( T [ ] array , Shape shape )
544
636
{
637
+ if ( array == null )
638
+ return "<null>" ;
639
+
640
+ if ( array . Length == 0 )
641
+ return "<empty>" ;
642
+
545
643
if ( shape . ndim == 0 )
546
644
return array [ 0 ] . ToString ( ) ;
547
645
548
646
var display = "" ;
549
- if ( array . Length < 10 )
647
+ if ( array . Length <= 10 )
550
648
display += string . Join ( ", " , array ) ;
551
649
else
552
- display += string . Join ( ", " , array . Take ( 3 ) ) + ", ..., " + string . Join ( ", " , array . Skip ( array . Length - 3 ) ) ;
650
+ display += string . Join ( ", " , array . Take ( 5 ) ) + ", ..., " + string . Join ( ", " , array . Skip ( array . Length - 5 ) ) ;
553
651
return display ;
554
652
}
555
653
@@ -597,7 +695,7 @@ static void PrettyPrint(StringBuilder s, Tensor array, bool flat = false)
597
695
s . Append ( " ... " ) ;
598
696
s . AppendLine ( ) ;
599
697
600
- for ( int i = ( int ) array . size - 5 ; i < len ; i ++ )
698
+ for ( int i = ( int ) len - 5 ; i < len ; i ++ )
601
699
{
602
700
PrettyPrint ( s , array [ i ] , flat ) ;
603
701
if ( i < len - 1 )
0 commit comments