(Material3) Cannot Theme FilledButton and FilledButton.tonal Variants Separately

Not possible to theme FilledButton and FilledButton.tonal separately
The new Material 3 buttons FilledButton and FilledButton.tonal cannot be themed separately to use different styles from each other.
This is in conflict with their default themes where these buttons can use different styles and do look different. However, if you use FilledButtonThemeData in ThemeData to try to style the buttons, both variants will become identical since they share the same FilledButtonThemeData. This effectively renders theming of the FilledButton less usable, since e.g. theming its color properties makes the variants look identical.
Background - Variant themes
This is another case of where having variant themes would be useful. This was discussed here with @darrenaustin, including a solution proposal by Darren. Other example cases with similar theme variant challenges are e.g. https://github.com/flutter/flutter/issues/115827 and https://github.com/flutter/flutter/issues/108539.
Actual and Expected results
Expected to be able to theme the FilledButton and FilledButton.tonal with different styles, since their default themes also have and use different styles.

Custom Themed
Default Themed

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 M3 ColorScheme.
const Color seedColor = Color(0xff386a20);

// Example theme
ThemeData demoTheme(Brightness mode, bool useFilledButtonTheme) {
  // Make an M3 ColorScheme.from seed
  final ColorScheme scheme = ColorScheme.fromSeed(
    brightness: mode,
    seedColor: seedColor,
  );
  return ThemeData(
    colorScheme: scheme,
    useMaterial3: true,
    filledButtonTheme: useFilledButtonTheme
        ? filledButtonTheme(
            disabledColor: scheme.onSurface,
            foregroundColor: scheme.onTertiaryContainer,
            backgroundColor: scheme.tertiaryContainer,
            radius: 10,
          )
        : null,
  );
}

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

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

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

class _IssueDemoAppState extends State<IssueDemoApp> {
  bool useFilledButtonTheme = true;
  ThemeMode themeMode = ThemeMode.light;
  TextDirection textDirection = TextDirection.ltr;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      themeMode: themeMode,
      theme: demoTheme(Brightness.light, useFilledButtonTheme),
      darkTheme: demoTheme(Brightness.dark, useFilledButtonTheme),
      home: Scaffold(
        appBar: AppBar(
          title: const Text('FilledButton Theming Issue'),
          actions: [
            IconButton(
              icon: useFilledButtonTheme
                  ? const Icon(Icons.palette)
                  : const Icon(Icons.palette_outlined),
              onPressed: () {
                setState(() {
                  useFilledButtonTheme = !useFilledButtonTheme;
                });
              },
              tooltip: useFilledButtonTheme
                  ? 'Remove FilledButton Theme'
                  : 'Apply FilledButton Theme',
            ),
            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",
            ),
            Builder(builder: (context) {
              return IconButton(
                icon: const Icon(Icons.menu),
                onPressed: () {
                  Scaffold.of(context).openEndDrawer();
                },
              );
            }),
          ],
        ),
        body: HomePage(useFilledButtonTheme: useFilledButtonTheme),
        drawer: const Drawer(
          child: Center(child: Text('Drawer')),
        ),
        endDrawer: const Drawer(
          child: Center(child: Text('End Drawer')),
        ),
      ),
    );
  }
}

class HomePage extends StatelessWidget {
  const HomePage({super.key, required this.useFilledButtonTheme});
  final bool useFilledButtonTheme;

  @override
  Widget build(BuildContext context) {
    final String filledTheme =
        useFilledButtonTheme ? 'Custom theme used' : 'Default null theme';
    return ListView(
      padding: const EdgeInsets.symmetric(horizontal: 16),
      children: [
        const SizedBox(height: 8),
        Text(
          'Issue Demo - Material 3',
          style: Theme.of(context).textTheme.headlineSmall,
        ),
        const SizedBox(height: 16),
        Text('FilledButtonTheme: $filledTheme'),
        const SizedBox(height: 8),
        const Text(
          'Cannot theme FilledButton and FilledButton.tonal independently. '
          'If e.g. colors and border radius are applied to '
          'FilledButtonThemeData, both FilledButton and FilledButton.tonal '
          'receive the same style and look identical.\n\n'
          'EXPECT: To be able to theme FilledButton variants separately!',
        ),
        const SizedBox(height: 16),
        const Text('Themed FilledButton'),
        const FilledButtonShowcase(),
        const SizedBox(height: 16),
        const Text('Themed FilledButton.tonal'),
        const FilledButtonTonalShowcase(),
        const SizedBox(height: 16),
        const ShowColorSchemeColors(),
      ],
    );
  }
}

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

  @override
  Widget build(BuildContext context) {
    return Wrap(
      crossAxisAlignment: WrapCrossAlignment.center,
      spacing: 8,
      runSpacing: 8,
      children: <Widget>[
        FilledButton(
          onPressed: () {},
          child: const Text('Filled button'),
        ),
        FilledButton.icon(
          onPressed: () {},
          icon: const Icon(Icons.add),
          label: const Text('Filled icon'),
        ),
        const FilledButton(
          onPressed: null,
          child: Text('Filled button'),
        ),
      ],
    );
  }
}

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

  @override
  Widget build(BuildContext context) {
    return Wrap(
      crossAxisAlignment: WrapCrossAlignment.center,
      spacing: 8,
      runSpacing: 8,
      children: <Widget>[
        FilledButton.tonal(
          onPressed: () {},
          child: const Text('Filled tonal button'),
        ),
        FilledButton.tonalIcon(
          onPressed: () {},
          icon: const Icon(Icons.add),
          label: const Text('Filled tonal icon'),
        ),
        const FilledButton.tonal(
          onPressed: null,
          child: Text('Filled tonal button'),
        ),
      ],
    );
  }
}

/// An opinionated [FilledButtonThemeData] theme.
FilledButtonThemeData filledButtonTheme({
  /// The foreground of the FilledButton.
  required final Color foregroundColor,

  /// The background of the FilledButton.
  required final Color backgroundColor,

  /// The disabled base of the FilledButton.
  required final Color disabledColor,

  /// The button corner radius.
  final double? radius,
}) {
  final MaterialStateProperty<Color?> bgColor =
      MaterialStateProperty.resolveWith((Set<MaterialState> states) {
    if (states.contains(MaterialState.disabled)) {
      return disabledColor.withOpacity(0.12);
    }
    return backgroundColor;
  });

  final MaterialStateProperty<Color?> fgColor =
      MaterialStateProperty.resolveWith((Set<MaterialState> states) {
    if (states.contains(MaterialState.disabled)) {
      return disabledColor.withOpacity(0.38);
    }
    return foregroundColor;
  });

  final MaterialStateProperty<Color?> overlayColor =
      MaterialStateProperty.resolveWith((Set<MaterialState> states) {
    if (states.contains(MaterialState.hovered)) {
      return backgroundColor.withOpacity(0.08);
    }
    if (states.contains(MaterialState.focused)) {
      return backgroundColor.withOpacity(0.12);
    }
    if (states.contains(MaterialState.pressed)) {
      return backgroundColor.withOpacity(0.12);
    }
    return null;
  });

  return FilledButtonThemeData(
    style: ButtonStyle(
      foregroundColor: fgColor,
      backgroundColor: bgColor,
      overlayColor: overlayColor,
      shape: radius == null
          ? null
          : ButtonStyleButton.allOrNull<OutlinedBorder>(
              RoundedRectangleBorder(
                borderRadius: BorderRadius.all(
                  Radius.circular(radius),
                ),
              ),
            ),
    ),
  );
// }
}

