[Material3 spec] SegmentedButton segments background cannot be made transparent

SegmentedButton segments background cannot be made transparent
The Material 3 specification depicts SegmentedButton unselected button segments as having transparent color, used to show background color of surface it is placed upon. This is needed for it to work well on elevation tinted surfaces in Material 3 design.
Its default style also returns null as background color, shown below and in link:
https://github.com/flutter/flutter/blob/2cdf078f0fd922f074c563470d439b1e0a054e85/packages/flutter/lib/src/material/segmented_button.dart#L737
class _SegmentedButtonDefaultsM3 extends SegmentedButtonThemeData {
  _SegmentedButtonDefaultsM3(this.context);
  final BuildContext context;
  late final ThemeData _theme = Theme.of(context);
  late final ColorScheme _colors = _theme.colorScheme;
  @override ButtonStyle? get style {
    return ButtonStyle(
      textStyle: MaterialStatePropertyAll<TextStyle?>(Theme.of(context).textTheme.labelLarge),
      backgroundColor: MaterialStateProperty.resolveWith((Set<MaterialState> states) {
        if (states.contains(MaterialState.disabled)) {
          return null;
        }
        if (states.contains(MaterialState.selected)) {
          return _colors.secondaryContainer;
        }
        return null;  // <<-- Should become transparent
      }),

This implies that an attempt to make it transparent has been made, however it does not work.
Expected results
Expect unselected SegmentedButton to have transparent background as depicted in M3 spec. Only selected container is also listed as having color in the spec, unselected has no color. Which the "null" choice above correctly implements.
https://m3.material.io/components/segmented-buttons/specs

Actual results
Despite above intention to keep the unselected button transparent, it is not.
When used on elevated surfaces with tint, or on otherwise different surface color, it does not match background unless the same color is given to its background. This can be challenging to apply manually, sometimes even impossible if elevation is not known when it is used on elevation tinted surfaces. Coloring it manually with matching color requires knowing the elevation and un-elevated color, of the surface it is placed on. It is not always possible to know this if the entire construct is not owned.
The issue applies both if we try to style the unselected buttons on widget level or via theme. The below sample show widget placed on a tint elevated Card, getting a background with different color than un-elevated surface. In the example it is attempted to both via theme, using actual Colors.transparent on unselected segment background, and also via widget styling, on the 2nd control to make the background of unselected segments transparent.
ISSUE: The unselected segments remain opaque and we cannot match it to background color it is placed on, unless we know elevation and original color of the background.

Light
Dark

Proposal
The issue and styling limitation is caused by using opaque Material as background for the SegmentedButton parent, seen in code here:
https://github.com/flutter/flutter/blob/2cdf078f0fd922f074c563470d439b1e0a054e85/packages/flutter/lib/src/material/segmented_button.dart#L356
By adding type: MaterialType.transparency to the used Material the issue is solved.
    return Material(
      type: MaterialType.transparency,
      shape: enabledBorder.copyWith(side: BorderSide.none),
      elevation: resolve<double?>((ButtonStyle? style) => style?.elevation)!,
      shadowColor: resolve<Color?>((ButtonStyle? style) => style?.shadowColor),
      surfaceTintColor: resolve<Color?>((ButtonStyle? style) => style?.surfaceTintColor),
      child:

With this fix in place we get:

Light
Dark

Action: Submitting PR.
cc @TahaTesser
Issue sample code

Code sample
// MIT License
//
// Copyright (c) 2023 Mike Rydstrom
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
 IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
import 'package:flutter/material.dart';

// A seed color for the M3 ColorScheme.
const Color seedColor = Color(0xFF6750A4);

// Make M3 ColorSchemes from a seed color.
final ColorScheme schemeLight = ColorScheme.fromSeed(
  brightness: Brightness.light,
  seedColor: seedColor,
);
final ColorScheme schemeDark = ColorScheme.fromSeed(
  brightness: Brightness.dark,
  seedColor: seedColor,
);

// Example theme
ThemeData demoTheme(Brightness mode, bool useMaterial3) {
  ColorScheme scheme = mode == Brightness.light ? schemeLight : schemeDark;
  return ThemeData(
    colorScheme: mode == Brightness.light ? schemeLight : schemeDark,
    useMaterial3: useMaterial3,
    visualDensity: VisualDensity.standard,
    segmentedButtonTheme: SegmentedButtonThemeData(
      style: ButtonStyle(
        // minimumSize: MaterialStatePropertyAll<Size?>(Size.fromHeight(80.0)),
        backgroundColor:
            MaterialStateProperty.resolveWith((Set<MaterialState> states) {
          if (states.contains(MaterialState.disabled)) {
            return null;
          }
          if (states.contains(MaterialState.selected)) {
            return scheme.secondaryContainer;
          }
          // Default theme returns null here and should give us
          // transparent background already. Even if we return
          // transparent color, we do not get it since widget is
          // drawn using opaque Material
          // --> Default does this return null;
          return Colors.transparent;
        }),
      ),
    ),
  );
}

void main() {
  runApp(const IssueDemoApp());
}

class IssueDemoApp extends StatefulWidget {
  const IssueDemoApp({super.key});

  @override
  State<IssueDemoApp> createState() => _IssueDemoAppState();
}

class _IssueDemoAppState extends State<IssueDemoApp> {
  bool useMaterial3 = true;
  ThemeMode themeMode = ThemeMode.light;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      themeMode: themeMode,
      theme: demoTheme(Brightness.light, useMaterial3),
      darkTheme: demoTheme(Brightness.dark, useMaterial3),
      home: Scaffold(
        appBar: AppBar(
          title: const Text('SegmentedButton M3 Spec Issue'),
          actions: [
            IconButton(
              icon: useMaterial3
                  ? const Icon(Icons.filter_3)
                  : const Icon(Icons.filter_2),
              onPressed: () {
                setState(() {
                  useMaterial3 = !useMaterial3;
                });
              },
              tooltip: "Switch to Material ${useMaterial3 ? 2 : 3}",
            ),
            IconButton(
              icon: themeMode == ThemeMode.dark
                  ? const Icon(Icons.wb_sunny_outlined)
                  : const Icon(Icons.wb_sunny),
              onPressed: () {
                setState(() {
                  if (themeMode == ThemeMode.light) {
                    themeMode = ThemeMode.dark;
                  } else {
                    themeMode = ThemeMode.light;
                  }
                });
              },
              tooltip: "Toggle brightness",
            ),
          ],
        ),
        body: const HomePage(),
      ),
    );
  }
}

class HomePage extends StatelessWidget {
  const HomePage({super.key});

  @override
  Widget build(BuildContext context) {
    return ListView(
      padding: const EdgeInsets.symmetric(horizontal: 16),
      children: [
        const SizedBox(height: 8),
        Text(
          'SegmentedButton uses opaque Material',
          style: Theme.of(context).textTheme.headlineSmall,
        ),
        const SizedBox(height: 16),
        const Text(
          'ISSUE: SegmentedButton cannot be made transparent.'
          '\n\n'
          'EXPECT: Transparency to work on SegmentedButton.',
        ),
        const SizedBox(height: 16),
        const Card(
            elevation: 3,
            child: Padding(
              padding: EdgeInsets.all(32.0),
              child: SegmentedButtonShowcase(),
            )),
        const SizedBox(height: 16),
        const ShowColorSchemeColors(),
      ],
    );
  }
}

class SegmentedButtonShowcase extends StatefulWidget {
  const SegmentedButtonShowcase({this.showOutlinedButton, super.key});
  final bool? showOutlinedButton;

  @override
  State<SegmentedButtonShowcase> createState() =>
      _SegmentedButtonShowcaseState();
}

enum Calendar { day, week, month, year }

class _SegmentedButtonShowcaseState extends State<SegmentedButtonShowcase> {
  List<bool> selected = <bool>[true, false, false];
  Calendar _selected = Calendar.day;

  @override
  Widget build(BuildContext context) {
    final ThemeData theme = Theme.of(context);
    return Wrap(
      crossAxisAlignment: WrapCrossAlignment.center,
      spacing: 8,
      runSpacing: 8,
      children: <Widget>[
        SegmentedButton<Calendar>(
          showSelectedIcon: false,
          segments: const <ButtonSegment<Calendar>>[
            ButtonSegment<Calendar>(
              value: Calendar.day,
              label: Text('Day'),
            ),
            ButtonSegment<Calendar>(
              value: Calendar.week,
              label: Text('Week'),
            ),
            ButtonSegment<Calendar>(
              value: Calendar.month,
              label: Text('Month'),
            ),
            ButtonSegment<Calendar>(
              value: Calendar.year,
              label: Text('Year'),
            ),
          ],
          selected: <Calendar>{_selected},
          onSelectionChanged: (Set<Calendar> selected) {
            setState(() {
              _selected = selected.first;
            });
          },
        ),
        SegmentedButton<Calendar>(
          style: ButtonStyle(
            backgroundColor:
                MaterialStateProperty.resolveWith((Set<MaterialState> states) {
              if (states.contains(MaterialState.disabled)) {
                return null;
              }
              if (states.contains(MaterialState.selected)) {
                return theme.colorScheme.secondaryContainer;
              }
              // Default theme returns null here and should give us
              // transparent background already, even if we return
              // transparent color, we do not get it since widget is
              // drawn using opaque Material
              // --> Default does this return null;
              return Colors.transparent;
            }),
          ),
          segments: const <ButtonSegment<Calendar>>[
            ButtonSegment<Calendar>(
              value: Calendar.day,
              label: Text('Day'),
              icon: Icon(Icons.calendar_view_day),
            ),
            ButtonSegment<Calendar>(
              value: Calendar.week,
              icon: Icon(Icons.calendar_view_week),
              label: Text('Week'),
            ),
            ButtonSegment<Calendar>(
              value: Calendar.month,
              icon: Icon(Icons.calendar_view_month),
              label: Text('Month'),
            ),
            ButtonSegment<Calendar>(
              value: Calendar.year,
              icon: Icon(Icons.calendar_today),
              label: Text('Year'),
            ),
          ],
          selected: <Calendar>{_selected},
          onSelectionChanged: (Set<Calendar> selected) {
            setState(() {
              _selected = selected.first;
            });
          },
        ),
        SegmentedButton<Calendar>(
          segments: const <ButtonSegment<Calendar>>[
            ButtonSegment<Calendar>(
              value: Calendar.day,
              label: Text('Day'),
              icon: Icon(Icons.calendar_view_day),
              enabled: false,
            ),
            ButtonSegment<Calendar>(
              value: Calendar.week,
              icon: Icon(Icons.calendar_view_week),
              label: Text('Week'),
            ),
            ButtonSegment<Calendar>(
              value: Calendar.month,
              icon: Icon(Icons.calendar_view_month),
              label: Text('Month'),
              enabled: false,
            ),
            ButtonSegment<Calendar>(
              value: Calendar.year,
              icon: Icon(Icons.calendar_today),
              label: Text('Year'),
            ),
          ],
          selected: <Calendar>{_selected},
          onSelectionChanged: (Set<Calendar> selected) {
            setState(() {
              _selected = selected.first;
            });
          },
        ),
      ],
    );
  }
}

/// Draw a number of boxes showing the colors of key theme color properties
/// in the ColorScheme of the inherited ThemeData and its color properties.
class ShowColorSchemeColors extends StatelessWidget {
  const ShowColorSchemeColors({super.key, this.onBackgroundColor});

  /// The color of the background the color widget are being drawn on.
  ///
  /// Some of the theme colors may have semi transparent fill color. To compute
  /// a legible text color for the sum when it shown on a background color, we
  /// need to alpha merge it with background and we need the exact background
  /// color it is drawn on for that. If not passed in from parent, it is
  /// assumed to be drawn on card color, which usually is close enough.
  final Color? onBackgroundColor;

  // Return true if the color is light, meaning it needs dark text for contrast.
  static bool _isLight(final Color color) =>
      ThemeData.estimateBrightnessForColor(color) == Brightness.light;

  // On color used when a theme color property does not have a theme onColor.
  static Color _onColor(final Color color, final Color bg) =>
      _isLight(Color.alphaBlend(color, bg)) ? Colors.black : Colors.white;

  @override
  Widget build(BuildContext context) {
    final ThemeData theme = Theme.of(context);
    final ColorScheme colorScheme = theme.colorScheme;
    final bool useMaterial3 = theme.useMaterial3;
    const double spacing = 4;

    // Grab the card border from the theme card shape
    ShapeBorder? border = theme.cardTheme.shape;
    // If we had one, copy in a border side to it.
    if (border is RoundedRectangleBorder) {
      border = border.copyWith(
        side: BorderSide(
          color: colorScheme.outlineVariant,
          width: 1,
        ),
      );
      // If
    } else {
      // If border was null, make one matching Card default, but with border
      // side, if it was not null, we leave it as it was.
      border ??= RoundedRectangleBorder(
        borderRadius: BorderRadius.all(Radius.circular(useMaterial3 ? 12 : 4)),
        side: BorderSide(
          color: colorScheme.outlineVariant,
          width: 1,
        ),
      );
    }

    // Get effective background color.
    final Color background =
        onBackgroundColor ?? theme.cardTheme.color ?? theme.cardColor;

    // Wrap this widget branch in a custom theme where card has a border outline
    // if it did not have one, but retains its ambient themed border radius.
    return Theme(
      data: Theme.of(context).copyWith(
        cardTheme: CardTheme.of(context).copyWith(
          elevation: 0,
          surfaceTintColor: Colors.transparent,
          shape: border,
        ),
      ),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          Padding(
            padding: const EdgeInsets.symmetric(vertical: 8),
            child: Text(
              'ColorScheme Colors',
              style: theme.textTheme.titleMedium,
            ),
          ),
          Wrap(
            alignment: WrapAlignment.start,
            crossAxisAlignment: WrapCrossAlignment.center,
            spacing: spacing,
            runSpacing: spacing,
            children: <Widget>[
              ColorCard(
                label: 'Primary',
                color: colorScheme.primary,
                textColor: colorScheme.onPrimary,
              ),
              ColorCard(
                label: 'on\nPrimary',
                color: colorScheme.onPrimary,
                textColor: colorScheme.primary,
              ),
              ColorCard(
                label: 'Primary\nContainer',
                color: colorScheme.primaryContainer,
                textColor: colorScheme.onPrimaryContainer,
              ),
              ColorCard(
                label: 'onPrimary\nContainer',
                color: colorScheme.onPrimaryContainer,
                textColor: colorScheme.primaryContainer,
              ),
              ColorCard(
                label: 'Secondary',
                color: colorScheme.secondary,
                textColor: colorScheme.onSecondary,
              ),
              ColorCard(
                label: 'on\nSecondary',
                color: colorScheme.onSecondary,
                textColor: colorScheme.secondary,
              ),
              ColorCard(
                label: 'Secondary\nContainer',
                color: colorScheme.secondaryContainer,
                textColor: colorScheme.onSecondaryContainer,
              ),
              ColorCard(
                label: 'on\nSecondary\nContainer',
                color: colorScheme.onSecondaryContainer,
                textColor: colorScheme.secondaryContainer,
              ),
              ColorCard(
                label: 'Tertiary',
                color: colorScheme.tertiary,
                textColor: colorScheme.onTertiary,
              ),
              ColorCard(
                label: 'on\nTertiary',
                color: colorScheme.onTertiary,
                textColor: colorScheme.tertiary,
              ),
              ColorCard(
                label: 'Tertiary\nContainer',
                color: colorScheme.tertiaryContainer,
                textColor: colorScheme.onTertiaryContainer,
              ),
              ColorCard(
                label: 'on\nTertiary\nContainer',
                color: colorScheme.onTertiaryContainer,
                textColor: colorScheme.tertiaryContainer,
              ),
              ColorCard(
                label: 'Error',
                color: colorScheme.error,
                textColor: colorScheme.onError,
              ),
              ColorCard(
                label: 'on\nError',
                color: colorScheme.onError,
                textColor: colorScheme.error,
              ),
              ColorCard(
                label: 'Error\nContainer',
                color: colorScheme.errorContainer,
                textColor: colorScheme.onErrorContainer,
              ),
              ColorCard(
                label: 'onError\nContainer',
                color: colorScheme.onErrorContainer,
                textColor: colorScheme.errorContainer,
              ),
              ColorCard(
                label: 'Background',
                color: colorScheme.background,
                textColor: colorScheme.onBackground,
              ),
              ColorCard(
                label: 'on\nBackground',
                color: colorScheme.onBackground,
                textColor: colorScheme.background,
              ),
              ColorCard(
                label: 'Surface',
                color: colorScheme.surface,
                textColor: colorScheme.onSurface,
              ),
              ColorCard(
                label: 'on\nSurface',
                color: colorScheme.onSurface,
                textColor: colorScheme.surface,
              ),
              ColorCard(
                label: 'Surface\nVariant',
                color: colorScheme.surfaceVariant,
                textColor: colorScheme.onSurfaceVariant,
              ),
              ColorCard(
                label: 'onSurface\nVariant',
                color: colorScheme.onSurfaceVariant,
                textColor: colorScheme.surfaceVariant,
              ),
              ColorCard(
                label: 'Outline',
                color: colorScheme.outline,
                textColor: colorScheme.background,
              ),
              ColorCard(
                label: 'Outline\nVariant',
                color: colorScheme.outlineVariant,
                textColor: colorScheme.onBackground,
              ),
              ColorCard(
                label: 'Shadow',
                color: colorScheme.shadow,
                textColor: _onColor(colorScheme.shadow, background),
              ),
              ColorCard(
                label: 'Scrim',
                color: colorScheme.scrim,
                textColor: _onColor(colorScheme.scrim, background),
              ),
              ColorCard(
                label: 'Inverse\nSurface',
                color: colorScheme.inverseSurface,
                textColor: colorScheme.onInverseSurface,
              ),
              ColorCard(
                label: 'onInverse\nSurface',
                color: colorScheme.onInverseSurface,
                textColor: colorScheme.inverseSurface,
              ),
              ColorCard(
                label: 'Inverse\nPrimary',
                color: colorScheme.inversePrimary,
                textColor: colorScheme.inverseSurface,
              ),
              ColorCard(
                label: 'Surface\nTint',
                color: colorScheme.surfaceTint,
                textColor: colorScheme.onPrimary,
              ),
            ],
          ),
        ],
      ),
    );
  }
}