/// 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: theme.dividerColor,
          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: theme.dividerColor,
          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 in ambient themed border radius.
    return Theme(
      data: Theme.of(context).copyWith(
        cardTheme: CardTheme.of(context).copyWith(
          elevation: 0,
          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-14.0.pre.42,

Flutter doctor
 flutter doctor -v
[!] Flutter (Channel master, 3.7.0-14.0.pre.42, on macOS 13.0.1 22A400 darwin-arm64, locale en-US)
    • Flutter version 3.7.0-14.0.pre.42 on channel master at /Users/rydmike/fvm/versions/master
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 7a5ae7cfc4 (7 hours ago), 2023-01-05 10:43:15 -0500
    • Engine revision a01548f5fa
    • Dart version 3.0.0 (build 3.0.0-85.0.dev)
    • DevTools version 2.20.0
    • 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/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.13+0-b1751.21-8125866)
    • 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 2021.3)
    • 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.13+0-b1751.21-8125866)

[✓] IntelliJ IDEA Community Edition (version 2022.3.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 71.2.6
    • Dart plugin version 223.8214.16

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

[✓] Connected device (2 available)
    • macOS (desktop) • macos  • darwin-arm64   • macOS 13.0.1 22A400 darwin-arm64
    • Chrome (web)    • chrome • web-javascript • Google Chrome 108.0.5359.124

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

Triage report
Hello @rydmike. Thank you for the detailed bug report. I can reproduce this issue on Master (3.7.0-14.0.pre.52).

Code Sample (Same as OP)
// 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 M3 ColorScheme.
const Color seedColor = Color(0xff386a20);

// Example theme
ThemeData demoTheme(Brightness mode, bool useFilledButtonTheme) {
  // Make an M3 ColorScheme.from seed
  final ColorScheme scheme = ColorScheme.fromSeed(
    brightness: mode,
    seedColor: seedColor,
  );
  return ThemeData(
    colorScheme: scheme,
    useMaterial3: true,
    filledButtonTheme: useFilledButtonTheme
        ? filledButtonTheme(
            disabledColor: scheme.onSurface,
            foregroundColor: scheme.onTertiaryContainer,
            backgroundColor: scheme.tertiaryContainer,
            radius: 10,
          )
        : null,
  );
}

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

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

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

class _IssueDemoAppState extends State<IssueDemoApp> {
  bool useFilledButtonTheme = true;
  ThemeMode themeMode = ThemeMode.light;
  TextDirection textDirection = TextDirection.ltr;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      themeMode: themeMode,
      theme: demoTheme(Brightness.light, useFilledButtonTheme),
      darkTheme: demoTheme(Brightness.dark, useFilledButtonTheme),
      home: Scaffold(
        appBar: AppBar(
          title: const Text('FilledButton Theming Issue'),
          actions: [
            IconButton(
              icon: useFilledButtonTheme
                  ? const Icon(Icons.palette)
                  : const Icon(Icons.palette_outlined),
              onPressed: () {
                setState(() {
                  useFilledButtonTheme = !useFilledButtonTheme;
                });
              },
              tooltip: useFilledButtonTheme
                  ? 'Remove FilledButton Theme'
                  : 'Apply FilledButton Theme',
            ),
            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",
            ),
            Builder(builder: (context) {
              return IconButton(
                icon: const Icon(Icons.menu),
                onPressed: () {
                  Scaffold.of(context).openEndDrawer();
                },
              );
            }),
          ],
        ),
        body: HomePage(useFilledButtonTheme: useFilledButtonTheme),
        drawer: const Drawer(
          child: Center(child: Text('Drawer')),
        ),
        endDrawer: const Drawer(
          child: Center(child: Text('End Drawer')),
        ),
      ),
    );
  }
}

class HomePage extends StatelessWidget {
  const HomePage({super.key, required this.useFilledButtonTheme});
  final bool useFilledButtonTheme;

  @override
  Widget build(BuildContext context) {
    final String filledTheme =
        useFilledButtonTheme ? 'Custom theme used' : 'Default null theme';
    return ListView(
      padding: const EdgeInsets.symmetric(horizontal: 16),
      children: [
        const SizedBox(height: 8),
        Text(
          'Issue Demo - Material 3',
          style: Theme.of(context).textTheme.headlineSmall,
        ),
        const SizedBox(height: 16),
        Text('FilledButtonTheme: $filledTheme'),
        const SizedBox(height: 8),
        const Text(
          'Cannot theme FilledButton and FilledButton.tonal independently. '
          'If e.g. colors and border radius are applied to '
          'FilledButtonThemeData, both FilledButton and FilledButton.tonal '
          'receive the same style and look identical.\n\n'
          'EXPECT: To be able to theme FilledButton variants separately!',
        ),
        const SizedBox(height: 16),
        const Text('Themed FilledButton'),
        const FilledButtonShowcase(),
        const SizedBox(height: 16),
        const Text('Themed FilledButton.tonal'),
        const FilledButtonTonalShowcase(),
        const SizedBox(height: 16),
        const ShowColorSchemeColors(),
      ],
    );
  }
}

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

  @override
  Widget build(BuildContext context) {
    return Wrap(
      crossAxisAlignment: WrapCrossAlignment.center,
      spacing: 8,
      runSpacing: 8,
      children: <Widget>[
        FilledButton(
          onPressed: () {},
          child: const Text('Filled button'),
        ),
        FilledButton.icon(
          onPressed: () {},
          icon: const Icon(Icons.add),
          label: const Text('Filled icon'),
        ),
        const FilledButton(
          onPressed: null,
          child: Text('Filled button'),
        ),
      ],
    );
  }
}

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

  @override
  Widget build(BuildContext context) {
    return Wrap(
      crossAxisAlignment: WrapCrossAlignment.center,
      spacing: 8,
      runSpacing: 8,
      children: <Widget>[
        FilledButton.tonal(
          onPressed: () {},
          child: const Text('Filled tonal button'),
        ),
        FilledButton.tonalIcon(
          onPressed: () {},
          icon: const Icon(Icons.add),
          label: const Text('Filled tonal icon'),
        ),
        const FilledButton.tonal(
          onPressed: null,
          child: Text('Filled tonal button'),
        ),
      ],
    );
  }
}

/// An opinionated [FilledButtonThemeData] theme.
FilledButtonThemeData filledButtonTheme({
  /// The foreground of the FilledButton.
  required final Color foregroundColor,

  /// The background of the FilledButton.
  required final Color backgroundColor,

  /// The disabled base of the FilledButton.
  required final Color disabledColor,

  /// The button corner radius.
  final double? radius,
}) {
  final MaterialStateProperty<Color?> bgColor =
      MaterialStateProperty.resolveWith((Set<MaterialState> states) {
    if (states.contains(MaterialState.disabled)) {
      return disabledColor.withOpacity(0.12);
    }
    return backgroundColor;
  });

  final MaterialStateProperty<Color?> fgColor =
      MaterialStateProperty.resolveWith((Set<MaterialState> states) {
    if (states.contains(MaterialState.disabled)) {
      return disabledColor.withOpacity(0.38);
    }
    return foregroundColor;
  });

  final MaterialStateProperty<Color?> overlayColor =
      MaterialStateProperty.resolveWith((Set<MaterialState> states) {
    if (states.contains(MaterialState.hovered)) {
      return backgroundColor.withOpacity(0.08);
    }
    if (states.contains(MaterialState.focused)) {
      return backgroundColor.withOpacity(0.12);
    }
    if (states.contains(MaterialState.pressed)) {
      return backgroundColor.withOpacity(0.12);
    }
    return null;
  });

  return FilledButtonThemeData(
    style: ButtonStyle(
      foregroundColor: fgColor,
      backgroundColor: bgColor,
      overlayColor: overlayColor,
      shape: radius == null
          ? null
          : ButtonStyleButton.allOrNull<OutlinedBorder>(
              RoundedRectangleBorder(
                borderRadius: BorderRadius.all(
                  Radius.circular(radius),
                ),
              ),
            ),
    ),
  );
// }
}

/// 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: theme.dividerColor,
          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: theme.dividerColor,
          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 in ambient themed border radius.
    return Theme(
      data: Theme.of(context).copyWith(
        cardTheme: CardTheme.of(context).copyWith(
          elevation: 0,
          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,
          ),
        ),
      ),
    );
  }
}

flutter doctor -v (Master)
[!] Flutter (Channel master, 3.7.0-14.0.pre.52, on macOS 13.0.1 22A400 darwin-arm64, locale en-US)
    • Flutter version 3.7.0-14.0.pre.52 on channel master at /Users/nabeelparkar/fvm/versions/master
    ! Warning: `dart` on your path resolves to /opt/homebrew/Cellar/dart/2.18.6/libexec/bin/dart, which is not inside your current Flutter SDK checkout at /Users/nabeelparkar/fvm/versions/master. Consider adding /Users/nabeelparkar/fvm/versions/master/bin to the front of your path.
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 507062032f (6 hours ago), 2023-01-06 01:13:18 +0100
    • Engine revision 5bd90d6e77
    • Dart version 3.0.0 (build 3.0.0-85.0.dev)
    • DevTools version 2.20.0
    • 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/nabeelparkar/Library/Android/sdk/
    • Platform android-33, build-tools 33.0.0
    • ANDROID_SDK_ROOT = /Users/nabeelparkar/Library/Android/sdk/
    • Java binary at: /Users/nabeelparkar/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/213.7172.25.2113.9123335/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.13+0-b1751.21-8125866)
    • 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_EXECUTABLE = /Applications/Brave Browser.app/Contents/MacOS/Brave Browser

[✓] Android Studio (version 2021.3)
    • Android Studio at /Users/nabeelparkar/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/213.7172.25.2113.9123335/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.13+0-b1751.21-8125866)

[✓] IntelliJ IDEA Ultimate Edition (version 2022.3.1)
    • IntelliJ at /Users/nabeelparkar/Applications/JetBrains Toolbox/IntelliJ IDEA Ultimate.app
    • Flutter plugin version 71.2.6
    • Dart plugin version 223.8214.16

[✓] IntelliJ IDEA Ultimate Edition (version 2022.3.1)
    • IntelliJ at /Users/nabeelparkar/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/223.8214.52/IntelliJ IDEA.app
    • 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

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

[✓] Connected device (3 available)
    • sdk gphone64 arm64 (mobile) • emulator-5554 • android-arm64  • Android 13 (API 33) (emulator)
    • macOS (desktop)             • macos         • darwin-arm64   • macOS 13.0.1 22A400 darwin-arm64
    • Chrome (web)                • chrome        • web-javascript • Brave Browser <IP_ADDRESS>

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

! Doctor found issues in 1 category.

I think the leading and trailing padding might also be wrong. I've only tried the FilledButton.tonalIcon constructor so far, but the padding is too small compared to the specs, it should be leading 16.0 and trailing 24.0.

Would be important also for our project to fix the issue

Any updates on this or recommendations for a workaround?

@JonasJW there is no work-around based on only theming. The only thing you can do is create your own wrapper for FilledButton and FilledButton.tonal that uses other color mapping from the theme's ColorScheme or other colors eg in a theme extensions.
But of course, then you are back to using custom components, that devs on the team needs to know about and use the right one when so called for, instead of using theme's and just let it do all the required styling.
As soon as you start changing colors (also via MaterialState) via themes on FilledButton and FilledButton.tonal they will both look the same and you loose one style. This same annoying variants theming limitation applies to many other other components that also have variant styling that will be lost when a theme is applied.
This is typically because the widgets do internal "magic" when the theme is undefined to create the variants, but as soon as there is a theme, they only do that style and all variants are lost.
Other examples include:

https://github.com/flutter/flutter/issues/107946
https://github.com/flutter/flutter/issues/123829
https://github.com/flutter/flutter/issues/108539
Not yet filed: Search bar and its view, give it a non default border radius and the full screen variant get that radius, when it should really never have a radius, like it does not when a default theme is used, then it only has a default shape in overlay mode, but give it a shape and now both overlay and full-screen use that shape, very frustrating.

Then there are many other sad limitations where themes just do not expose needed props to theme be able things, here are some examples:

https://github.com/flutter/flutter/issues/131690
https://github.com/flutter/flutter/issues/131478

@rydmike thanks for the extensive summary! What you describe is exactly my problem. I can create my own custom components but even doing so, when I apply my colors, the theme gets messed up.
I would like to have tonal buttons not only in the primary color of the theme but also in different colors, but applying a color will use this specific color and not the tonal version of it.
Another issue is when specifying the background color in the button theme, the foreground color will no longer be dynamic based on the primary color.

A relatively easy fix would be to include the variant in the theme data, for example here:
FilledButtonThemeData({
  style: ButtonStyle,
  tonalStyle: ButtonStyle
});

Would that be an issue? It would resolve the variant problem most of M3 components are facing or am I missing something? 🤔


mria_mnesia:running_nodes() should have a timeout.

mria_node_monitor process may end up stuck if the mria_mnesia:running_nodes function doesn't return in time.

Example of message accumulation when stuck in said multicall (apparently happened after one of the nodes died during a test):


windows support

why does fly cli use shell runner?
gulp use different approach
isnt it bad experience for windows users?

cannot test it right now, waiting for modern.ie to be installed

can verify, that it is kinda working now. "kinda" because it still has errors, but it is another issue

in master

linked branch

reported about node versions in #56 issue

@iamstarkov Hi, could you please try this? https://github.com/flyjs/fly/pull/52#discussion_r35218914

yes, it is working now

The shell runner is going away when 0.4.0 land as we will be supporting more node versions from now.

prefer not to close unfixed issues

@iamstarkov Right. By the way, are you running Windows? Does
#!/usr/bin/env node --harmony

worked for you? I know it works on OSX, but this will fail in some Linuxes.

it works on windows.