/// A [SizedBox] with a [Card] and string text in it. Used in this demo to
/// display theme color boxes.
///
/// Can specify label text color and background color.
class ColorCard extends StatelessWidget {
  const ColorCard({
    super.key,
    required this.label,
    required this.color,
    required this.textColor,
    this.size,
  });

  final String label;
  final Color color;
  final Color textColor;
  final Size? size;

  @override
  Widget build(BuildContext context) {
    const double fontSize = 11;
    const Size effectiveSize = Size(86, 58);

    return SizedBox(
      width: effectiveSize.width,
      height: effectiveSize.height,
      child: Card(
        margin: EdgeInsets.zero,
        clipBehavior: Clip.antiAlias,
        color: color,
        child: Center(
          child: Text(
            label,
            style: TextStyle(color: textColor, fontSize: fontSize),
            textAlign: TextAlign.center,
          ),
        ),
      ),
    );
  }
}

Used Flutter Version
Channel master, 3.7.0-15.0.pre.16

Flutter doctor

flutter doctor -v
[✓] Flutter (Channel master, 3.9.0-15.0.pre.7, on macOS 13.2.1 22D68 darwin-arm64, locale en-US)
    • Flutter version 3.9.0-15.0.pre.7 on channel master at /Users/rydmike/fvm/versions/master
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision b42e8db6cf (4 hours ago), 2023-03-22 13:12:55 -0400
    • Engine revision 5775c6b05f
    • Dart version 3.0.0 (build 3.0.0-348.0.dev)
    • DevTools version 2.22.2
    • If those were intentional, you can disregard the above warnings; however it is recommended to use "git" directly to perform
      update checks and upgrades.

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
    • Android SDK at /Users/rydmike/Library/Android/sdk
    • Platform android-33, build-tools 33.0.0
    • Java binary at: /Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 14.2)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 14C18
    • CocoaPods version 1.11.3

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2022.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)

[✓] IntelliJ IDEA Community Edition (version 2022.3.3)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 72.1.4
    • Dart plugin version 223.8888

[✓] VS Code (version 1.76.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.60.0

[✓] Connected device (2 available)
    • macOS (desktop) • macos  • darwin-arm64   • macOS 13.2.1 22D68 darwin-arm64
    • Chrome (web)    • chrome • web-javascript • Google Chrome 111.0.5563.110

[✓] Network resources
    • All expected network resources are available.

Reproduces using the code sample provided above.

flutter doctor -v
[✓] Flutter (Channel stable, 3.7.8, on macOS 13.2.1 22D68 darwin-arm64, locale en-GB)
    • Flutter version 3.7.8 on channel stable at /Users/nexus/dev/sdks/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 90c64ed42b (2 days ago), 2023-03-21 11:27:08 -0500
    • Engine revision 9aa7816315
    • Dart version 2.19.5
    • DevTools version 2.20.1

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
    • Android SDK at /Users/nexus/Library/Android/sdk
    • Platform android-33, build-tools 33.0.0
    • Java binary at: /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/221.6008.13.2211.9619390/Android Studio.app/Contents/jbr/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 14.2)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 14C18
    • CocoaPods version 1.11.3

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2022.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)