If you run node --harmony it will work for sure, but I mean if you pass the --harmony flag to the shebang like bin/index.js does.

@bucaran can you re-open this issue while it’s not fixed?

seems to be working with 0.4.x


hdfs: do some cleanups

There a couple minor changes, as well as the primary one which is under _adjust_entry. In the previous revision (08.01) we called _strip_protocol() for each item returned from the ls(). When I was refactoring this part of the codebase, I unified this logic with info() but then we only started to do it when the 'name' was missing. The primary fix that should resolve #777 is that, now we do it unconditonally on the _adjust_entry if the given entry has any name field at all.

Also CC: @jaedoucette, @j3doucet it would be great if you could test out my branch against your use cases with a real server since I just used the local one.

@j3doucet , will you have the chance to try this?

@martindurant @isidentical I'll have to check with some other folks about whether I can test this code on our system, but hopefully will be able to.

@j3doucet , will you have the chance to try this?

Yes, I will try this out now.

@j3doucet , will you have the chance to try this?

Yes, I will try this out now.

@martindurant @isidentical unfortunately it is much more complex than I expected to run unpublished code on the machines that I can use to access HDFS.
It may take me a day or more to test this. If you have another setup for testing, that may be preferable.

@j3doucet , will you have the chance to try this?

Yes, I will try this out now.

@martindurant @isidentical unfortunately it is much more complex than I expected to run unpublished code on the machines that I can use to access HDFS.
It may take me a day or more to test this. If you have another setup for testing, that may be preferable.

I was able to get a testing setup with a remote HDFS cluster, and verified that get now works as hoped.
I was also able to verify that pandas.read_parquet works as before when called with a directory against this version.
Thanks for the quick turnaround on this. This fix appears to address all the issues we saw.

Thanks for the quick turnaround on this. This fix appears to address all the issues we saw.

Cool to hear that! I'll try to take a look at what you meant with the new test case, then we can hopefully land this.

what you meant with the new test case

I think it was just to confirm that both the previously-working and into-directory writes work, i.e., you have already covered the bases.

If you mean like put_file/get_file with a single file instead of a directory, that is also added now.

Yep, my comment was meant to confirm that all the test cases I was hoping to see were already there. This look to me like it will solve all the issues we were having.

Thank you again for testing it out, and verifying. Also sorry for the inconvenience the initial bug has caused.

@isidentical thanks you for improving fsspec, and for the quick fix! Using this package has simplified so much of the work we do across storage systems.


[Network] az network front-door routing-rule update: support update command

Fix #1159

This checklist is used to make sure that common guidelines for a pull request are followed.

For new extensions:

[ ] My extension description/summary conforms to the Extension Summary Guidelines.

If this PR is for a new extension or change to an existing extension, use the following to try out the changes in this PR:
docker run -it microsoft/azure-cli:latest
export EXT=<NAME>
pip install --upgrade --target ~/.azure/cliextensions/$EXT "git+https://github.com/MyronFanQiu/azure-cli-extensions.git@fix-1159-add-update-command-for-route#subdirectory=src/$EXT&egg=$EXT"

Linter is detecting eror. Please take care of it.

Linter is detecting eror. Please take care of it.

will take a look today.

/azp run Azure.azure-cli-extensions

/azp run Azure.azure-cli-extensions

/azp run Azure.azure-cli-extensions

/azp run Azure.azure-cli-extensions


ARROW-11290: [Rust][DataFusion] Address hash aggregate performance issue with high number of groups

Currently, we loop to the hashmap for every key.
However, as we receive a batch, if we a lot of groups in the group by expression (or receive sorted data, etc.) then we could create a lot of empty batches and call update_batch for each of the key already in the hashmap.
In the PR we keep track of which keys we received in the batch and only update the accumulators with the same keys instead of all accumulators.
On the db-benchmark https://github.com/h2oai/db-benchmark/pull/182 this is the difference (mainly q3 and q5, others seem to be noise). It doesn't seem to completely solve the problem, but it reduces the problem already quite a bit.
This PR:
q1 took 340 ms
q2 took 1768 ms
q3 took 10975 ms
q4 took 337 ms
q5 took 13529 ms

Master:
q1 took 330 ms
q2 took 1648 ms
q3 took 16408 ms
q4 took 335 ms
q5 took 21074 ms

Codecov Report

Merging #9234 (45b23e8) into master (e73f205) will increase coverage by 0.00%.
The diff coverage is 100.00%.

@@           Coverage Diff           @@
##           master    #9234   +/-   ##
=======================================
  Coverage   81.61%   81.62%
=======================================
  Files         215      215
  Lines       51891    51897    +6
=======================================
+ Hits        42353    42359    +6
  Misses       9538     9538

Impacted Files
Coverage Δ

...ust/datafusion/src/physical_plan/hash_aggregate.rs
85.02% <100.00%> (+0.23%)
:arrow_up:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update e73f205...45b23e8. Read the comment docs.

Codecov Report

Merging #9234 (45b23e8) into master (e73f205) will increase coverage by 0.00%.
The diff coverage is 100.00%.

@@           Coverage Diff           @@
##           master    #9234   +/-   ##
=======================================
  Coverage   81.61%   81.62%
=======================================
  Files         215      215
  Lines       51891    51897    +6
=======================================
+ Hits        42353    42359    +6
  Misses       9538     9538

Impacted Files
Coverage Δ

...ust/datafusion/src/physical_plan/hash_aggregate.rs
85.02% <100.00%> (+0.23%)
:arrow_up:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update e73f205...45b23e8. Read the comment docs.

Added a ticket for remaining work including some profiling information here: https://issues.apache.org/jira/browse/ARROW-11300

Added a ticket for remaining work including some profiling information here: https://issues.apache.org/jira/browse/ARROW-11300

I merged this branch locally to master and re-ran all the tests. Things looked good so merging it in.

I merged this branch locally to master and re-ran all the tests. Things looked good so merging it in.


[Menu] TransitionComponent breaks page events

[x] This is a v1.x issue (v0.x is no longer maintained).
[x] I have searched the issues of this repository and believe that this is not a duplicate.

This happens for me on the docs page of Menu https://material-ui.com/demos/menus/#change-transition
Expected Behavior

Scroll and all user events should be restored and work as usual once menu closes.
Current Behavior

Once the menu opens, scroll disappears and buttons dont work (If needed, i can record a small gif to show the clicks)
Steps to Reproduce (for bugs)

Go to https://material-ui.com/demos/menus/#change-transition
Open the menu
Close it

Context

Your Environment

Tech
Version

Material-UI
docs version

React
docs version

browser
Chrome 66 (mac)

etc

p.s
I might have missed the discussion about blocking the scrolling while some popover is open - how can i allow the scrolling and repositioning the open popover (Similar to the demo of Menu in material components)

TransitionComponent breaks page events

It's a duplicate of #11718

how can i allow the scrolling and repositioning the open popover

You can't right now. I thought we already had an issue about it be I can't find it. Maybe you can open an new one.


Introduce tag ff.refer to replace IbisDocRef

This is a very basic implementation. I have the following ideas to extend it:

If there an attribute has a description and ff.refer, then the description found via ff.refer is overwritten by JavaDoc on the method. We may combine the two instead of choosing one. In that case: do we add a separator like <p>?
There are many sources (IbisDoc, IbisDocRef, JavaDoc, ff.refer) of default values and descriptions. There are no warnings if these conflict. Shall I add such warnings?
Shall I add that ff.mandatory or ff.noAttribute on the referred method are applied for the attribute?

Should be @ff.ref.

Codecov Report

Merging #22 (ad092d4) into master (8e32dea) will decrease coverage by 0.05%.
The diff coverage is 63.63%.

@@             Coverage Diff              @@
##             master      #22      +/-   ##
============================================
- Coverage     80.93%   80.87%   -0.06%
- Complexity     1017     1019       +2
============================================
  Files            67       67
  Lines          3635     3645      +10
  Branches        393      397       +4
============================================
+ Hits           2942     2948       +6
- Misses          586      588       +2
- Partials        107      109       +2

Impacted Files
Coverage Δ

.../frankframework/frankdoc/model/FrankAttribute.java
94.44% <ø> (ø)

...g/frankframework/frankdoc/model/FrankDocModel.java
89.85% <63.63%> (-0.57%)
:arrow_down:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 8e32dea...ad092d4. Read the comment docs.


Testing Your Ruby Code - Tic Tac Toe (RSpec)

Here, I did the following:

used the Rspec testing framework
added tests for all methods within the main.rb and player.rb files
ensured that all methods used in the Tic-Tac-Toe game pass

Whoops, my bad -  I didn't notice that I was in the main branch. Thanks, @teekaytech for pointing that out.


Rename modules

rename gptcache/similarity_evaluation/{simple.py => distance.py}
rename gptcache/similarity_evaluation/{string.py => exact_match.py}

new pr: #92


merge master into RCSS_attribute_selector_support branch

need to resolve conflicts

will try to pull from this master branch into RCSS


[BUG] Error when fetching pack comments when on 11th page or later

Describe the bug
After the 10th page of pack comments, the API seems to break and fails to fetch comments. This limits the amount of comments to 100, which is probably not enough in the long run.
To Reproduce
Steps to reproduce the behavior:

Clone the repo(follow steps in README)
In src/dashboard/api-test.ts, change the 50 in line 27 to 101
Run bun devdash
Open the comments for any pack
Move to the next page until you hit the 11th page

Expected behavior
It is expected that for any comment page, the page should load properly.
Actual behavior
After the 10th page, any comment pages fail to load.
Screenshots

Dashboard only - Desktop (please complete the following information):

OS: Windows 11
Browser Chrome
Version 126

The cause of the issue seems to be from line 169 in api-test.ts. Maybe this was left untouched when api/comments/maxpage was added?

Good catch, I believe this used to be a hard limit for testing in the early development days before a proper max page detection was implemented, and I only updated the prod API with it, not the dev.


Popups appear on the left side of the screen instead of the center in Kiosk mode in desktop browsers

Describe the bug
Popups appear on the left side of the screen instead of the center with Kiosk Mode in desktop browsers (Brave, Firefox). When Kiosk Mode is disabled, the popups appear centered.
To Reproduce
kiosk mode:
title: Home
kiosk_mode:
  entity_settings:
    - entity:
        input_boolean.editmode: 'off'
      kiosk: true
    - entity:
        input_boolean.editmode: 'on'
      kiosk: false

bubble card:
type: vertical-stack
cards:
  - type: custom:bubble-card
    card_type: pop-up
    bg_opacity: 20
    shadow_opacity: 10
    bg_blur: '10'
    hash: '#second'
    name: Controls
    is_sidebar_hidden: true
    width_desktop: 1000px
    hide_backdrop: true
    scrolling_effect: false
    card_layout: large
    margin_top_desktop: '-50px'

Additional context
This started happening 2-3 versions ago I think. (I installed several updates in a short period.) There used to be a toggle in the GUI to fix it, but that option is now gone.
I thought I saw something that said Kiosk Mode shouldn't be used with Bubble Card, or that there are better options, but my searches have turned up nothing about this now.

Hi, what toggle are you referencing too?

Hi, what toggle are you referencing too?

The toggle just turns turns on and off kiosk mode. The popups don't center when kiosk mode is enabled.

Oh, I don't remember the name of the toggle. I thought it was something like "Fix ..." and it fixed the menu alignment on desktop. Sorry I don't have more info.

Do you have this issue if you create a new pop-up?

Do you have this issue if you create a new pop-up?

Yes, I just tried.

Hi again, I've just released a new beta and I've found some issues related to the pop-ups, with some luck it will fix this issue 🤞 Keep me informed 🙂
https://github.com/Clooos/Bubble-Card/releases/tag/v2.0.0-beta.12

No change. Are you able to replicate the issue?

https://github.com/NemesisRE/kiosk-mode

I've tested it, can you try to add this in a pop-up custom style?
@media only screen and (min-width: 768px) {
    .bubble-pop-up {
      left: inherit !important;
    }
}

I've tested it, can you try to add this in a pop-up custom style?
@media only screen and (min-width: 600px) {
  .bubble-pop-up {
    left: calc(50% - (var(--desktop-width, 540px) / 2)) !important;
  }
}

That works! Are you going to make this a part of Bubble card, or should I add it to all my cards manually?

I'm looking for a way to makes this automatic when hide_sidebar: true is detected. If I don't find a way I will add an option in the editor.
This is probably the last issue I will fix before releasing the v2 final 🥳

I've found the best way to fix that and this will be the official fix for the kiosk mode users.
First for your kiosk mode config, remove hide_sidebard: true or kiosk: true and just keep that under kiosk_mode:
kiosk_mode:
  hide_header: true

Then go to your HA profile configuration then toggle this:

This will now works as expected and you can remove the custom style I've sent previously.

That does seem to work for me.

Someone on the HA forum has confirmed that it was working, are you sure that you have followed my instructions correctly?

You misread. It works!

Hahaha indeed! It seems that I'm getting used to see negative comments 🤓
I'm glad that it's working for you too!

Yeah, I guess I snaked you there with the phrasing. I just could have sworn I had tried this already.

Hi, but why have you guys marked this a closed ? if we do not wanna hide the sidebar for various reasons, the problem still persists ....

Hi, you probably haven't updated kiosk-mode, this issue was fixed a few month ago. Don't forget to clear your cache after that.

@Clooos nope, have everything to the last version and hard cleared, and pop-up still persists, far left under the bar i'm afraid

Just to be sure, do you have this one installed?
https://github.com/NemesisRE/kiosk-mode

yes
On Sun, Sep 22, 2024, 20:44 Cloos @.***> wrote:

Just to be sure, do you have this one installed?
https://github.com/NemesisRE/kiosk-mode
—
Reply to this email directly, view it on GitHub
https://github.com/Clooos/Bubble-Card/issues/528#issuecomment-2366889704,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AANGLZGJI4SVPUOZEYENJNTZX36Y7AVCNFSM6AAAAABICKATSOVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGNRWHA4DSNZQGQ
.
You are receiving this because you commented.Message ID:
@.***>