[✓] Android Studio (version 2022.1)
    • Android Studio at /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/221.6008.13.2211.9477386/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)

[✓] Android Studio (version 2022.1)
    • Android Studio at /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/221.6008.13.2211.9619390/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)

[✓] IntelliJ IDEA Community Edition (version 2022.3.3)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 72.1.4
    • Dart plugin version 223.8888

[✓] VS Code (version 1.76.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.60.0

[✓] Connected device (3 available)
    • Nexus (mobile)  • 00008020-001875E83A38002E • ios            • iOS 16.3.1 20D67
    • macOS (desktop) • macos                     • darwin-arm64   • macOS 13.2.1 22D68 darwin-arm64
    • Chrome (web)    • chrome                    • web-javascript • Google Chrome 111.0.5563.110
    ! Error: Dean’s iPad is busy: Waiting to connect and unlock the device. Xcode will continue when Dean’s iPad is finished. (code -10)

[✓] HTTP Host Availability
    • All required HTTP hosts are available

• No issues found!

[!] Flutter (Channel master, 3.9.0-15.0.pre.20, on macOS 13.2.1 22D68 darwin-arm64, locale en-GB)
    • Flutter version 3.9.0-15.0.pre.20 on channel master at /Users/nexus/dev/sdks/flutters
    ! Warning: `flutter` on your path resolves to /Users/nexus/dev/sdks/flutter/bin/flutter, which is not inside your current Flutter SDK checkout at /Users/nexus/dev/sdks/flutters. Consider adding /Users/nexus/dev/sdks/flutters/bin to the front of your path.
    ! Warning: `dart` on your path resolves to /Users/nexus/dev/sdks/flutter/bin/dart, which is not inside your current Flutter SDK checkout at /Users/nexus/dev/sdks/flutters. Consider adding /Users/nexus/dev/sdks/flutters/bin to the front of your path.
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 2bb7b9bc4c (3 hours ago), 2023-03-23 02:04:21 -0400
    • Engine revision 10ade9e22d
    • Dart version 3.0.0 (build 3.0.0-356.0.dev)
    • DevTools version 2.22.2
    • If those were intentional, you can disregard the above warnings; however it is recommended to use "git" directly to perform update checks and upgrades.

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
    • Android SDK at /Users/nexus/Library/Android/sdk
    • Platform android-33, build-tools 33.0.0
    • Java binary at: /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/221.6008.13.2211.9619390/Android Studio.app/Contents/jbr/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 14.2)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 14C18
    • CocoaPods version 1.11.3

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2022.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)

[✓] Android Studio (version 2022.1)
    • Android Studio at /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/221.6008.13.2211.9477386/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)

[✓] Android Studio (version 2022.1)
    • Android Studio at /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/221.6008.13.2211.9619390/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)

[✓] IntelliJ IDEA Community Edition (version 2022.3.3)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 72.1.4
    • Dart plugin version 223.8888