As you can see, using
kiosk_mode:
  non_admin_settings:
    hide_notifications: true
    hide_account: true
  hide_header: true
  hide_dialog_header_action_items: true
  hide_dialog_history_show_more: true
  hide_dialog_logbook_show_more: true
  hide_dialog_attributes: true

and
    card:
      type: vertical-stack
      cards:
        - type: custom:bubble-card
          card_type: pop-up
          hide_backdrop: true
          trigger_entity: var.pop_up
          trigger_close: true
          bg_blur: 0
          bg_opacity: 100
.....
          width_desktop: 100%

throws the pop-up under the left menu

I will try it again, but it was working as expected and everyone said it was fixed as well.
There is maybe a new update of it that is breaking this again.

I will try it again, but it was working as expected and everyone said it was fixed as well.
There is maybe a new update of it that is breaking this again.

I believe this issue is slightly different from the original.
The popup is still cantered but when the side panel is expanded and the popup is wide enough, the popup appears under the side panel. This wasn't picked up when I tested your fix last time because my side panel is rarely expanded, and my pops are nowhere near wide enough to appear under the side panel.
I have just replicated the issue described above by making one of my popups wide enough.

Thank you for the details! This is indeed not the same issue at all 😅

@NicholasChaplin @Clooos any update on the fix ?

I haven't had the time to look at this but can you open a new issue? Your issue seems a lot different than this one.

@Clooos opened https://github.com/Clooos/Bubble-Card/issues/819


DlImageFilter bounds methods do not deal with perspective transforms properly

Recent work on the DlImageFilter methods to compute the forward and reverse bounds was based on the manner in which Skia computes the bounds in the associated SkImageFilter methods, specifically the methods that compute filtered bounds under a transform. Both mechanisms use delta transforms to try to adjust the "user space" bounds expansion (or contraction) that would happen due to the transform. Unfortunately, a flaw in the way that these methods deal with perspective transforms was noted.
The homogenous divisor of a coordinate under a perspective transform is dependent on where the coordinate is in the 2D plane. Since the X&Y coordinates are used to compute the homogenous coordinate, different numbers are computed under simple translations of coordinates and bounds.
The Sk and Dl ImageFilter bounds methods, though, use a delta transform to compute modifications to those bounds, which means they are based on invalid assumptions about how the distance vectors would have been transformed under a perspective transform.

@knopp this may affect partial repaints under a perspective transform if image filters are involved (as in backdrop or imagefilter layers).


Skip PY312 builds next time we rebuild or update pynvjitlink dependency

We need to skip PY312 builds because of pynvjitlink.

Originally posted by @leofang in https://github.com/conda-forge/nvmath-feedstock/pull/4#discussion_r1692403567

Marking those builds as broken: https://github.com/conda-forge/admin-requests/pull/1039


Update the CUDA components with the new buffers

Updated CUDA features to build and pass unit tests with cargo test -F cuda -- --test-threads=1.  Also addressed an issue with the cpp builds failing to link while using the HAL cache env var.

Updated CUDA features to build and pass unit tests with cargo test -F cuda -- --test-threads=1. Also addressed an issue with the cpp builds failing to link while using the HAL cache env var.

Is it possible to add cargo test -F cuda to CI? Not sure exactly what our current set up is...

Superseded by #378


Tapping statusbar should scroll to the top of view

As the view is inverted a tap on the status bar scrolls the user to the bottom of the view. This should ideally be inverted and you should scroll to the actual top of the view.

This isn't possible without some serious hacks. I actually think invertible scroll view does it right (you reset your scroll position to the original spot) and Apple's Messages app does it wrong but if you want that behavior you should write your own component.


WIP: Fix 314

[x] Step 0 - identify reusable code and provide separation:

define super class for SQL translator
move replicated code to super class
keep only specific code in crate translator

[ ] Step 1 - support more flexible db manager:

replace base driver with SQL Alchemy driver (at a basic level, without leveraging most advanced features)

[x] Step 2 - apply changes to timescale:

update timescale translator to extend SQL translator and use SQL Alchemy
remove duplicated code from timescale translator

[ ] Step 3 - understand if we got some free food:

explore changes needed to support timescale queries

step 1 - may not be that simple see https://github.com/crate/crate-python/issues/273

given that, same issue may apply to postgis, for the time being i may skip step 1 and 2.1

@c0c0n3 fyi test failing should be mostly due to the test refactoring that was not completed of step3, where using ENV variables I am dynamically setting the usage of crate or timescale

that's cool, this is work in progress but thanks for the heads-up! we should fix them before merging into master though :-)

most probably if you split commit 2 from commit 3 as a first step of the
merge, not much may be needed.

@chicco785 so I think I've managed to fix up all the tests. Haven't managed to test w/ Timescale yet, but let's see what Travis has to say about it before I spend more time on this. Speaking of time

a full test run takes about 13 mins now (on my laptop), down from 34 mins. still not good but at least acceptable, so we won't get totally stuck waiting for test feedback when developing locally.
it took forever to get this right, mostly because the test code is very hard to maintain. the small change you made in insert_test_data caused a ripple effect---tests took almost double the time to run and basically all reporter tests needed tweaking. quite a steep price to pay for such a small change...

So we should put some thought into refactoring. I did that for ntne1a (see 0aa203f and 6cc1cd4) but then as we agreed I left the rest behind and patched all the other reporter tests---which are still a mess. Anyways, at least we should be able to press on now---famous last words :-)

@chicco785 so I think I've managed to fix up all the tests. Haven't managed to test w/ Timescale yet, but let's see what Travis has to say about it before I spend more time on this. Speaking of time

a full test run takes about 13 mins now (on my laptop), down from 34 mins. still not good but at least acceptable, so we won't get totally stuck waiting for test feedback when developing locally.
it took forever to get this right, mostly because the test code is very hard to maintain. the small change you made in insert_test_data caused a ripple effect---tests took almost double the time to run and basically all reporter tests needed tweaking. quite a steep price to pay for such a small change...

So we should put some thought into refactoring. I did that for ntne1a (see 0aa203f and 6cc1cd4) but then as we agreed I left the rest behind and patched all the other reporter tests---which are still a mess. Anyways, at least we should be able to press on now---famous last words :-)

it seems that build is still broken not sure though why

build is still broken not sure though why

yea me neither. ive done some digging and here's what I've got so far:

after setting up my local test env from scratch, all tests pass with Crate 4.1.4
but some of them are broken on Travis---w/ the same Crate version
I've managed to reproduce some of the Travis failures locally with Crate 3.3.5
it looks like most errors have to do with time format---UTC timezone, a baffling mystery, well unless there's some issues with Crate

will keep on digging...

build is still broken not sure though why

yea me neither. ive done some digging and here's what I've got so far:

after setting up my local test env from scratch, all tests pass with Crate 4.1.4
but some of them are broken on Travis---w/ the same Crate version
I've managed to reproduce some of the Travis failures locally with Crate 3.3.5
it looks like most errors have to do with time format---UTC timezone, a baffling mystery, well unless there's some issues with Crate

will keep on digging...

not sure what's root source, but if you check the travis logs up to step-2 the issue was not there :/ https://travis-ci.org/github/smartsdk/ngsi-timeseries-api/jobs/680120440
there also 3.3.5 was tested, so it's something that was changed after the commit https://github.com/smartsdk/ngsi-timeseries-api/commit/85d83bcdba4ac873e0dbae9662acd095527fbde8

so also up to step-3 the issue was not there:
https://travis-ci.org/github/smartsdk/ngsi-timeseries-api/jobs/691676310#L1011
not having intermediate builds of your changes, not sure in which exact point / which change triggered it

check the travis logs up to step-2 the issue was not there

you've got me lost :-) the travis logs say step 2 was already broken? i.e. it looks like build #1051 for commit 85d83bc was broken already? Also it looks like it what broke it was related to time format:
https://travis-ci.org/github/smartsdk/ngsi-timeseries-api/jobs/680120443#L498
similar to what I'm seeing now in build #1059---the latest. Am I missing something?

Nope, the build for "step-2" commit was working when the commit was made two months ago:
https://travis-ci.org/github/smartsdk/ngsi-timeseries-api/builds/680120428
to understand better i re-run and now it fails. this makes me think that the issue is related to the version update of some library

@c0c0n3 it could be alpine image, check in detail your build:
https://travis-ci.org/github/smartsdk/ngsi-timeseries-api/jobs/697246964#L230
Step 3/17 : RUN apk --no-cache --update-cache add gcc python python-dev py-pip build-base wget
 ---> Running in b558063cc519
fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/community/x86_64/APKINDEX.tar.gz
ERROR: unsatisfiable constraints:
  python (missing):
    required by: world[python]
  python-dev (missing):
    required by: world[python-dev]
The command '/bin/sh -c apk --no-cache --update-cache add gcc python python-dev py-pip build-base wget' returned a non-zero code: 2
The command "source setup_dev_env.sh" exited with 0.
721.02s$ sh run_tests.sh
Using default tag: latest
latest: Pulling from smartsdk/quantumleap
c87736221ed0: Pulling fs layer
c3f51b0d0765: Pulling fs layer
b5a0acc6b737: Pulling fs layer
14428c09e432: Pulling fs layer

now check, one of the build working:
https://travis-ci.org/github/smartsdk/ngsi-timeseries-api/jobs/691676310#L227
change the alpine image to: 3.6.10-alpine3.11
and let's see

The disease: dependency hell

could be alpine image

Spot on, good catch! The problem change was this line in the Docker file:
- FROM python:3.6.8-alpine3.8 as base
+ FROM python:3.6.10-alpine as base

which happened in step 2. How can it be then that the Travis build succeeded on step 2's commit (85d83bc)?! At the time of that commit python:3.6.10-alpine was pointing to a DockerHub image built from Alpine 3.10 as base whereas now the same tag points to an image built from Alpine 3.12---the image maintainers did the upgrade on 02 Jun 2020. The apk command in our Docker file doesn't work with Alpine 3.12 since Python packages have been renamed. This is why recent Travis builds were broken. On my machine python:3.6.10-alpine was pointing to a Docker image built from Alpine  < 3.12 which is why I couldn't reproduce the issue---@chicco785 thanks for the tip!
After pinning the Alpine version and fixing up Alpine package names (6371199), I really thought I was out of the woods. No way Jose :-) All tests passed (on Travis too) but the Travis build still failed! In fact, coveralls bombed out on collecting coverage data after the test run. To be honest, I still haven't got the faintest why exactly that happened, but it looks like it could have something to do with conflicting Python libs. Here's what I could pick up. 85d83bc specified python:3.6.10-alpine so our QL image gets a Python 3.6.10 base environment (interpreter + base libs) in which pipenv installs all QL Python deps. Our .travis.yml tells Travis to run the build in a Python 3.6 base env and currently this is Python 3.6.7 on Travis. Also, it tells Travis to pipenv install before hand (before_script block), so the whole Travis build eventually runs in a Python 3.6.7 base env + QL libs that pipenv installs in there, in particular the coveralls client. So the coverage data gets collected in the Travis Python env which is slightly different than that of the QL image. I still can't see how that can possibly cause this exception though. Anyhoo, using the exact same Python version across the board (QL image, Travis, etc. see d315d5d) did the trick and now we have a clean build again, go figure!
Home remedy

Always prefer more specific Docker tags when available. In particular, we should always use python:M.m.p-alpineN.n rather than python:M.m.p-alpine---see 6371199. This doesn't really solve the problem since even e.g. python:3.6.10-alpine3.12 will get updates from time to time but hopefully it'll always refer to the same Alpine version.
Stop the Travis build in its tracks if Docker fails to build the QL image, so it should be easier to spot the problem going forward---see d4e6809.
Use the exact same Python base env across the board: dev env, Travis, test suite, QL and Timescale setup images---see d315d5d. Ideally we should pin QL Python deps in the Pipfile too---not done yet.

Bottom line
We've got a clean build again, but our Docker-based dependency management will get us from time to time into dependency hell. In fact, in general building and pulling of images are time-dependent operations. In other words the image you pull today from DockerHub for a given tag could be different than that you pulled yesterday for the same tag and likewise building the same Docker file twice might output different images. We should also make sure the various Python envs we juggle never get out of synch w/r/t each other.
Notes

Alpine image. We're on Alpine 3.12 now---see 6371199 and d315d5d.
Python. Upgraded to latest stable version, 3.8.3. Version 3.6 got the last security update in Dec 2019 (v 3.6.10) and is no longer maintained AFAIK.
 We've been bitten a few times before, e.g. #269, #270. The only way I know out of the mainstream messy approach to dependency management is to use Nix/NixOS or Guix/GuixSD. Thoughts?
See also #273.

Step 3 - understand if we got some free food:

No Sir, no free lunch :-) When using the Timescale backend, most tests fail. Some might fail cos of dirt left over from other tests that failed earlier---it's hard to tell and we'll need more time to find out. But I did try running some tests in isolation and they failed too...

explore changes needed to support timescale queries

I did some debugging to gauge what needs changing. It looks like for the most part, basic query building actually works fine---even with aggregates, yep DATE_TRUNC works!
Here are some of the queries QL ran on Timescale
select entity_type,entity_id,time_index,"temperature" from "mtt1"."etroom"
where  entity_id in ('Room0') and  fiware_servicepath = ''
ORDER BY time_index ASC limit 10000 offset 0

select entity_type,entity_id,count("temperature") as "temperature" from "mtt1"."etroom"
where  entity_id in ('Room0') and  fiware_servicepath = ''
GROUP BY entity_type,entity_id limit 10000 offset 0

select entity_type,entity_id,time_index,"temperature" from "mtt1"."etroom"
where  entity_id in ('Room0') and
time_index >= '1970-01-06 00:00:00+00:00'and  time_index <= '1970-01-17 00:00:00+00:00'
and  fiware_servicepath = ''
ORDER BY time_index ASC limit 10000 offset 0

select entity_type,entity_id,DATE_TRUNC('year',time_index) as time_index,
avg("temperature") as "temperature"
from "mtt1"."ettest_1t1e1a_aggrperiod"
where  entity_id in ('test_1T1E1A_aggrPeriod0') and  fiware_servicepath = ''
GROUP BY entity_type,entity_id,DATE_TRUNC('year', time_index)
ORDER BY entity_type,entity_id,time_index ASC limit 10000 offset 0