[✓] VS Code (version 1.76.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.60.0

[✓] Connected device (4 available)
    • Dean’s iPad (mobile) • 00008103-000825C811E3401E • ios            • iOS 16.3.1 20D67
    • Nexus (mobile)       • 00008020-001875E83A38002E • ios            • iOS 16.3.1 20D67
    • macOS (desktop)      • macos                     • darwin-arm64   • macOS 13.2.1 22D68 darwin-arm64
    • Chrome (web)         • chrome                    • web-javascript • Google Chrome 111.0.5563.110
    ! Error: Dean’s iPad is busy: Waiting to connect and unlock the device. Xcode will continue when Dean’s iPad is finished. (code -10)

[✓] Network resources
    • All expected network resources are available.

! Doctor found issues in 1 category.


Property:lowestBiostratigraphicZone

Label
Lowest Biostratigraphic Zone

Definition
The full name of the lowest possible geological biostratigraphic zone of the stratigraphic horizon from which the cataloged item was collected.

Usage
The full name of the lowest possible geological biostratigraphic zone of the stratigraphic horizon from which the objects in the collection originated.

Existing property
dwc:lowestBiostratigraphicZone

Existing class
Geological Context

Existing property identifier
http://rs.tdwg.org/dwc/terms/lowestBiostratigraphicZone

Format
Text

Required
No

Repeatable
No

Constraints
Controlled vocabulary

Examples
Baculites rex zone Cynognathus zone Cynognathus zone

Notes
https://stratigraphy.org/guide/bio

Vocabulary https://timescalefoundation.org/index.html ?

The Paleo Digi group recommends changing the example as NALMAs are being recorded in chronostrat. Suggestions for new examples:

Baculites rex zone
Neomanticoceras paradoxum zone
Nemagraptus gracilis zone
Prosaukia zone
Cynognathus zone
Crepicephalus zone
Ptychaspis zone
Palmatolepis crepida zone
Palmatolepis minuta minuta zone

In general, we have also decided that chrono- and lithostratigraphic terms will be of greater utility, with biostrat of secondary importance for CD purposes.
This feedback also relates to Issue #191 .

Additional examples could be (mammals, Lake Turkana area):

Metridiochoerus andrewsi Zone
Notochoerus scotti Zone
Metridiochoerus compactus Zone

Thanks for the examples -I've updated the issue.


Lualine Support

Does this plugin support lualine?

Does this plugin support lualine?

For onedark, the only difference is in the bg and the additional grays provided by the Lualine theme. For onelight however, there is quite a big difference.
@augustocdias could you give me a link to a theme that does support Lualine and I will take a look.

https://github.com/folke/tokyonight.nvim and https://github.com/monsonjeremy/onedark.nvim support it.
@mmirus that's what I use and that's why I asked because the color for lsp warnings in the lualine implementation is unreadable inside the the green background. I'm currently using tokyonight because of that... I'll create an issue on their side to deal with it

How does this look?

The git diff stuff looks a bit funky:

...presume this is a lualine default you can change?
Oh and the tme function is my custom function for toggling between onedark and onelight.

Looking good!

Very good I'd say.

Awesome. Have merged into main


Initial Pager Control Check-In - Partial C# Prototype

This PR adds in a Pager Control C# Prototype.
Description
There are two pagers currently in the PR. The C# prototype is called "PrototypePager" as to not conflict with the C++ control for "Pager".
Currently there are 4 modes to the pager control (Auto, NumberBox, ComboBox, NumberPanel). The only modes that are currently implemented are Auto, NumberBox, and ComboBox. NumberPanel is still being tested out, but I have included a preview to how the Number Panel might look like.
I would like some feedback on the current layout of the pager control. Specifically NumberBox & ComboBox but any feedback is welcomed.
I have also included a PrototypePager.TestHooks.cs file for testings. Currently there is no C# implementation of testhooks so this is the best I could do to get tests working.
Motivation and Context
This change is required so that a Pager Control can be included into WinUI2.
Noteworthy Issues:
#2934  - Pager Checklist
#60 - Feature Proposal
How Has This Been Tested?
The tests I have mainly performed were Interaction Tests. I tested out the First, Previous, Next, Last Page Buttons and the NumberBox/ComboBox display modes.


Fix scrolling with UTF-8 characters in Conky

I was using Conky with spotify-control and when
having songs with special characters (which happened to me more often
than not) the whole UI broke down. Then I realized it was a known bug,
but it has a fix.
This is my  first contribution and it's not really a lot of code. But
I'm open to change this to an optional value if you think it should be
like that. (because in arch linux it is another package)
I think this is an important thing to fix, though.

Just to update, with newest conky-1.10 release this patch no longer works because it's meant for scroll.c, but in the new release they changed it to be coded in C++. The scrolling with UTF8 issue still persists though

I'll close this then.
I don't see what to better do with the PR until someone ports the fix to 1.10. BTW, is the issue reported upstream? It would seem much better place to discuss such issues.


IHostingBuilder design

First of all. I am sorry about my poor english. Please do not mind.
Hi, I am reading the source code of hosting, and i design a similarity ETL framework follow the hosting design. I found the source code of IWebHostingBuilder contains method like ConfigureAppConfiguration, ConfigureServices, I have some doubts about why just simplify the interface use method Configure(Action<IServiceCollection>) to configure the services and thread IConfigurationBuilder as one of the service. we can just use Configure to do the same thing as ConfigureAppConfiguration and ConfigureServices done, and the concept is more simple. And for simplifing usage, we can just make a IWebHostingBuilderExtensions static method to extension the interface.
Here is some of my code in abstraction project.
public interface IHostBuilder
{
    IHost Build();

    IHostBuilder Configure(Action<IServiceCollection> configureServices);
}

Here is some of my code in implement project.
public static class IHostBuilderExtensions
{
    public static IHostBuilder AddDefaultServices(this IHostBuilder builder)
    {
		// TODO
		return builder;
    }

    public static IHostBuilder Configure(this IHostBuilder builder, Action<IConfigurationBuilder> action)
    {
	    builder.Configure(sc =>
	    {
		    var cb = sc.BuildServiceProvider().GetRequiredService<IConfigurationBuilder>();
		    action(cb);
	    });
		return builder;
    }

    public static IHostBuilder Configure(
	    this IHostBuilder builder,
	    Action<IConfigurationBuilder, IServiceCollection> action)
    {
	    builder.Configure(sc =>
	    {
			var cb = sc.BuildServiceProvider().GetRequiredService<IConfigurationBuilder>();
			action(cb, sc);
	    });
		return builder;
    }

	public static IHostBuilder Configure(
		this IHostBuilder builder,
		Action<IConfiguration, IConfigurationBuilder, IServiceCollection> action)
	{
		builder.Configure(sc =>
		{
			var cb = sc.BuildServiceProvider().GetRequiredService<IConfigurationBuilder>();
			var conf = cb.Build();
			action(conf, cb, sc);
		});
		return builder;
    }
}

Thank you for showing me the way.

Calling BuildServiceProvider creates a new service provider so you can't use really use the IServiceCollection to pass state around unless you pass a service that is instance based. Each call to BuildServiceProvider creates a new universe of types that are unrelated.

We periodically close 'discussion' issues that have not been updated in a long period of time.
We apologize if this causes any inconvenience. We ask that if you are still encountering an issue, please log a new issue with updated information and we will investigate.


Fix autocomplete issue in VBA flow

cc @kevinksullivan @iwiznia
Details
This PR fixes a regression from https://github.com/Expensify/App/pull/4471 that caused an issue that was undone in https://github.com/Expensify/App/pull/4765. Original issue is https://github.com/Expensify/Expensify/issues/173177.
Tests/QA

Sign into an account on chrome and save the password in chrome when prompted
Sign into an account, tap on the profile icon to go to settings, and then click on a workspace
Click on Get Started for the Expensify Card
Select Connect Manually and enter 123123123 for both fields
On the autoComplete section, confirm no values are pre-filled for Industry Classification Code
Confirm the same happens on all platforms (you won't be able to save password on the others)
Confirm that on Android, you can view the Company Information page without the app throwing an error
Confirm that on iOS, you can view the Company Information page without the app throwing an error

Tested On

[x] Web
[x] Mobile Web
[x] Desktop
[x] iOS
[x] Android

Screenshots

🚀 Deployed to staging by @Jag96 in version: 1.0.88-3 🚀

platform
result

🤖 android 🤖
cancelled 🔪

🖥 desktop 🖥
cancelled 🔪

🍎 iOS 🍎
cancelled 🔪

🕸 web 🕸
success ✅

🚀 Deployed to production by @roryabraham in version: 1.0.90-2 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
failure ❌

🕸 web 🕸
success ✅


Emmet for Yandex BEM doesn't work in JSX

Does this issue occur when all extensions are disabled?: Yes

VS Code Version: 1.62.0 (user setup)
OS Version: Windows_NT x64 10.0.22000

Steps to Reproduce:

typing .about>h1.__h1+h2.--h2 in a React Component render function
press tab
got

expected

according to this case it's should be work https://github.com/Microsoft/vscode/issues/32183

Does it work if you type |bem after?
The expression should be .about>h1.__h1+h2.--h2|bem
If that doesn't work, you might also need to enable emmet.triggerExpansionOnTab.

Does it work if you type |bem after?
Yes, but it doesn't matter
.about>h1.__h1+h2.--h2|bem I've just tried it.


WIP JUnit 5 support module

This is still a work in progress but there's already a lot of code.
I'd like some feedback, please.

This change is

hm.. codacy doesn't allow for excluding tests via pattern and i can only exclude test folders once they are present on the master branche ... so I'll just ignore them for now..

[Current coverage][cc-pull] is 87.26% (diff: 5.37%)

Merging [#18][cc-pull] into [master][cc-base-branch] will decrease coverage by 6.71%

@@             master        #18   diff @@
==========================================
  Files           241        256    +15
  Lines          2953       3195   +242
  Methods           0          0
  Messages          0          0
  Branches        149        164    +15
==========================================
+ Hits           2775       2788    +13
- Misses          147        376   +229
  Partials         31         31

Powered by Codecov. Last update [5969014...ac5878d][cc-compare]
[cc-base-branch]: https://codecov.io/gh/testIT-WebTester/webtester2-core/branch/master?src=pr
[cc-compare]: https://codecov.io/gh/testIT-WebTester/webtester2-core/compare/5969014f2c56dde1e3f7ebba3a77109031cd36cd...ac5878d2736f64093688667a4a14bd3efd3591b0?src=pr
[cc-pull]: https://codecov.io/gh/testIT-WebTester/webtester2-core/pull/18?src=pr

Ok, now it's finally ready for review - production and test code is working.
I'll write the documentation after the discussion about the core concepts, names etc. is done.

@bitterblue I added an additional extension which will allow for the definition of entry points for browsers.
These can be defined by annotating a @Managed with @EntryPoint. The URLs are opened for the browser before each test and can include variables which will be resolved against the browser's configuration.

Something seams strange with the codecov/path and /project values ... when executing the tests for the support module in the IDE the coverage is about 96% maybe jacoco has a problem with JUnit 5 ?

Could this be the same issue the Junit5 developers ran into? See: https://github.com/junit-team/junit5/issues/240
I'll have a look at the new extension on Friday or this weekend.

No, I found the issue earlier today - I forgot to override the maven surefire plugin configuration to include integration tests which are normally excluded and executed by the failsafe plugin. But JUnit 5 tests are not supported by the failsafe plugin, yet.

Renamed TypedConfigurationValueGetter to ConfigurationUnmarshaller and added documentation.
Now this is no longer WIP >> please review and merge :)

Currently reviewing, and I love how the extension concept of junit5 works out for us :)
Regarding overall design, I'm a bit unhappy about the coupling of the four actual extensions via the TestClassModel and the fact that we initialize it once in a fifth extension, and then share it among the others. The coupling is acceptable, since it's just a small library. But the shared state forces us to depend on annotation evaluation order in EnableWebTesterExtensions, which is ugly. And the user can no longer safely pick and choose the extensions she wants. Couldn't we initialize the model in the BaseExtension, but only if it's not already stored in the context? This would also eliminate the need for setModel().

 That way the first extension actually needing it would trigger the load. As far as i know the context store is thread, so there should not be a problem.

I think that's the way to go then. I'd code this up in a separate issue so we can get this merge done first.

Reviewed 2 of 54 files at r1, 1 of 9 files at r4, 7 of 16 files at r5, 1 of 32 files at r6, 1 of 5 files at r7, 7 of 27 files at r8, 9 of 12 files at r9, 1 of 1 files at r10, 8 of 8 files at r11, 1 of 1 files at r12, 16 of 50 files at r13, 34 of 34 files at r14.
Review status: all files reviewed at latest revision, 17 unresolved discussions, some commit checks failed.

webtester-support-junit5/src/main/java/info/novatec/testit/webtester/junit5/EnableWebTesterExtensions.java, line 36 [r14] (raw file):

@ExtendWith(EntryPointExtension.class)
public @interface EnableWebTesterExtensions {
    /* The order of @ExtendWith is relevant! The extensions are evaluated in the order they are defined in. */

Yes, we should address this as a separate issue.

webtester-support-junit5/src/main/java/info/novatec/testit/webtester/junit5/exceptions/UnknownConfigurationKeyException.java, line 17 [r14] (raw file):
Previously, codacy-bot (Codacy Bot) wrote…
> ![Codacy](https://www.codacy.com/assets/images/favicon.png) Issue found: [Perhaps 'key' could be replaced by a local variable.](https://www.codacy.com/app/github_64/webtester2-core/file/3267140963/issues/source?bid=3285379&fileBranchId=3472116#l17)

Is there a reason we want to keep key around?

webtester-support-junit5/src/main/java/info/novatec/testit/webtester/junit5/extensions/BaseExtension.java, line 35 [r14] (raw file):

    protected BaseExtension(ReflectionUtils reflectionUtils) {
        // can only be used by subclasses

Confused by this comment. Everything here is protected or private, so I'm not sure if it's just stating the obvious.

webtester-support-junit5/src/main/java/info/novatec/testit/webtester/junit5/extensions/analysis/TestClassAnalysisExtension.java, line 13 [r14] (raw file):

/**
 * This {@link Extension} analyzes the test class and extracts a {@link TestClassModel} from that analysis. This model is
 * then stored within the current test context to bes used by other extensions.

Typo: bes -> be

webtester-support-junit5/src/main/java/info/novatec/testit/webtester/junit5/extensions/configuration/ConfigurationValueExtension.java, line 63 [r14] (raw file):

 *     String value;
 *
 *     @ConfigurationValue(value="keys.foo", using=FooGetter.class)

FooGetter.class should also be an Unmarshaller

webtester-support-junit5/src/main/java/info/novatec/testit/webtester/junit5/extensions/configuration/ConfigurationValueExtension.java, line 91 [r14] (raw file):

    @SuppressWarnings("unchecked")
    private static final List<ConfigurationUnmarshaller<?>> DEFAULT_VALUE_GETTERS = new LinkedList() {{

DEFAULT_VALUE_GETTERS --> DEFAULT_UNMARSHALLERS

webtester-support-junit5/src/main/java/info/novatec/testit/webtester/junit5/extensions/configuration/ConfigurationValueExtension.java, line 137 [r14] (raw file):

            Object value = null;
            if (NoOpUnmarshaller.class.equals(annotation.using())) {

Maybe turn NoOpUnmarshaller into DefaultUnmarshaller, then move getValueUsingDefaultGetters() to that class. That would make this conditional unnecessary.

webtester-support-junit5/src/main/java/info/novatec/testit/webtester/junit5/extensions/configuration/unmarshaller/ConfigurationUnmarshaller.java, line 13 [r14] (raw file):

 * Implementations of this interface are used to unmarshal a value from a {@link Configuration} as a specific type.
 * <p>
 * More specifically these implementations are user when resolving values for fields annotated with {@link

Typo: user -> used

webtester-support-junit5/src/main/java/info/novatec/testit/webtester/junit5/internal/ReflectionUtils.java, line 21 [r14] (raw file):

    }

    public Deque<Class<?>> getClassHierarchy(Class<?> testClass) {

Nitpicky, but I'd call this getClassLineage(). Hierarchy also includes subclasses and sibling classes (the entire inheritance tree).

webtester-support-junit5/src/main/java/info/novatec/testit/webtester/junit5/internal/ReflectionUtils.java, line 22 [r14] (raw file):

    public Deque<Class<?>> getClassHierarchy(Class<?> testClass) {
        Deque<Class<?>> classes = new LinkedList<>();

Deque and LinkedList are somewhat exotic. You want to get the list in reverse for convenience, don't you? Why not just use Collections.reverse() on an ArrayList?

Comments from Reviewable

Review status: all files reviewed at latest revision, 17 unresolved discussions, some commit checks failed.

webtester-support-junit5/src/main/java/info/novatec/testit/webtester/junit5/EnableWebTesterExtensions.java, line 36 [r14] (raw file):
Previously, bitterblue (Axel Schüssler) wrote…
> Yes, we should address this as a separate issue.

The comment itself is not in relation to the discussed issue. Its more like a general notice for future extensions how JUnit 5 handles extensions in general. In addition event with lazy loading of the model, we will always have a dependency between certain extensions. Without the ManagedBrowserExtension none of the other ones work, because the Browser fields would not be initialized.

webtester-support-junit5/src/main/java/info/novatec/testit/webtester/junit5/exceptions/UnknownConfigurationKeyException.java, line 17 [r14] (raw file):
Previously, bitterblue (Axel Schüssler) wrote…
> Is there a reason we want to keep key around?

(1) Codacy doesn't know about Lombok.
(2) I tend to write my exceptions to remember data they were caused by. Maybe whoever catches the exception can use the key in some way. It might very well be that no one ever needs to get the key... but I'm not certain of it.

webtester-support-junit5/src/main/java/info/novatec/testit/webtester/junit5/extensions/configuration/ConfigurationValueExtension.java, line 137 [r14] (raw file):
Previously, bitterblue (Axel Schüssler) wrote…
> Maybe turn `NoOpUnmarshaller` into `DefaultUnmarshaller`, then move `getValueUsingDefaultGetters()` to that class. That would make this conditional unnecessary.

Thats a great idea!

webtester-support-junit5/src/main/java/info/novatec/testit/webtester/junit5/internal/ReflectionUtils.java, line 22 [r14] (raw file):
Previously, bitterblue (Axel Schüssler) wrote…
> `Deque` and `LinkedList` are somewhat exotic. You want to get the list in reverse for convenience, don't you? Why not just use `Collections.reverse()` on an `ArrayList`?

Hm that actually an interesting topic - I don't know why or when it happened, but my default go to list has always been the LinkedList. I Generally use ArrayList only in cases where I'm sure data will be accessed by index instead of iterated over.
To use the Dequeue side of LinkedList came to be because Stack should no longer be used and I wanted to "stack" the classes according to their lineage.
But back to the issue at hand... Instead of an `ArrayList` with `Collections.reverse()` I could just return `List` instead of `Dequeue`. The `LinkedList` offers the push method and implements a `List`- which doesn't need to be reversed at all.

Comments from Reviewable

With the latest version I should have fixed all but one of the Reviewable Issues.
I have a problem moving the default unmarshaller code (static list, and impl) to the DefaultUnmarshaller class.
The interface doesn't really allow for the 1:n delegation to all of the default unmarshallers (String, Boolean etc.) without storing some state when canHandle(..) is called. Which was rather nasty in my first draft.
Just moving the list and method to the class, would not get rid of the ìf(...){...} else {...}` as intended.
I would suggest that we remember the issue and come up with a solution when changing the extension coupling...

Reviewed 1 of 16 files at r5, 2 of 52 files at r13, 2 of 36 files at r14, 7 of 12 files at r15.
Review status: 49 of 53 files reviewed at latest revision, 11 unresolved discussions, some commit checks failed.

webtester-support-junit5/src/main/java/info/novatec/testit/webtester/junit5/EnableWebTesterExtensions.java, line 36 [r14] (raw file):
Previously, slu-it (Stefan Ludwig) wrote…
> The comment itself is not in relation to the discussed issue. Its more like a general notice for future extensions how JUnit 5 handles extensions in general. In addition event with lazy loading of the model, we will always have a dependency between certain extensions. Without the ManagedBrowserExtension none of the other ones work, because the Browser fields would not be initialized.

Ah, I didn't think of that additional order dependency.

webtester-support-junit5/src/main/java/info/novatec/testit/webtester/junit5/internal/ReflectionUtils.java, line 22 [r14] (raw file):
Previously, slu-it (Stefan Ludwig) wrote…
> Hm that actually an interesting topic - I don't know why or when it happened, but my default go to list has always been the LinkedList. I Generally use ArrayList only in cases where I'm sure data will be accessed by index instead of iterated over.
> To use the Dequeue side of LinkedList came to be because Stack should no longer be used and I wanted to "stack" the classes according to their lineage.
> But back to the issue at hand... Instead of an `ArrayList` with `Collections.reverse()` I could just return `List` instead of `Dequeue`. The `LinkedList` offers the push method and implements a `List`- which doesn't need to be reversed at all.

OK. That makes the method signature more readable.
Regarding LinkedList, the general advice to Java developers is to avoid it and use ArrayList instead. From the top of my head, two reasons are:

the two implementations have vastly different runtime behavior and the List interface hides that, which can lead to nasty surprises
ArrayList maps really well to cache hierarchies of modern CPUs and tends to vastly outperform LinkedList for most use-cases (including this one)

Let's discuss this sometime :)

Comments from Reviewable

LGTM

Reviewed 1 of 9 files at r4, 1 of 52 files at r13, 1 of 36 files at r14, 5 of 12 files at r15.
Review status: all files reviewed at latest revision, 9 unresolved discussions, some commit checks failed.

Comments from Reviewable

I added #20 and #21 to address the design issues brought up in this discussion.


[GLUTEN-4421][VL] Disable flushable aggregate when input is already partitioned by grouping keys

If child output already partitioned by aggregation keys (this function returns true), we should avoid the optimization converting to flushable aggregation.
For example, if input is hash-partitioned by keys (a, b) and aggregate node requests "group by a, b, c", then the aggregate should NOT flush as the grouping set (a, b, c) will be created only on a single partition among the whole cluster. Spark's planner may use this information to perform optimizations like doing "partial_count(a, b, c)" directly on the output data.
This fixes #4421

/Benchmark Velox

/Benchmark Velox

===== Performance report for TPCH SF2000 with Velox backend, for reference only ====

query
log/native_4443_time.csv
log/native_master_01_17_2024_6e070aee2_time.csv
difference
percentage

q1
33.21
32.53
-0.678
97.96%

q2
24.14
25.15
1.012
104.19%

q3
38.40
35.63
-2.766
92.80%

q4
36.51
39.47
2.965
108.12%

q5
70.64
69.91
-0.726
98.97%

q6
8.04
7.16
-0.880
89.06%

q7
84.82
83.43
-1.397
98.35%

q8
84.89
86.98
2.089
102.46%

q9
121.60
125.57
3.971
103.27%

q10
44.75
42.09
-2.663
94.05%

q11
20.27
20.23
-0.045
99.78%

q12
24.96
27.47
2.508
110.05%

q13
45.98
44.85
-1.136
97.53%

q14
20.99
17.86
-3.134
85.07%

q15
28.30
29.77
1.468
105.19%

q16
14.18
13.95
-0.229
98.39%

q17
101.66
100.92
-0.735
99.28%

q18
148.63
146.37
-2.265
98.48%

q19
13.02
13.91
0.897
106.89%

q20
26.54
26.50
-0.036
99.87%

q21
224.71
226.25
1.543
100.69%

q22
13.57
13.71
0.135
101.00%

total
1229.82
1229.72
-0.100
99.99%

/Benchmark Velox

I'm trying to understand this issue, please correct me if wrong. What we want to fix in this pr is: do not convert regular to flushable agg (2) because the flushable agg would output more than one group for the same group and then cause the partial count accumulator (3) bigger than expected.
SELECT c1, count(distinct c2), count(1) FROM t GROUP BY c1

(4) Aggregate [c1], [count(c2), count(1)]
  Shuffle c1
    (3) Aggregate [c1], [partial_count(c2), merge_count(1)]
      (2) Aggregate [c1, c2], [merge_count(1)]
         Shuffle c1, c2
           (1) Aggregate [c1, c2], [partial_count(1)]

===== Performance report for TPCH SF2000 with Velox backend, for reference only ====

query
log/native_4443_time.csv
log/native_master_01_18_2024_7c853c61f_time.csv
difference
percentage

q1
33.23
31.92
-1.309
96.06%

q2
23.69
25.94
2.252
109.50%

q3
34.74
36.00
1.261
103.63%

q4
38.31
39.52
1.205
103.14%

q5
66.61
68.31
1.700
102.55%

q6
6.99
5.33
-1.657
76.29%

q7
84.30
83.20
-1.104
98.69%

q8
83.98
84.62
0.638
100.76%

q9
122.96
123.96
1.000
100.81%

q10
41.48
42.82
1.336
103.22%

q11
19.90
20.16
0.262
101.32%

q12
28.66
26.88
-1.780
93.79%

q13
45.68
44.35
-1.330
97.09%

q14
17.00
16.22
-0.775
95.44%

q15
28.44
28.70
0.262
100.92%

q16
14.07
13.92
-0.144
98.98%

q17
98.73
99.40
0.673
100.68%

q18
147.12
145.71
-1.408
99.04%

q19
12.52
12.60
0.084
100.67%

q20
26.00
26.33
0.326
101.26%

q21
223.06
225.76
2.703
101.21%

q22
13.64
13.59
-0.056
99.59%

total
1211.10
1215.24
4.141
100.34%

I'm trying to understand this issue, please correct me if wrong. What we want to fix in this pr is: do not convert regular to flushable agg (2) because the flushable agg would output more than one group for the same group and then cause the partial count accumulator (3) bigger than expected.
SELECT c1, count(distinct c2), count(1) FROM t GROUP BY c1

(4) Aggregate [c1], [count(c2), count(1)]
  Shuffle c1
    (3) Aggregate [c1], [partial_count(c2), merge_count(1)]
      (2) Aggregate [c1, c2], [merge_count(1)]
         Shuffle c1, c2
           (1) Aggregate [c1, c2], [partial_count(1)]

It's more or less similar to the issue this PR is trying to solve. Except that Q38 generates plan like the following:
// Spark 3.3
(2) Aggregate [partial_count]
 Shuffle ???
  (1) Aggregate [c1, c2]  // <- this should not be flushable
   Shuffle c1, c2

In Spark 3.2 the agg (1) can be flushable since there was another distinct aggregation generated on reducer side:
// Spark 3.2
(2) Aggregate [partial_count]
  (3) Aggregate [c1, c2]
    Shuffle ???
     (1) Aggregate [c1, c2]  // <- this can be flushable
       Shuffle c1, c2

That's why the issue is found starting from Spark 3.3. There might be some new optimizations from vanilla Spark.

I'm trying to understand this issue, please correct me if wrong. What we want to fix in this pr is: do not convert regular to flushable agg (2) because the flushable agg would output more than one group for the same group and then cause the partial count accumulator (3) bigger than expected.
SELECT c1, count(distinct c2), count(1) FROM t GROUP BY c1

(4) Aggregate [c1], [count(c2), count(1)]
  Shuffle c1
    (3) Aggregate [c1], [partial_count(c2), merge_count(1)]
      (2) Aggregate [c1, c2], [merge_count(1)]
         Shuffle c1, c2
           (1) Aggregate [c1, c2], [partial_count(1)]

BTW, forgot to mention that current code should already be able to handle this case without this patch (we convert agg to flushable agg only when it's the one close to shuffle). But still thanks for taking the example which is valuable anyway.

The optimization since Spark3.3 is due to the pr https://github.com/apache/spark/pull/35779. So we should not convert regular to flushable agg if it is a group by only aggreagate and it's adjacent parent is a partial aggregate ?

The optimization since Spark3.3 is due to the pr apache/spark#35779. So we should not convert regular to flushable agg if it is a group by only aggreagate and it's adjacent parent is a partial aggregate ?

Thanks for the information.
I think we indeed could forbid flushing on the case apache/spark#35779 optimizes against, although I am thinking whether the patch could provide a more general fix.
When an aggregate can be considered to emit distinct data and so propagate "distinct attributes", the distinct aggregation must be a "final distinct aggregation", which means it has to process data that are already partitioned by the distinct keys. Base on this assumption, the patch could be a correct fix (Correct me if I was wrong, indeed).
Additionally, the fix could be considered "general" since it's not limited to distinct aggregation. For example, a partial sum agg could produce meaningful data for a specific grouping set when it is handling input that was already partitioned by grouping keys. This may not be a good example since I doubt Catalyst planner never creates plan related to this case, but anyway the principle here is to be more careful to use flushable aggregation since vanilla Spark doesn't have this kind of optimization as of now.

This pr is a kind of conservative fix for the issue, that means it can fix the issue but may miss optimize some other cases, e.g., if the agg is on the top of a shuffled join with the same keys, then the partial agg would not be converted to flushable.
xxx
Shuffle
  Aggregate xxx
    Aggregate partial_xxx
      Shuffled Join
         Shuffle
         Shuffle

I'm fine to fix it first  since it's a data correctness issue, and do further optimization in next pr.

This pr is a kind of conservative fix for the issue, that means it can fix the issue but may miss optimize some other cases, e.g., if the agg is on the top of a shuffled join with the same keys, then the partial agg would not be converted to flushable.
xxx
Shuffle
  Aggregate xxx
    Aggregate partial_xxx
      Shuffled Join
         Shuffle
         Shuffle

I'm fine to fix it first since it's a data correctness issue, and do further optimization in next pr.

I understand your point. And I think this kind of plan is not able to be optimized within flushable agg even without the patch. So let's keep enhancing the rule to cover more cases like that in further development iterations.

Thanks for reviewing!

===== Performance report for TPCH SF2000 with Velox backend, for reference only ====

query
log/native_4443_time.csv
log/native_master_01_18_2024_7c853c61f_time.csv
difference
percentage

q1
33.16
31.92
-1.235
96.28%

q2
25.53
25.94
0.409
101.60%

q3
36.16
36.00
-0.155
99.57%

q4
37.77
39.52
1.749
104.63%

q5
69.34
68.31
-1.033
98.51%

q6
5.52
5.33
-0.186
96.64%

q7
84.29
83.20
-1.094
98.70%

q8
84.85
84.62
-0.233
99.73%

q9
121.23
123.96
2.728
102.25%

q10
42.28
42.82
0.539
101.28%

q11
19.58
20.16
0.581
102.97%

q12
27.09
26.88
-0.218
99.19%

q13
47.41
44.35
-3.055
93.56%

q14
16.36
16.22
-0.137
99.16%

q15
27.38
28.70
1.318
104.81%

q16
13.15
13.92
0.776
105.90%

q17
99.03
99.40
0.369
100.37%

q18
147.03
145.71
-1.320
99.10%

q19
12.49
12.60
0.112
100.90%

q20
26.60
26.33
-0.275
98.97%

q21
226.20
225.76
-0.443
99.80%

q22
13.73
13.59
-0.143
98.96%

total
1216.18
1215.24
-0.944
99.92%


How can we perform validation between SQL and BQ for max(date) from a table

How can we perform validation between SQL and BQ for max(date) from a table:
We copy historically ingested data from source(SQL) to Datalake(BQ) during Migration so we dont want to compare this data(it is in millions and billions).
We want to compare the data for a particular date or more precisely max(date) from table. How can we apply this condition during data validation.
data-validation validate row --source-conn MSSQL--target-conn BQ --tables-list = --filter-status fail --primary-keys  -comp-fields  --bq-result-handler

You can do MAX aggregations with column validation like so:
data-validation validate column -sc MSSQL -tc BQ -tbls source=target --filter-status fail -max date_col -bqrh result.table
You can also run sum, min, avg, and more listed here

If you also want to avoid scanning the historic data and only validate newer data you can use the --filters option. Something like:
--filters 'date_column>date'2020-01-01'

@pavannadgoudar Did this answer your question? If so, I can close this issue.

Thanks for the update @pavannadgoudar


Fix seeding error (closes #141)

Fixed seeding error in issue #141
Fixed a MERGE statement in the schema
Updated @neo4j/graphql to 1.0.0

Please accept this pull request! It took me a day to figure out the $reviewDate: Date -> $reviewDate: DateTime fix that I needed to apply. @johnymontana

Thanks, @colinskow!


python3Packages.jaxlib build failure on x86_64-linux as of 74970765

Issue description
Build of python3Packages.jaxlib failed on x86_64-linux as of<PHONE_NUMBER>2f0958d124b5b43afdd45e8285d527. This is currently breaking python3Packages.tensorflow-bin.
error: builder for '/nix/store/k2nzj7l3h21lrb71mgn1w239cng8363s-bazel-build-jaxlib-0.4.16.drv' failed with exit code 1;
       last 10 log lines:
       > [5,450 / 5,454] Linking external/xla/xla/python/xla_extension.so; 7s local ... (2 actions running)
       > ERROR: /build/output/external/xla/xla/python/BUILD:983:21: Linking external/xla/xla/python/xla_extension.so failed: (Exit 1): gcc failed: error executing command (from target @xla//xla/python:xla_extension.so) /nix/store/75slks1wr3b3sxr5advswjzg9lvbv9jc-gcc-wrapper-12.3.0/bin/gcc @bazel-out/k8-opt/bin/external/xla/xla/python/xla_extension.so-2.params
       > collect2: error: ld returned 1 exit status
       > Target //jaxlib/tools:build_wheel failed to build
       > Use --verbose_failures to see the command lines of failed build steps.
       > INFO: Elapsed time: 10555.582s, Critical Path: 144.10s
       > INFO: 5453 processes: 600 internal, 4853 local.
       > FAILED: Build did NOT complete successfully
       > ERROR: Build failed. Not running target
       >
       For full logs, run 'nix log /nix/store/k2nzj7l3h21lrb71mgn1w239cng8363s-bazel-build-jaxlib-0.4.16.drv'.
       note: build failure may have been caused by lack of free disk space
error: 1 dependencies of derivation '/nix/store/h11as5vbxhcijsb4dpb6ixsv5iqm1rm2-python3.10-jaxlib-0.4.16.drv' failed to build
error: 1 dependencies of derivation '/nix/store/kwj817afqhzxhq9j2w69ch05bkfs63sr-python3.10-jax-0.4.16.drv' failed to build
error: 1 dependencies of derivation '/nix/store/4d1x7ng99i5fs67f36ddpw3n1wh7rld8-python3.10-tensorflow-gpu-2.13.0.drv' failed to build

full build log
python3Packages.tensorflow-bin maintainers cc: @jyp @abbradar
python3Packages.jaxlib maintainers cc: @ndl
Other cc: n/a
Steps to reproduce

Checkout nixpkgs at commit<PHONE_NUMBER>2f0958d124b5b43afdd45e8285d527
Run nix-build -A python3Packages.jaxlib

Technical details
 - system: `"x86_64-linux"`
 - host os: `Linux 6.2.0-1011-azure, Ubuntu, 22.04.3 LTS (Jammy Jellyfish), nobuild`
 - multi-user?: `yes`
 - sandbox: `yes`
 - version: `nix-env (Nix) 2.16.1`
 - nixpkgs: `/nix/store/iymjpvi1rhhm66scmrlp5s5qgvkr8gwm-source`

Contents of ~/.config/nixpkgs/config.nix:
{ allowUnfree = true; cudaSupport = true; cudaCapabilities = ["8.0"]; }

Misc.
This issue was automatically generated by nixpkgs-upkeep.

CI workflow that created this issue.
Internal tags: -3129226433644692489 -3779258573431878126

disk space issue


Generate  creative 404 page image with AI

Generate a cool 404  page, Dalle wasnt great for the task

Make all routes, pages and components redirect properly https://nextjs.org/docs/pages/building-your-application/routing/custom-error

@gaboesquivel  @AndlerRL  any info on this ?

Issue solved by @sheriffjimoh on PR #210. Closing.

 Create a Creative 404 Page with AI


removing unused UnauthorizedException

This PR removes the UnauthorizedException, which is no longer used in the framework. I've raised this issue here: https://github.com/laravel/ideas/issues/1047, and it was accepted as a candidate for PR by Taylor.
To summarize:
UnauthorizedException was only used in failedAuthorization method in  Illuminate/Validation/ValidatesWhenResolvedTrait.php. This trait is used only in Illuminate/Foundation/Http/FormRequest.php, which overrides the failedAuthorization method throwing AuthorizationException instead. UnauthorizedException was therefore never thrown by the framework itself, so I don't think we really need it.

Why not target 5.7, even if it not being used directly, packages or app might be using the exception class directly.

You're probably right - it could possibly be a breaking change in some apps. If this rejected, I will move it to 5.7.

Yes, please send to master.


THRIFT-3849

Created a Serializer/Deserializer in dart that mirrors the go version.
@markerickson-wf
@tylertreat-wf
@stevenosborne-wf
@brianshannan-wf
ref: https://issues.apache.org/jira/browse/THRIFT-3849

+1

lgtm

Just a few minor things, but looks good - thanks for adding this and updating the BASE64 encoder.

+1 thanks!

+1


fix lxc test machine

Signed-off-by: Jessica Frazelle<EMAIL_ADDRESS>

Signed-off-by: Jessica Frazelle<EMAIL_ADDRESS>
LOL, this week's e-mail address?

Gotta switch it up

On Jul 30, 2015, at 22:34, Sebastiaan van Stijn<EMAIL_ADDRESS>wrote:
Signed-off-by: Jessica Frazelle<EMAIL_ADDRESS>LOL, this week's e-mail address?
—
Reply to this email directly or view it on GitHub.

LGTM


Frontend Styling

This PR fixes the styling of some parts of the front end.
Affected sections

Tailwind config: The original tailwind config created custom color configs under the wrong config key (extend) meaning tailwind did not properly handle the colors as they were not extensions of pre-existing colors. All custom colors have been moved to the appropriate config key (theme). Provisions have also been made to add the values of each custom color within the App.css file.
App Background: A placeholder app background was introduced and also used as the background of the file popover menu. Said menu's background is no longer transparent
Landing Page: A concept of a landing page was added
Pagination: The style of the pagination section was also updated to be a bit more standard

After images

Landing Page / Overall App background

Pagination section

File popover menu

!! Thank you so much for this contribution! Frontend stuff has been giving me so much headache! I will review it later and merge it then!


Refactor random_test for Capybara

Coverage: 93.673%. Remained the same when pulling 3f56aaffe166b615df44a641faacce04be7b0ba6 on nimmo-refactor-post-observation-test-capybara into 809d88c6bd59ccfd142d0ef4198f24cb3c0cd5f3 on main.


Impl. Tikz export

Impl. a Tikz export for Box-and-Whisker plots. Menu is already available.

Implemented in 0.3


src/core/elements: Show the correct ranking

Show the correct ranking

@JacobLinCool can you review and merge it please?

I believe the accurate ranking is not necessary for large ranks and sometimes make the displayed information too complex.
But I will still merge it and maybe add an option to use the current behavior later.
Thanks for your contribution!

I believe the accurate ranking is not necessary for large ranks and sometimes make the displayed information too complex.
But I will still merge it and maybe add an option to use the current behavior later.
Thanks for your contribution!

thank you for merging.
I have an idea - What about adding a comma in between the numbers?
Like - #123456 looks better when it is #123,456.
I am planning to implement it but sadly i cant start the server. Do you have a Telegram account so that we can discuss on it? My TG username is - @panchajanya1999 on TG too.
Thank You!


Ec2 InstanceExists waiter throws an exception immediately if the instance does not exist

Code that reproduces the issue:
import boto3
import botocore

print('boto3 version:', boto3.__version__)
print('botocore version:', botocore.__version__)

# This is an instance that does not exist
invalid_instance_id = 'i-12345678'

ec2_client = boto3.client('ec2')
waiter = ec2_client.get_waiter('instance_exists')
waiter.wait(InstanceIds=[invalid_instance_id])

(Note that although this is an artificial example with an obviously-fake instance ID, the issue also reproduces occasionally with real instances if the waiter is called immediately after creating the instance.)
Output:
$ python3 repro.py
boto3 version: 1.3.1
botocore version: 1.4.15
Traceback (most recent call last):
  File "repro.py", line 12, in <module>
    waiter.wait(InstanceIds=[invalid_instance_id])
  File "/usr/lib/python3.4/site-packages/botocore/waiter.py", line 53, in wait
    Waiter.wait(self, **kwargs)
  File "/usr/lib/python3.4/site-packages/botocore/waiter.py", line 292, in wait
    if acceptor.matcher_func(response):
  File "/usr/lib/python3.4/site-packages/botocore/waiter.py", line 194, in acceptor_matches
    return expression.search(response) == expected
  File "/usr/lib/python3.4/site-packages/jmespath/parser.py", line 524, in search
    result = interpreter.visit(self.parsed, value)
  File "/usr/lib/python3.4/site-packages/jmespath/visitor.py", line 66, in visit
    return method(node, *args, **kwargs)
  File "/usr/lib/python3.4/site-packages/jmespath/visitor.py", line 114, in visit_comparator
    self.visit(node['children'][0], value),
  File "/usr/lib/python3.4/site-packages/jmespath/visitor.py", line 66, in visit
    return method(node, *args, **kwargs)
  File "/usr/lib/python3.4/site-packages/jmespath/visitor.py", line 129, in visit_function_expression
    return self._functions.call_function(node['value'], resolved_args)
  File "/usr/lib/python3.4/site-packages/jmespath/functions.py", line 89, in call_function
    self._validate_arguments(resolved_args, signature, function_name)
  File "/usr/lib/python3.4/site-packages/jmespath/functions.py", line 100, in _validate_arguments
    return self._type_check(args, signature, function_name)
  File "/usr/lib/python3.4/site-packages/jmespath/functions.py", line 107, in _type_check
    function_name)
  File "/usr/lib/python3.4/site-packages/jmespath/functions.py", line 122, in _type_check_single
    self._convert_to_jmespath_type(actual_typename), types)
jmespath.exceptions.JMESPathTypeError: In function length(), invalid type for value: None, expected one of: ['string', 'array', 'object'], received: "null"

Partial debug logging output (I wasn't sure if the log output could contain sensitive info, hopefully this portion is sufficient):
DEBUG:botocore.endpoint:Sending http request: <PreparedRequest [POST]>
INFO:botocore.vendored.requests.packages.urllib3.connectionpool:Starting new HTTPS connection (1): ec2.us-east-1.amazonaws.com
DEBUG:botocore.vendored.requests.packages.urllib3.connectionpool:"POST / HTTP/1.1" 400 None
DEBUG:botocore.parsers:Response headers: {'nncoection': 'close', 'transfer-encoding': 'chunked', 'date': 'Tue, 03 May 2016 04:53:17 GMT', 'server': 'AmazonEC2'}
DEBUG:botocore.parsers:Response body:
b'<?xml version="1.0" encoding="UTF-8"?>\n<Response><Errors><Error>InvalidInstanceID.NotFound<Message>The instance ID \'i-12345678\' does not exist</Message></Error></Errors><RequestID>67ae3003-e224-4a9e-b429-3d6b4d19ec6f</RequestID></Response>'

I believe the problem is in this acceptor: https://github.com/boto/botocore/blob/develop/botocore/data/ec2/2015-10-01/waiters-2.json#L9
It was changed in https://github.com/boto/botocore/commit/23fd477965e9c1b24f4bef710cc86edc2ef7a75f#diff-7c69e2e0de75f54556bb554dea557950; it used to only look at the response status rather than the response body.
Reverting that change to the JSON fixes the problem in my environment.

Confirmed bug.  Taking a look at your PR now.


on CI devices can't connect to testServer

https://github.com/ThaliTester/TestResults/blob/9124345456e7290_added_logs_vasilevskayaem/test_log.md

Please fix CI!


Fix overview capture on Cloud Provider Firewall doc

The currently rendered document has an error block displayed indicating an overview section is needed.

Direct links to the page modified:

Doc site
Review App

/lgtm
/approve
(that regression might have been my fault anyway -- thanks for fixing)


[Request] PSP: Ookamikakushi

https://vndb.org/v2377
I would just want to read the novel in full screen, I don't really mind about the glossary.
Thank you in advance :)

+1


Implement simple NN

depends on #10 #11 #12
This task is an example project, I want to use to later abstract and reuse in other projects, some aspects can not be replaced but a general structure can be created.
1. Implement mapping between output vector -> object
for example:
Apple: 1 0 0 -> 0
Orange: 0 1 0 -> 1
Banana: 0 0 1 -> 2
2. Implement File readers

Training Data
Validation Data
Test Data

We want to read these file types into a structure like

data_set

input_count
output_count
training_set

inputs
outputs
classes
count
bias

validation_set

inputs
outputs
classes
count
bias

test_set

inputs
outputs
classes
count
bias

3. Implement activation function and it's derivative
Decide on

sigmoid (f(x) = 1/(1+e^(-x)))
hyperbolic tangent (f(x) = (tanh(x)+1)/2)

4. Implement feed format function
Accepts input weight, concatenated input and bias matrix and returns an output-net-matrix
net = mul(weights, horcat(inputs, bias))
output = activate(net)

The bias matrix is a constant column vector of 1s with as many rows as the input matrix. This vector corresponds to the bias nodes. Using this implementation here is a bit clumsy, but for now, the approach reduces the potential for error.
5.Implement a weight initialisation function
This function must take in a maximum weight, a width and height, and return a matrix of the given width and height, randomly initialised in the range [-max_weight max_weight].
6. Implement a function that evaluates the network error
The function must take in:

an input matrix,
a weight matrix,
a target output matrix,
a target class matrix,
a bias matrix.

The function must return the error e, and the classification error c.
[output net] = feedforward(inputs, weights, bias)
error = sum_all_components((target_outputs – outputs)^2)/ (sample_count * output_count)
classes = classes_from_output_vectors(outputs)
c = sum_all_components(classes != target_classes)/sample_count

7. Implement a dummy backpropagation function
The function should take in:

An input matrix
A weight matrix
a learning rate (eta, as in the Greek letter)
a bias vector
The function must return an updated weight matrix. For now, return W as is.

8. Implement the train function
The training function should take in three sets, the training_set, validation_set, and test_set. Implement a way to limit the maximum number of samples that will actually be used for training (you can also do his in the main program described in the next section). This is very helpful for debugging purposes (especially if you plan to later replace the backpropagation algorithm with something a little faster – and more complicated).
The function should return a weight matrix, and error values as floats.
Initialise a value plot_graphs to true. This is a debug flag, so it is appropriate to implement this as a macro if it is supported by the implementation language.
The function should initialise a weight matrix using initialise weights. For now, use a max_weight of 1/2.
The function should also construct three bias vectors bias_training, bias_validate, and bias_test. Each must contain only 1s, with as many rows as there are inputs in the training, validation and test sets respectively.
Implement a while loop that stops after 500 iterations. (We will change the while condition later to something else, so do not use a for loop).
Inside the loop, call the backpropagation algorithm. Use the training set inputs, the weights, (for now) a fixed learning rate of 0.1, and bias vector bias_train. Assign the result to weights.
Still inside the loop, call the network error function three times: one time for each of the training, validation, and test sets. Use the weight matrix, and the appropriate bias vector. Wrap these calls in an if-statement that tests for a value plot_graphs. (If your language supports it, you can use conditional compilation on the value of plot_graphs).
Store the errors in six arrays (error_train, classification_error_train, etc.), with the current epoch number as index.
After the loop, plot the six error arrays as a function of epoch number. Wrap this in an if-statement (or conditional compilation statement) that tests for the value plot_graphs.
Call the network error function again, on all three sets as before.
Return the weights, and the six errors.
9. Implement the main training program
The program should load in the sets (using the load_sets function), and pass these to the training algorithm.
10. Run the program
The important thing is that everything should run. You should see your error plots; at this stage they should be straight, horizontal lines. Because of the random weight initialisation, we cannot predict where these lines will lie (so do not be alarmed if they do not look exactly the same as below – as long as they are straight and horizontal).
11. Implement the backpropagation function
You have already created the dummy function; now you can put in the actual calculations.
First, select a random sample.
Now, calculate the net matrix and output matrix using the feed-forward function.
[output, net] = feedforward(random_sample, weights, bias)
error_vector = target_outputs - outputs
delta = hammard(error_vector, activation_diff(net))
weights_delta = scalar_mul(eta, kronecker(transpose(outputs), delta))
weights = add(weights, weights_delta)

and return the matrix.
12. Run the program (AGAIN)
First, set the debug option to train on only one sample.
13. Implement a proper stopping condition
Change the while loop to stop when the validation error drops below a threshold. Note that this threshold usually depends on the problem. There are better stopping conditions that are less sensitive to the problem at hand, but this one will do for now.
14. Implement a statistical analysis
This part is important for you to get an idea of the robustness of the neural net. In practice, a very simple analysis will suffice.
This part need to train the algorithm 30 times, and then report the mean, standard deviation and maximum of the

training time,
regression error, and
classification error (on the test sets).

In general, you would like all these values to be “low”. Here are some experiments for the iris data set with different learning rates. For each, 30 runs were made; other parameters are as described earlier (max_weight = 1/2, validation_stop_threshold = 0.1).

More classifier example datasets: ftp://ftp.ira.uka.de/pub/neuron/


attribution typescript error

Using the example from the README.md
import {onCLS, onFID, onLCP} from 'web-vitals/attribution';

function sendToGoogleAnalytics({name, delta, value, id, attribution}) {
  const eventParams = {
    // Built-in params:
    value: delta, // Use `delta` so the value can be summed.
    // Custom params:
    metric_id: id, // Needed to aggregate events.
    metric_value: value, // Optional.
    metric_delta: delta, // Optional.
  };

  switch (name) {
    case 'CLS':
      eventParams.debug_target = attribution.largestShiftTarget;
      break;
    case 'FID':
      eventParams.debug_target = attribution.eventTarget;
      break;
    case 'LCP':
      eventParams.debug_target = attribution.element;
      break;
  }

  // Assumes the global `gtag()` function exists, see:
  // https://developers.google.com/analytics/devguides/collection/ga4
  gtag('event', name, eventParams);
}

onCLS(sendToGoogleAnalytics);
onFID(sendToGoogleAnalytics);
onLCP(sendToGoogleAnalytics);

Generates a typescript error:
Argument of type '({ name, delta, value, id, attribution }: { name: any; delta: any; value: any; id: any; attribution: any; }) => void' is not assignable to parameter of type 'CLSReportCallbackWithAttribution'.
  Types of parameters '__0' and 'metric' are incompatible.
    Property 'attribution' is missing in type 'CLSMetric' but required in type '{ name: any; delta: any; value: any; id: any; attribution: any; }'.

It seems the function still thinks it's a CLSMetric and not a CLSMetricWithAttribution

I can't repeat this. Can you give steps as to how you are seeing this?

Oh I can repeat this when adding a file directly to the src directory. You should be importing the built files not the source files.

I'm also running into this problem. Reduced test case:
import * as WebVitals from 'web-vitals/attribution';
WebVitals.onCLS((x) => {
  /*
  Property 'attribution' does not exist on type 'CLSMetricWithAttribution | CLSMetric | Metric'.
    Property 'attribution' does not exist on type 'CLSMetric'.
  */
  x.attribution;
});

The problematic code is here: https://github.com/GoogleChrome/web-vitals/blob/64f133590fcac72c1bc042bf7b4ab729d7e03316/src/types/cls.ts#L86
We need to remove extends CLSReportCallback, otherwise TypeScript will create a union of functions. Reduced test case to illustrate this:
interface A {
  (x: { a: number }): void;
}
interface B extends A {
  (x: { b: number }): void;
}
const foo: B = (param) => {
  param;
  // { a: number; } | { b: number; }
};

But CLSReportCallbackWithAttribution does extend CLSReportCallback - it doesn't redefine all the properties defined in CLSReportCallback. Without that extends we miss these :
https://github.com/GoogleChrome/web-vitals/blob/64f133590fcac72c1bc042bf7b4ab729d7e03316/src/types/cls.ts#L22-L26
Or we could repeat them in CLSReportCallbackWithAttribution but seems less than ideal.
The below works to remove the error, but not sure if that's the best way of doing this:
import {
  onCLS,
  onFCP,
  onFID,
  onLCP,
  onTTFB,
  onINP,
} from 'web-vitals/dist/web-vitals.attribution';

The below works to remove the error:

That doesn't help:
import { onCLS } from 'web-vitals/attribution';
onCLS((x) => {
  /*
  Property 'attribution' does not exist on type 'CLSMetricWithAttribution | CLSMetric | Metric'.
    Property 'attribution' does not exist on type 'CLSMetric'.
  */
  x.attribution;
});

Without that extends we miss these :

I think those properties will still exist, because they come from a different extends (CLSMetricWithAttribution extends CLSMetric).

No that doesn't seem to work as it fails to build:
src/attribution/onCLS.ts:42:10 - error TS2352: Conversion of type 'CLSMetric' to type 'CLSMetricWithAttribution' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.
  Property 'attribution' is missing in type 'CLSMetric' but required in type 'CLSMetricWithAttribution'.

42         (metric as CLSMetricWithAttribution).attribution = {
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  src/types/cls.ts:73:3
    73   attribution: CLSAttribution;
         ~~~~~~~~~~~
    'attribution' is declared here.

Hmmm not sure what is going on here.
BTW this does work, but seems a little messy:
import { onCLS } from 'web-vitals/dist/web-vitals.attribution';

I don't know why this doesn't as it's basically the same thing:
import { onCLS } from 'web-vitals/attribution';

BTW this does work, but seems a little messy:
import { onCLS } from 'web-vitals/dist/web-vitals.attribution';

That doesn't work for me:
Could not find a declaration file for module 'web-vitals/dist/web-vitals.attribution'.

I'm testing this in a fresh project.

No that doesn't seem to work as it fails to build:

On master, I applied this patch and npm run build:ts completes successfully:
diff --git a/src/attribution/onCLS.ts b/src/attribution/onCLS.ts
index 0e62a7d..2aa951a 100644
--- a/src/attribution/onCLS.ts
+++ b/src/attribution/onCLS.ts
@@ -83,7 +83,7 @@ export const onCLS = (
   unattributedOnCLS(
     ((metric: CLSMetric) => {
       attributeCLS(metric);
-      onReport(metric);
+      onReport(metric as CLSMetricWithAttribution);
     }) as CLSReportCallback,
     opts
   );
diff --git a/src/types/cls.ts b/src/types/cls.ts
index 58dbce3..11ec632 100644
--- a/src/types/cls.ts
+++ b/src/types/cls.ts
@@ -83,6 +83,6 @@ export interface CLSReportCallback extends ReportCallback {
 /**
  * A CLS-specific version of the ReportCallback function with attribution.
  */
-export interface CLSReportCallbackWithAttribution extends CLSReportCallback {
+export interface CLSReportCallbackWithAttribution {
   (metric: CLSMetricWithAttribution): void;
 }

I'm not sure if the type assertion is safe though.

#348 seems to fix it in a better way I think. You can test it with: npm install web-vitals@next

It looks like src/attribution/onCLS.ts specifically had an incorrect type which fixes the onCLS((x) => { x.attribution; }); issue.
But a bigger fix was also needed for all the metrics for a onCLS(callAFunction) call.

Amazing, thank you!

Note: I upgraded to 3.3.2 but I'm still facing type errors. See https://github.com/GoogleChrome/web-vitals/issues/351.

Oh I can repeat this when adding a file directly to the src directory. You should be importing the built files not the source files.


Apps changes

[x] Compound: replace the wrong label for 0x token.
[x] Compound: add support for USDT token
[x] TX-Builder: Add title and subtitle

I think there was a misunderstanding. The token has the ticker ZRX not ZXR.

that's right, sorry, let me fix it.

@lukasschor fixed!


rough in the rest of pipeline crud

The rest of pipeline crud is mostly roughed in.
I think I've got all the complex validation scenarios covered in including various arg things like ranges and numbers.

I've added an error and success toast. It has a few glitches that still need to be worked out.

I still need to wire up step deletion and re-ordering.

Woohoo!! Looks great!


Colab Questions

Thank you so much for sharing the this!
Forgive me, because I'm not super technical but I was hoping you could walk me through how to use the Colab notebook to test my own image sequence.  When I "run all" in Colab it shows a single output comparison jpeg.  Does it save the entire deblurred image sequence anywhere?  All I can see are the input images when I search the folder structure.  How would I deblur and entire image sequence and save the resulting images?  Thanks in advance!

If you want to output all frames, you should add a FOR-LOOP in Sec.4 of the Colab Notebook. Just like the following:
for i, batch_data in enumerate(frames_data):
    out = model(batch_data["input_frames"].unsqueeze(0).cuda())
    out = out.clamp(0, 1)
    # save the output
    ...

You also need to implement saving the output frames.

Awesome!  Thanks so much for your help.  So is that what the full text of Sec.4 should look like, or would that snippet be pasted in after a certain line in the existing text.  How would one implement the "saving the output frames" aspect of this?  Also what would I change if I want to try the ESTRNN model instead of the DBN model?  Thanks again!

I would also like to know how to save the output frames.

Yep, I will update the notebook with saving the output frames soon!


Add RTD for 3rd party docs

@smn could you review this and let me know if I've wrangled it right?

:+1:


hnix.cabal lacks listing for EvalTests.hs

As a result the test suite fails, as seen in this nix build log.

Done.


Fix awesome-lint CI workflow in general and current violations in particular

use awesome-lint directly instead of deprecated<EMAIL_ADDRESS>to make CI work in general again
add punctuation (full stop) in line 234 of README to fix current style violations pointed out by awesome-lint

/cc @sdras very small PR that just fixes CI pipeline and current linting violations to unblock all other PRs in awesome-actions 😊


MapView occupies whole react-native-cardview space

Is this a bug report?
Yes

Have you read the Installation Instructions?
Yes
Environment

Steps to Reproduce
I was using react-native-maps to display google maps in my app. The layout hirarchy was as below:

CardView from 'react-native-cardview' ==> style={cardviewContainer}
|- View from 'react-native' ==> style={defaultContainerStyle}
|- View from 'react-native'  ==> header
|- View from 'react-native' ==> style={mapContainer}
|- MapView from 'react-native-maps' [provider='google'] ==> style={map}

Styles:
mapContainer: {
marginLeft: -20,
marginRight: -20,
marginTop: 20,
marginBottom: -20,
height: 300,
}
map: {
...StyleSheet.absoluteFillObject,
}
defaultContainerStyle: {
padding: 20,
paddingTop: 25,
paddingBottom: 25,
}
cardviewContainer: {
backgroundColor: '#fff',
marginLeft: -2,
marginRight: -2,
marginBottom: 10,
}
With above components and their cards map was rendering within required area.
But, when I changed same above configuration with below, the OSM map accoupies whole CardView area. Here the problem is the Card header is not displayed/overlapped by map.

CardView from 'react-native-cardview' ==> style={cardviewContainer}
|- View from 'react-native' ==> style={defaultContainerStyle}
|- View from 'react-native'  ==> header
|- View from 'react-native' ==> style={mapContainer}
|- MapView from 'react-native-maps-osmdroid' [provider=PROVIDER_OSMDROID] ==> style={map}

Expected Behavior

Actual Behavior
"Some header" and Icon is overlapped here.

Reproducible Demo
SampleGoogleMapApp.zip

SampleOSMDroidMapApp.zip

Yes, I noticed that before on some containers views. I did not have the time to debug that yet, but I guess it is related to how react-native merge multiple empty "Views" in a single native view.
No time to fix this right now, though.

Hi all,
Any solution for this bug?
Best Regards

Yes, a workaroud! :)
I just used CardView (instead of View) inside CardView as below:
CardView from 'react-native-cardview' ==> style={cardviewContainer}
|- View from 'react-native' ==> style={defaultContainerStyle}
|- View from 'react-native' ==> header
|- CardView from 'react-native' ==> style={mapContainer}
|- MapView from 'react-native-maps-osmdroid' [provider=PROVIDER_OSMDROID] ==> style={map}

Hi all,
Working for me too.
Thank you @san37puj
Best Regards,

wrapping in ScrollView also helped


Upgrade Subtitles.app to v2.2

This application is no more free. Don't know where to report it or if report at all. I use Subtitle-master instead.


Update s2n_hmac_digest_two_compression_rounds to operate on a copy of the hash state

Fix for https://github.com/awslabs/s2n/issues/634

This was reverted in #636  . An issue was being suppressed by a bug in our build scripts. I think we'll see the failure in this PR if you rebase onto latest master.


[ Feature ] : Credential Directory

Directory that can fetch and list cred files

Further files will be added as progress is made. To me marked as ready one fully realized

w/ 4d72877 Being completed, the general GUI is mostly ready. Backend stuff is still not done, but that will be the main focus of the following updates to #44 , merging this into the Pipeline branch for now, Next Pipeline merge will be once backend are working and directory setup is complete.

DUDE THE BOTS ARE FIGHTING

Bot rampage has ended