They all went off without a hitch. What's really broken is the conversion of the Postgres result set into JSON. The code trips over when reading the metadata table, mainly because of implicit type conversions---e.g. the col_names passed to _format_response is a list of list of bytes whereas it looks like _format_response expects a list of strings so it fails to look up original attr info from the record fetched from the meta table.
I didn't have time to dig deeper, so there may be more issues. So I'm merging this PR and leave step 3 for another day :-)

They all went off without a hitch. What's really broken is the conversion of the Postgres result set into JSON. The code trips over when reading the metadata table, mainly because of implicit type conversions---e.g. the col_names passed to _format_response is a list of list of bytes whereas it looks like _format_response expects a list of strings so it fails to look up original attr info from the record fetched from the meta table.
I didn't have time to dig deeper, so there may be more issues. So I'm merging this PR and leave step 3 for another day :-)

this is step-3 :) understand if we got free lunch or not!
I would say that if the problem is in the formatting the response, that's not so bad, I would be much more worried if the problem is in the query. Of course that's just an assumption, which may be totally wrong


Getting Error in signif(nevergrad_hp_val[[co]][index], 6) :    non-numeric argument to mathematical function while running demo.R script

Project Robyn
Describe issue
Getting Error in signif(nevergrad_hp_val[[co]][index], 6) :    non-numeric argument to mathematical function
while running demo.R script
I see there was already an issue on this
https://github.com/facebookexperimental/Robyn/issues/750

I updated all the dependency and it's not working.
I used minicoda to create the virtual environment (option 2 of https://github.com/facebookexperimental/Robyn/blob/main/demo/install_nevergrad.R, I can't do the first option because there's some issue with the python currently being installed on my mac). I have tried to install numpy and nevergrad multiple times, but its not working
when I run py_module_available("nevergrad") and py_module_available("numpy") both return True

Provide reproducible example
The exact code from Demo.R
Environment & Robyn version
Make sure you're using the latest Robyn version before you post an issue.

packageVersion("Robyn")
[1] ‘3.10.3’

R version 4.3.3 (2024-02-29)
Platform: aarch64-apple-darwin20 (64-bit)
Running under: macOS Sonoma 14.1.2
Matrix products: default
BLAS:   /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.11.0
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
time zone: America/Los_Angeles
tzcode source: internal
attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base
other attached packages:
[1] reticulate_1.37.0 Robyn_3.10.3
loaded via a namespace (and not attached):
[1] gtable_0.3.5       shape_<IP_ADDRESS>      ggplot2_3.5.1      QuickJSR_1.1.3     inline_0.3.19
[6] lattice_0.22-6     vctrs_0.6.5        tools_4.3.3        generics_0.1.3     stats4_4.3.3
[11] parallel_4.3.3     tibble_3.2.1       fansi_1.0.6        pkgconfig_2.0.3    Matrix_1.6-5
[16] prophet_1.0        ggridges_0.5.6     rngtools_1.5.2     RcppParallel_5.1.7 lifecycle_1.0.4
[21] farver_2.1.2       compiler_4.3.3     stringr_1.5.1      munsell_0.5.1      minpack.lm_1.2-4
[26] codetools_0.2-20   yaml_2.3.8         glmnet_4.1-8       pillar_1.9.0       nloptr_2.0.3
[31] crayon_1.5.2       tidyr_1.3.1        StanHeaders_2.32.8 doRNG_1.8.6        iterators_1.0.14
[36] rpart_4.1.23       foreach_1.5.2      rstan_2.32.6       tidyselect_1.2.1   rvest_1.0.4
[41] zip_2.3.1          digest_0.6.35      stringi_1.8.4      dplyr_1.1.4        purrr_1.0.2
[46] labeling_0.4.3     splines_4.3.3      rprojroot_2.0.4    grid_4.3.3         here_1.0.1
[51] colorspace_2.1-0   cli_3.6.2          magrittr_2.0.3     patchwork_1.2.0    loo_2.7.0
[56] survival_3.6-4     pkgbuild_1.4.4     utf8_1.2.4         withr_3.0.0        lares_5.2.7
[61] scales_1.3.0       lubridate_1.9.3    timechange_0.3.0   extraDistr_1.10.0  httr_1.4.7
[66] matrixStats_1.3.0  rpart.plot_3.1.2   gridExtra_2.3      png_0.1-8          openxlsx_<IP_ADDRESS>
[71] doParallel_1.0.17  rlang_1.1.3        Rcpp_1.0.12        glue_1.7.0         xml2_1.3.6
[76] pROC_1.18.5        jsonlite_1.8.8     R6_2.5.1           plyr_1.8.9

py_config()
python:         /Users/shuang/Library/r-miniconda-arm64/envs/r-reticulate/bin/python
libpython:      /Users/shuang/Library/r-miniconda-arm64/envs/r-reticulate/lib/libpython3.10.dylib
pythonhome:     /Users/shuang/Library/r-miniconda-arm64/envs/r-reticulate:/Users/shuang/Library/r-miniconda-arm64/envs/r-reticulate
version:        3.10.14 | packaged by conda-forge | (main, Mar 20 2024, 12:51:49) [Clang 16.0.6 ]
numpy:           [NOT FOUND]
nevergrad:      [NOT FOUND]

NOTE: Python version was forced by RETICULATE_PYTHON

py_module_available("numpy")
[1] TRUE
py_module_available("nevergrad")
[1] TRUE

py_config shows "not found" for both Nevergrad and numpy. This indicates the 2 are not installed in the required virtual env. Please retry option 2 and restart R after installation


Dashboard UI mobile

Description
Please include a summary of the changes and the related issue. Please also include relevant motivation and context. List any dependencies that are required for this change.
Fixes # (issue)
Type of change
Please delete options that are not relevant.

[ ] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] This change requires a documentation update

Responsive Testing?
(Only applicable for Frontend changes)
Checked for: (width in px)

[ ] Laptop L - 1440px
[ ] Laptop - 1024px
[ ] Tablet - 768px
[ ] Mobile M - 375px

Checklist:

[ ] My code follows the style guidelines of this project
[ ] I have performed a self-review of my code
[ ] I have made corresponding changes to the documentation
[ ] My changes generate no new warnings
[ ] I have added tests that prove my fix is effective or that my feature works
[ ] New and existing unit tests pass locally with my changes
[ ] Any dependent changes have been merged and published in modules

@all-contributors please add @pranshugupta54 for code

@all-contributors please add pranshugupta54 for code

@all-contributors please remove @pranshugupta54

@all-contributors
please add pranshugupta54 for code.
please add anur4ag for code.
please add Saanvi26 for code.
please add govardhan-26 for code.
please add PushpakRaut for code.
please add MeenuyD for code.
please add christianfds for code.
please add hs309123 for code.
please add anmol111pal for code.
please add SauravGupta123 for code.
please add xnatsuk for code.

@all-contributors
please add MeenuyD for code.
please add christianfds for code.
please add hs309123 for code.
please add anmol111pal for code.
please add SauravGupta123 for code.
please add xnatsuk for code.