[Avatar] Migrate to emotion

It took me about 1 hour without knowing exactly what I was doing, I tried to copy the changes in #24107 😆 . We have about 150 components to migrate. So in theory, the migration effort could take about 1 month.
Proposals improvements, to solve pains I have faced during the effort:

Reduce the need to change theme import paths

const AvatarRoot = experimentalStyled(
  'div',
  {},
  {
    name: 'Avatar',
    slot: 'Root',
    overridesResolver,
  },
-)((props) => ({
+)(({ theme, styleProps }) => ({

This would have saved me some time to rename the props. I also think that it's easier to ready and more aligned with what we document.

Reduce prop name renaming, make it easier to navigate the code:

    <AvatarRoot
      as={Component}
-     styleProps={stateAndProps}
+     styleProps={styleProps}
      className={clsx(classes.root, className)}
      ref={ref}

-const useAvatarClasses = (props) => {
- const { classes = {}, variant, colorDefault } = props;
+const useAvatarClasses = (styleProps) => {
+ const { classes = {}, variant, colorDefault } = styleProps;

  const utilityClasses = {

I got confused about what was what.

I don't think that it makes sense to write .js and .d.ts for new files. It seems simpler to use .tsx directly. So I think that we should:

-Avatar/avatarClasses.d.ts
-Avatar/avatarClasses.js
+Avatar/avatarClasses.tsx

Do we need to name the returned value of overridesResolver? What about:

const overridesResolver = (props, styles) => {
  const { variant = 'circular' } = props;

- const styleOverrides = {
+ return {
    ...styles.root,
    ...styles[variant],
    [`&.${avatarClasses.img}`]: styles.img,
    [`&.${avatarClasses.fallback}`]: styles.fallback,
  };
-
- return styleOverrides;
};

Same question for no intermediate variable in useAvatarClasses.

Do we need to give useAvatarClasses a specific name? What about a generic one to make it easier to copy & paste?

-const useAvatarClasses = (props) => {
+const useUtilityClasses = (props) => {
  const { classes = {}, variant, colorDefault } = props;

  const utilityClasses = {
    root: clsx(avatarClasses.root, classes.root, getAvatarUtilityClass(variant), {
      [avatarClasses.colorDefault]: colorDefault,
    }),

Why is getAvatarUtilityClass public?
It seems that we could abstract avatarClasses.js to be less verbose. I believe that it's always the same. How about we have an array?

diff --git a/packages/material-ui/src/Avatar/avatarClasses.js b/packages/material-ui/src/Avatar/avatarClasses.js
index 5ede5b894e..2c8a4549da 100644
--- a/packages/material-ui/src/Avatar/avatarClasses.js
+++ b/packages/material-ui/src/Avatar/avatarClasses.js
@@ -1,15 +1,13 @@
-export function getAvatarUtilityClass(name) {
-  return `MuiAvatar-${name}`;
-}
+import generateUtilityClass from '@material-ui/unstyled/generateUtilityClass';

-const avatarClasses = {
-  root: getAvatarUtilityClass('root'),
-  colorDefault: getAvatarUtilityClass('colorDefault'),
-  circular: getAvatarUtilityClass('circular'),
-  rounded: getAvatarUtilityClass('rounded'),
-  square: getAvatarUtilityClass('square'),
-  img: getAvatarUtilityClass('img'),
-  fallback: getAvatarUtilityClass('fallback'),
-};
+const avatarClasses = generateUtilityClass('MuiAvatar', [
+  'root',
+  'colorDefault',
+  'circular',
+  'rounded',
+  'square',
+  'img',
+  'fallback',
+]);

 export default avatarClasses;

This should also open the door to global customization of the class name generator.

Thanks for taking the time to try this @oliviertassinari. I agree with all points.

Why is getAvatarUtilityClass public?

At some point I needed this in a different component, it may not be true at this moment.. I guess after applying this change we won't even need it anymore
diff --git a/packages/material-ui/src/Avatar/avatarClasses.js b/packages/material-ui/src/Avatar/avatarClasses.js
index 5ede5b894e..2c8a4549da 100644
--- a/packages/material-ui/src/Avatar/avatarClasses.js
+++ b/packages/material-ui/src/Avatar/avatarClasses.js
@@ -1,15 +1,13 @@
-export function getAvatarUtilityClass(name) {
-  return `MuiAvatar-${name}`;
-}
+import generateUtilityClass from '@material-ui/unstyled/generateUtilityClass';

-const avatarClasses = {
-  root: getAvatarUtilityClass('root'),
-  colorDefault: getAvatarUtilityClass('colorDefault'),
-  circular: getAvatarUtilityClass('circular'),
-  rounded: getAvatarUtilityClass('rounded'),
-  square: getAvatarUtilityClass('square'),
-  img: getAvatarUtilityClass('img'),
-  fallback: getAvatarUtilityClass('fallback'),
-};
+const avatarClasses = generateUtilityClass('MuiAvatar', [
+  'root',
+  'colorDefault',
+  'circular',
+  'rounded',
+  'square',
+  'img',
+  'fallback',
+]);

 export default avatarClasses;

It took me about 1 hour without knowing exactly what I was doing, I tried to copy the changes in #24107 😆

At least it means that after we have a agreed apon template the migration should go fast and would be pretty mechanical :)

Why is getAvatarUtilityClass public?

Actually, I have seen it used in Badge.js, but if we have a generateUtilityClass() we might not need it :).

Thanks for taking the time to try this @oliviertassinari. I agree with all points.

Ok, In this case, I think that we could handle them in a follow-up effort.

At least it means that after we have a agreed apon template the migration should go fast and would be pretty mechanical :)

Yeah, I could probably have done it faster if I had done more and with a better template.
I didn't look into the unstyled part yet, but it seems to be important, at the very least, so developers can leverage the components and componentsProps prop. I also didn't look into updating the demos in the documentation. I feel like splitting the work into multiple chunks like @eps1lon proposed would be better. I'm not sure about the timing, but it's another topic. Maybe we could do the documentation update during the beta phase. If adding unstyled components isn't breaking, wish doesn't seem to be, but not sure, I would also suggest we do it during the beta phase. The sooner we can move from alpha to beta the better. One we have done all the breaking changes, developers will feel a lot more confident upgrading.

I didn't look into the unstyled part yet, but it seems to be important, at the very least, so developers can leverage the components and componentsProps props. I also didn't look into updating the demos in the documentation. I feel like splitting the work into multiple chunks like @eps1lon proposed would be better. I'm not sure about the timing, but it's another topic. Maybe we could do the documentation update during the beta phase. If adding unstyled components isn't breaking, wish doesn't seem to be, but not sure, I would also suggest we do it during the beta phase. The sooner we can move from alpha to beta the better. Once we have done all the breaking changes, developers will feel a lot more confident upgrading.

Agree, I think we can push first with the migration to emotion, and proceed with the unstyled versions after that. The documentation can be done anytime, but I agree it's probably better if we push it for the beta version, so that we can release the alpha sooner 👍


[BUG] Setuptools 62.3 breaks yt's build

setuptools version
62.3.0 to 62.3.1
Python version
3.7 to 3.10
OS
Linux, MacOS, Windows
Additional environment information
No response
Description
I can't build wheels for yt since the 62.3.0 release. 62.3.1 didn't solve it either.
I'm seeing this on yt's regular wheel building jobs (for all major platforms, from Python 3.7 to 3.10)
https://github.com/yt-project/yt/runs/6467399046?check_suite_focus=true
I assume this problem isn't specific to yt and affects other projects as well, but I haven't found any duplicate so far.
Expected behavior
I expect the build to complete
How to Reproduce
python -m venv .env
source .env/bin/activate
python -m pip install --upgrade setuptools
python -m pip install git+https://github.com/yt-project/yt.git

Output
  WARNING: Built wheel for yt is invalid: Metadata 1.2 mandates PEP 440 version, but '4.1.dev0..-.keep.in.sync.with.yt-version.-version-' is not
Failed to build yt
ERROR: Could not build wheels for yt, which is required to install pyproject.toml-based projects

The actual version string embedded in yt's source code is '4.1.dev0', which I believe is PEP 440 compliant.

Thank you very much @neutrinoceros. I am busy this morning/afternoon, but I will try to have a look as soon as possible.
This is probably related to the fact we updated the version of pyparsing... I don't see other changes influencing here. It might be the case previously when parsing version the inline comment was ignored, but now it is not... I have to investigate it better.

Thank you ! FYI there is no rush on our side, removing the badly-parsed comment resolved the immediate issue.

On a first glance I feel like https://github.com/pypa/setuptools/blob/b4164438c8927b9f7593bd543475dd3010d7b3b1/setuptools/dist.py#L710 should include inline_comment_prefixes=("#",), but that requires discussing the idea with the team...
On the other hand, setuptools never needed that, why did things change since then? I am still puzzled about what changed from 62.2.0 to 62.3.0 that might possibly have caused this problem...

Just for the sake of documenting the main changes between 62.2 and 62.3:
git diff v62.2.0 v62.3.0 -- ':!setuptools/_vendor' ':!setuptools/_distutils' ':!chang*' ':!.bump*' ':!CHANGE*' ':!docs' ':!pkg_resources/_vendor' ':!setuptools/tests'

diff --git a/setup.cfg b/setup.cfg
index 0dec946b..a4b0333d 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,6 +1,6 @@
 [metadata]
 name = setuptools
-version = 62.2.0
+version = 62.3.0
 author = Python Packaging Authority
 author_email =<EMAIL_ADDRESS> description = Easily download, build, install, upgrade, and uninstall Python packages
@@ -93,6 +93,7 @@ docs =
 	pygments-github-lexers==0.0.5
 	sphinx-favicon
 	sphinx-inline-tabs
+	sphinx-reredirects
 	sphinxcontrib-towncrier
 	furo

diff --git a/setuptools/_importlib.py b/setuptools/_importlib.py
index c1ac137e..819bf5d3 100644
--- a/setuptools/_importlib.py
+++ b/setuptools/_importlib.py
@@ -12,6 +12,17 @@ def disable_importlib_metadata_finder(metadata):
         import importlib_metadata
     except ImportError:
         return
+    except AttributeError:
+        import warnings
+
+        msg = (
+            "`importlib-metadata` version is incompatible with `setuptools`.\n"
+            "This problem is likely to be solved by installing an updated version of "
+            "`importlib-metadata`."
+        )
+        warnings.warn(msg)  # Ensure a descriptive message is shown.
+        raise  # This exception can be suppressed by _distutils_hack
+
     if importlib_metadata is metadata:
         return
     to_remove = [
diff --git a/setuptools/command/build_py.py b/setuptools/command/build_py.py
index c3fdc092..91f47416 100644
--- a/setuptools/command/build_py.py
+++ b/setuptools/command/build_py.py
@@ -1,3 +1,4 @@
+from functools import partial
 from glob import glob
 from distutils.util import convert_path
 import distutils.command.build_py as orig
@@ -8,6 +9,9 @@ import io
 import distutils.errors
 import itertools
 import stat
+import warnings
+from pathlib import Path
+from setuptools._deprecation_warning import SetuptoolsDeprecationWarning
 from setuptools.extern.more_itertools import unique_everseen

@@ -98,7 +102,7 @@ class build_py(orig.build_py):
             package,
             src_dir,
         )
-        globs_expanded = map(glob, patterns)
+        globs_expanded = map(partial(glob, recursive=True), patterns)
         # flatten the expanded globs into an iterable of matches
         globs_matches = itertools.chain.from_iterable(globs_expanded)
         glob_files = filter(os.path.isfile, globs_matches)
@@ -129,6 +133,7 @@ class build_py(orig.build_py):
             src_dirs[assert_relative(self.get_package_dir(package))] = package

         self.run_command('egg_info')
+        check = _IncludePackageDataAbuse()
         ei_cmd = self.get_finalized_command('egg_info')
         for path in ei_cmd.filelist.files:
             d, f = os.path.split(assert_relative(path))
@@ -139,8 +144,13 @@ class build_py(orig.build_py):
                 d, df = os.path.split(d)
                 f = os.path.join(df, f)
             if d in src_dirs:
-                if path.endswith('.py') and f == oldf:
-                    continue  # it's a module, not data
+                if f == oldf:
+                    if check.is_module(f):
+                        continue  # it's a module, not data
+                else:
+                    importable = check.importable_subpackage(src_dirs[d], f)
+                    if importable:
+                        check.warn(importable)
                 mf.setdefault(src_dirs[d], []).append(path)

     def get_data_files(self):
@@ -240,3 +250,44 @@ def assert_relative(path):
         % path
     )
     raise DistutilsSetupError(msg)
+
+
+class _IncludePackageDataAbuse:
+    """Inform users that package or module is included as 'data file'"""
+
+    MESSAGE = """\
+    !!\n\n
+    ############################
+    # Package would be ignored #
+    ############################
+    Python recognizes {importable!r} as an importable package, however it is
+    included in the distribution as "data".
+    This behavior is likely to change in future versions of setuptools (and
+    therefore is considered deprecated).
+
+    Please make sure that {importable!r} is included as a package by using
+    setuptools' `packages` configuration field or the proper discovery methods.
+
+    You can read more about "package discovery" and "data files" on setuptools
+    documentation page.
+    \n\n!!
+    """
+
+    def __init__(self):
+        self._already_warned = set()
+
+    def is_module(self, file):
+        return file.endswith(".py") and file[:-len(".py")].isidentifier()
+
+    def importable_subpackage(self, parent, file):
+        pkg = Path(file).parent
+        parts = list(itertools.takewhile(str.isidentifier, pkg.parts))
+        if parts:
+            return ".".join([parent, *parts])
+        return None
+
+    def warn(self, importable):
+        if importable not in self._already_warned:
+            msg = textwrap.dedent(self.MESSAGE).format(importable=importable)
+            warnings.warn(msg, SetuptoolsDeprecationWarning, stacklevel=2)
+            self._already_warned.add(importable)
diff --git a/setuptools/config/_apply_pyprojecttoml.py b/setuptools/config/_apply_pyprojecttoml.py
index a580b63f..4b4ed9df 100644
--- a/setuptools/config/_apply_pyprojecttoml.py
+++ b/setuptools/config/_apply_pyprojecttoml.py
@@ -16,6 +16,8 @@ from types import MappingProxyType
 from typing import (TYPE_CHECKING, Any, Callable, Dict, List, Optional, Set, Tuple,
                     Type, Union)

+from setuptools._deprecation_warning import SetuptoolsDeprecationWarning
+
 if TYPE_CHECKING:
     from setuptools._importlib import metadata  # noqa
     from setuptools.dist import Distribution  # noqa
@@ -75,6 +77,12 @@ def _apply_tool_table(dist: "Distribution", config: dict, filename: _Path):

     for field, value in tool_table.items():
         norm_key = json_compatible_key(field)
+
+        if norm_key in TOOL_TABLE_DEPRECATIONS:
+            suggestion = TOOL_TABLE_DEPRECATIONS[norm_key]
+            msg = f"The parameter `{norm_key}` is deprecated, {suggestion}"
+            warnings.warn(msg, SetuptoolsDeprecationWarning)
+
         norm_key = TOOL_TABLE_RENAMES.get(norm_key, norm_key)
         _set_config(dist, norm_key, value)

@@ -181,8 +189,10 @@ def _python_requires(dist: "Distribution", val: dict, _root_dir):

 def _dependencies(dist: "Distribution", val: list, _root_dir):
-    existing = getattr(dist, "install_requires", [])
-    _set_config(dist, "install_requires", existing + val)
+    if getattr(dist, "install_requires", []):
+        msg = "`install_requires` overwritten in `pyproject.toml` (dependencies)"
+        warnings.warn(msg)
+    _set_config(dist, "install_requires", val)

 def _optional_dependencies(dist: "Distribution", val: dict, _root_dir):
@@ -305,6 +315,9 @@ PYPROJECT_CORRESPONDENCE: Dict[str, _Correspondence] = {
 }

 TOOL_TABLE_RENAMES = {"script_files": "scripts"}
+TOOL_TABLE_DEPRECATIONS = {
+    "namespace_packages": "consider using implicit namespaces instead (PEP 420)."
+}

 SETUPTOOLS_PATCHES = {"long_description_content_type", "project_urls",
                       "provides_extras", "license_file", "license_files"}
diff --git a/setuptools/config/setupcfg.py b/setuptools/config/setupcfg.py
index d485a8bb..b2d5c346 100644
--- a/setuptools/config/setupcfg.py
+++ b/setuptools/config/setupcfg.py
@@ -12,6 +12,7 @@ from typing import (TYPE_CHECKING, Callable, Any, Dict, Generic, Iterable, List,
 from distutils.errors import DistutilsOptionError, DistutilsFileError
 from setuptools.extern.packaging.version import Version, InvalidVersion
 from setuptools.extern.packaging.specifiers import SpecifierSet
+from setuptools._deprecation_warning import SetuptoolsDeprecationWarning

 from . import expand

@@ -507,7 +508,7 @@ class ConfigMetadataHandler(ConfigHandler["DistributionMetadata"]):
                 parse_list,
                 "The requires parameter is deprecated, please use "
                 "install_requires for runtime dependencies.",
-                DeprecationWarning,
+                SetuptoolsDeprecationWarning,
             ),
             'obsoletes': parse_list,
             'classifiers': self._get_parser_compound(parse_file, parse_list),
@@ -516,7 +517,7 @@ class ConfigMetadataHandler(ConfigHandler["DistributionMetadata"]):
                 exclude_files_parser('license_file'),
                 "The license_file parameter is deprecated, "
                 "use license_files instead.",
-                DeprecationWarning,
+                SetuptoolsDeprecationWarning,
             ),
             'license_files': parse_list,
             'description': parse_file,
@@ -584,7 +585,12 @@ class ConfigOptionsHandler(ConfigHandler["Distribution"]):
             'scripts': parse_list,
             'eager_resources': parse_list,
             'dependency_links': parse_list,
-            'namespace_packages': parse_list,
+            'namespace_packages': self._deprecated_config_handler(
+                parse_list,
+                "The namespace_packages parameter is deprecated, "
+                "consider using implicit namespaces instead (PEP 420).",
+                SetuptoolsDeprecationWarning,
+            ),
             'install_requires': parse_list_semicolon,
             'setup_requires': parse_list_semicolon,
             'tests_require': parse_list_semicolon,
diff --git a/setuptools/dist.py b/setuptools/dist.py
index 5507167d..37021ac7 100644
--- a/setuptools/dist.py
+++ b/setuptools/dist.py
@@ -280,6 +280,11 @@ def check_nsp(dist, attr, value):
                 nsp,
                 parent,
             )
+        msg = (
+            "The namespace_packages parameter is deprecated, "
+            "consider using implicit namespaces instead (PEP 420).",
+        )
+        warnings.warn(msg, SetuptoolsDeprecationWarning)

 def check_extras(dist, attr, value):

This release was mainly about warnings (+ recursive globs for package_data).
That is why I am considering that this might have been caused by the dependency update (pyparsing 2.2.1 => 3.0.8).

I don't trust that v62.3 release is implicated here. In #3330, abravalheri put together a test to capture the failure, but if I apply that test to the release prior to 62.3, the test still fails, suggesting that the issue wasn't caused by the 62.3 release:

setuptools HEAD $ git checkout v62.2.0
Warning: you are leaving 1 commit behind, not connected to
any of your branches:

  5f00abdc Add test with expectations for inline comments in setup.cfg

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> 5f00abdc

HEAD is now at 1b25c061 Bump version: 62.1.0 → 62.2.0
setuptools HEAD $ git cherry-pick 60785b4
Auto-merging setuptools/tests/config/test_setupcfg.py
[detached HEAD 61b0d2f7] Add test with expectations for inline comments in setup.cfg
 Author: Anderson Bravalheri<EMAIL_ADDRESS> Date: Wed May 18 16:54:58 2022 +0100
 1 file changed, 4 insertions(+), 4 deletions(-)
setuptools HEAD $ tox -- -k test_setupcfg -p no:cov
python develop-inst-noop: /Users/jaraco/code/public/pypa/setuptools
python installed: attrs==21.4.0,autocommand==2.2.1,black==22.3.0,build==0.8.0,click==8.1.3,coverage==6.4.1,distlib==0.3.4,docutils==0.18.1,execnet==1.9.0,filelock==3.7.1,flake8==4.0.1,flake8-2020==1.6.1,importlib-metadata==4.11.4,ini2toml==0.10,iniconfig==1.1.1,jaraco.context==4.1.1,jaraco.envs==2.4.0,jaraco.functools==3.5.0,jaraco.path==3.4.0,mccabe==0.6.1,mock==4.0.3,more-itertools==8.13.0,mypy==0.961,mypy-extensions==0.4.3,packaging==21.3,path==16.4.0,pathspec==0.9.0,pep517==0.12.0,pip-run==8.8.0,platformdirs==2.5.2,pluggy==1.0.0,py==1.11.0,pycodestyle==2.8.0,pyflakes==2.4.0,pyobjc==8.5,pyobjc-core==8.5,pyobjc-framework-Accessibility==8.5,pyobjc-framework-Accounts==8.5,pyobjc-framework-AddressBook==8.5,pyobjc-framework-AdServices==8.5,pyobjc-framework-AdSupport==8.5,pyobjc-framework-AppleScriptKit==8.5,pyobjc-framework-AppleScriptObjC==8.5,pyobjc-framework-ApplicationServices==8.5,pyobjc-framework-AppTrackingTransparency==8.5,pyobjc-framework-AudioVideoBridging==8.5,pyobjc-framework-AuthenticationServices==8.5,pyobjc-framework-AutomaticAssessmentConfiguration==8.5,pyobjc-framework-Automator==8.5,pyobjc-framework-AVFoundation==8.5,pyobjc-framework-AVKit==8.5,pyobjc-framework-BusinessChat==8.5,pyobjc-framework-CalendarStore==8.5,pyobjc-framework-CallKit==8.5,pyobjc-framework-CFNetwork==8.5,pyobjc-framework-ClassKit==8.5,pyobjc-framework-CloudKit==8.5,pyobjc-framework-Cocoa==8.5,pyobjc-framework-Collaboration==8.5,pyobjc-framework-ColorSync==8.5,pyobjc-framework-Contacts==8.5,pyobjc-framework-ContactsUI==8.5,pyobjc-framework-CoreAudio==8.5,pyobjc-framework-CoreAudioKit==8.5,pyobjc-framework-CoreBluetooth==8.5,pyobjc-framework-CoreData==8.5,pyobjc-framework-CoreHaptics==8.5,pyobjc-framework-CoreLocation==8.5,pyobjc-framework-CoreMedia==8.5,pyobjc-framework-CoreMediaIO==8.5,pyobjc-framework-CoreMIDI==8.5,pyobjc-framework-CoreML==8.5,pyobjc-framework-CoreMotion==8.5,pyobjc-framework-CoreServices==8.5,pyobjc-framework-CoreSpotlight==8.5,pyobjc-framework-CoreText==8.5,pyobjc-framework-CoreWLAN==8.5,pyobjc-framework-CryptoTokenKit==8.5,pyobjc-framework-DataDetection==8.5,pyobjc-framework-DeviceCheck==8.5,pyobjc-framework-DictionaryServices==8.5,pyobjc-framework-DiscRecording==8.5,pyobjc-framework-DiscRecordingUI==8.5,pyobjc-framework-DiskArbitration==8.5,pyobjc-framework-DVDPlayback==8.5,pyobjc-framework-EventKit==8.5,pyobjc-framework-ExceptionHandling==8.5,pyobjc-framework-ExecutionPolicy==8.5,pyobjc-framework-ExternalAccessory==8.5,pyobjc-framework-FileProvider==8.5,pyobjc-framework-FileProviderUI==8.5,pyobjc-framework-FinderSync==8.5,pyobjc-framework-FSEvents==8.5,pyobjc-framework-GameCenter==8.5,pyobjc-framework-GameController==8.5,pyobjc-framework-GameKit==8.5,pyobjc-framework-GameplayKit==8.5,pyobjc-framework-ImageCaptureCore==8.5,pyobjc-framework-IMServicePlugIn==8.5,pyobjc-framework-InputMethodKit==8.5,pyobjc-framework-InstallerPlugins==8.5,pyobjc-framework-InstantMessage==8.5,pyobjc-framework-Intents==8.5,pyobjc-framework-IntentsUI==8.5,pyobjc-framework-IOSurface==8.5,pyobjc-framework-iTunesLibrary==8.5,pyobjc-framework-KernelManagement==8.5,pyobjc-framework-LatentSemanticMapping==8.5,pyobjc-framework-LaunchServices==8.5,pyobjc-framework-libdispatch==8.5,pyobjc-framework-LinkPresentation==8.5,pyobjc-framework-LocalAuthentication==8.5,pyobjc-framework-LocalAuthenticationEmbeddedUI==8.5,pyobjc-framework-MailKit==8.5,pyobjc-framework-MapKit==8.5,pyobjc-framework-MediaAccessibility==8.5,pyobjc-framework-MediaLibrary==8.5,pyobjc-framework-MediaPlayer==8.5,pyobjc-framework-MediaToolbox==8.5,pyobjc-framework-Metal==8.5,pyobjc-framework-MetalKit==8.5,pyobjc-framework-MetalPerformanceShaders==8.5,pyobjc-framework-MetalPerformanceShadersGraph==8.5,pyobjc-framework-MetricKit==8.5,pyobjc-framework-MLCompute==8.5,pyobjc-framework-ModelIO==8.5,pyobjc-framework-MultipeerConnectivity==8.5,pyobjc-framework-NaturalLanguage==8.5,pyobjc-framework-NetFS==8.5,pyobjc-framework-Network==8.5,pyobjc-framework-NetworkExtension==8.5,pyobjc-framework-NotificationCenter==8.5,pyobjc-framework-OpenDirectory==8.5,pyobjc-framework-OSAKit==8.5,pyobjc-framework-OSLog==8.5,pyobjc-framework-PassKit==8.5,pyobjc-framework-PencilKit==8.5,pyobjc-framework-Photos==8.5,pyobjc-framework-PhotosUI==8.5,pyobjc-framework-PreferencePanes==8.5,pyobjc-framework-PushKit==8.5,pyobjc-framework-Quartz==8.5,pyobjc-framework-QuickLookThumbnailing==8.5,pyobjc-framework-ReplayKit==8.5,pyobjc-framework-SafariServices==8.5,pyobjc-framework-SceneKit==8.5,pyobjc-framework-ScreenCaptureKit==8.5,pyobjc-framework-ScreenSaver==8.5,pyobjc-framework-ScreenTime==8.5,pyobjc-framework-ScriptingBridge==8.5,pyobjc-framework-SearchKit==8.5,pyobjc-framework-Security==8.5,pyobjc-framework-SecurityFoundation==8.5,pyobjc-framework-SecurityInterface==8.5,pyobjc-framework-ServiceManagement==8.5,pyobjc-framework-ShazamKit==8.5,pyobjc-framework-Social==8.5,pyobjc-framework-SoundAnalysis==8.5,pyobjc-framework-Speech==8.5,pyobjc-framework-SpriteKit==8.5,pyobjc-framework-StoreKit==8.5,pyobjc-framework-SyncServices==8.5,pyobjc-framework-SystemConfiguration==8.5,pyobjc-framework-SystemExtensions==8.5,pyobjc-framework-UniformTypeIdentifiers==8.5,pyobjc-framework-UserNotifications==8.5,pyobjc-framework-UserNotificationsUI==8.5,pyobjc-framework-VideoSubscriberAccount==8.5,pyobjc-framework-VideoToolbox==8.5,pyobjc-framework-Virtualization==8.5,pyobjc-framework-Vision==8.5,pyobjc-framework-WebKit==8.5,pyparsing==3.0.9,pytest==7.1.2,pytest-black==0.3.12,pytest-checkdocs==2.7.1,pytest-cov==3.0.0,pytest-enabler==1.2.1,pytest-flake8==1.1.1,pytest-forked==1.4.0,pytest-mypy==0.9.1,pytest-perf==0.12.0,pytest-xdist==2.5.0,pytz==2022.1,setuptools-bootstrap==1.0,six==1.16.0,tempora==5.0.1,toml==0.10.2,tomli==2.0.1,tomli_w==1.0.0,tox==3.25.0,typing_extensions==4.2.0,virtualenv==20.14.1,zipp==3.8.0
python run-test-pre: PYTHONHASHSEED='96411534'
python run-test: commands[0] | pytest -k test_setupcfg -p no:cov
============================================================= test session starts ==============================================================
platform darwin -- Python 3.10.4, pytest-7.1.2, pluggy-1.0.0
cachedir: .tox/python/.pytest_cache
rootdir: /Users/jaraco/code/public/pypa/setuptools, configfile: pytest.ini
plugins: enabler-1.2.1, xdist-2.5.0, forked-1.4.0, checkdocs-2.7.1, perf-0.12.0, black-0.3.12, flake8-1.1.1, mypy-0.9.1
gw0 [48] / gw1 [48] / gw2 [48] / gw3 [48] / gw4 [48] / gw5 [48] / gw6 [48] / gw7 [48]
....F...........................................                                                                                [100%]
=================================================================== FAILURES ===================================================================
___________________________________________________________ TestMetadata.test_basic ____________________________________________________________
[gw6] darwin -- Python 3.10.4 /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/python

self = <setuptools.tests.config.test_setupcfg.TestMetadata object at 0x1106d91b0>
tmpdir = local('/private/var/folders/sx/n5gkrgfx6zd91ymxr2sr9wvw00n8zm/T/pytest-of-jaraco/pytest-2/popen-gw6/test_basic0')

    def test_basic(self, tmpdir):

        fake_env(
            tmpdir,
            '[metadata]\n'
            'version = 10.1.1  # comment\n'
            'description = Some description\n'
            'long_description_content_type = text/something\n'
            'long_description = file: README\n'
            'name = fake_name\n'
            'keywords = one, two  # comment\n'
            'provides = package, package.sub\n'
            'license = otherlic\n'
            'download_url = http://test.test.com/test/#url-fragment\n'
            'maintainer_email =<EMAIL_ADDRESS>        )

        tmpdir.join('README').write('readme contents\nline2')

        meta_initial = {
            # This will be used so `otherlic` won't replace it.
            'license': 'BSD 3-Clause License',
        }

        with get_dist(tmpdir, meta_initial) as dist:
            metadata = dist.metadata

>           assert metadata.version == '10.1.1'
E           AssertionError: assert '10.1.1  # comment' == '10.1.1'
E             - 10.1.1
E             + 10.1.1  # comment

setuptools/tests/config/test_setupcfg.py:140: AssertionError
=========================================================== short test summary info ============================================================
SKIPPED [1] setuptools/tests/test_msvc.py:17: could not import 'distutils.msvc9compiler': No module named 'winreg'
=================================================== 1 failed, 47 passed, 1 skipped in 3.12s ====================================================
ERROR: InvocationError for command /Users/jaraco/code/public/pypa/setuptools/.tox/python/bin/pytest -k test_setupcfg -p no:cov (exited with code 1)
___________________________________________________________________ summary ____________________________________________________________________
ERROR:   python: commands failed

Trying to replicate the issue using the reported instructions, I'm unable to do so:
draft $ py -m venv venv
draft $ venv/bin/pip install -q --upgrade setuptools pip
draft $ venv/bin/pip install git+https://github.com/yt-project/yt.git
Collecting git+https://github.com/yt-project/yt.git
  Cloning https://github.com/yt-project/yt.git to /private/var/folders/sx/n5gkrgfx6zd91ymxr2sr9wvw00n8zm/T/pip-req-build-te_cx0l9
  Running command git clone --filter=blob:none --quiet https://github.com/yt-project/yt.git /private/var/folders/sx/n5gkrgfx6zd91ymxr2sr9wvw00n8zm/T/pip-req-build-te_cx0l9
  Resolved https://github.com/yt-project/yt.git to commit db04e772dacf85b80a4b34a329495e725d40b088
  Running command git submodule update --init --recursive -q
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Collecting tomli>=1.2.3
  Using cached tomli-2.0.1-py3-none-any.whl (12 kB)
Collecting pyparsing>0.0
  Using cached pyparsing-3.0.9-py3-none-any.whl (98 kB)
Collecting tqdm>=3.4.0
  Downloading tqdm-4.64.0-py2.py3-none-any.whl (78 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 78.4/78.4 kB 1.6 MB/s eta 0:00:00
Collecting matplotlib!=3.4.2,>=2.2.3
  Downloading matplotlib-3.5.2-cp310-cp310-macosx_11_0_arm64.whl (7.2 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.2/7.2 MB 24.9 MB/s eta 0:00:00
Collecting tomli-w>=0.4.0
  Using cached tomli_w-1.0.0-py3-none-any.whl (6.0 kB)
Collecting unyt>=2.8.0
  Downloading unyt-2.8.0-py2.py3-none-any.whl (98 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 99.0/99.0 kB 4.2 MB/s eta 0:00:00
Collecting packaging>=20.9
  Using cached packaging-21.3-py3-none-any.whl (40 kB)
Collecting numpy>=1.14.5
  Downloading numpy-1.22.4-cp310-cp310-macosx_11_0_arm64.whl (12.8 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.8/12.8 MB 32.3 MB/s eta 0:00:00
Collecting more-itertools>=8.4
  Using cached more_itertools-8.13.0-py3-none-any.whl (51 kB)
Collecting cmyt>=0.2.2
  Downloading cmyt-1.0.4-py3-none-any.whl (30 kB)
Collecting colorspacious>=1.1.2
  Downloading colorspacious-1.1.2-py2.py3-none-any.whl (37 kB)
Collecting cycler>=0.10
  Downloading cycler-0.11.0-py3-none-any.whl (6.4 kB)
Collecting pillow>=6.2.0
  Downloading Pillow-9.1.1-cp310-cp310-macosx_11_0_arm64.whl (2.8 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.8/2.8 MB 24.0 MB/s eta 0:00:00
Collecting kiwisolver>=1.0.1
  Downloading kiwisolver-1.4.2-cp310-cp310-macosx_11_0_arm64.whl (63 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 63.3/63.3 kB 2.5 MB/s eta 0:00:00
Collecting python-dateutil>=2.7
  Using cached python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
Collecting fonttools>=4.22.0
  Downloading fonttools-4.33.3-py3-none-any.whl (930 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 930.9/930.9 kB 22.8 MB/s eta 0:00:00
Collecting sympy>=1.2
  Downloading sympy-1.10.1-py3-none-any.whl (6.4 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.4/6.4 MB 27.0 MB/s eta 0:00:00
Collecting six>=1.5
  Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting mpmath>=0.19
  Downloading mpmath-1.2.1-py3-none-any.whl (532 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 532.6/532.6 kB 17.8 MB/s eta 0:00:00
Building wheels for collected packages: yt
  Building wheel for yt (pyproject.toml) ... done
  Created wheel for yt: filename=yt-4.1.dev0-cp310-cp310-macosx_12_0_arm64.whl size=13346150 sha256=82a868066a118182364322bbbd9d8824f2d21aa7310d31746acf345fa66f70b7
  Stored in directory: /private/var/folders/sx/n5gkrgfx6zd91ymxr2sr9wvw00n8zm/T/pip-ephem-wheel-cache-ewln42u5/wheels/ec/0d/67/5e5420cae6eec28fd0370e1c59482a1e3480c8dee75f226689
Successfully built yt
Installing collected packages: mpmath, tqdm, tomli-w, tomli, sympy, six, pyparsing, pillow, numpy, more-itertools, kiwisolver, fonttools, cycler, unyt, python-dateutil, packaging, colorspacious, matplotlib, cmyt, yt
Successfully installed cmyt-1.0.4 colorspacious-1.1.2 cycler-0.11.0 fonttools-4.33.3 kiwisolver-1.4.2 matplotlib-3.5.2 more-itertools-8.13.0 mpmath-1.2.1 numpy-1.22.4 packaging-21.3 pillow-9.1.1 pyparsing-3.0.9 python-dateutil-2.8.2 six-1.16.0 sympy-1.10.1 tomli-2.0.1 tomli-w-1.0.0 tqdm-4.64.0 unyt-2.8.0 yt-4.1.dev0

And digging deeper into the history, I see the comment was added to the setup.cfg in https://github.com/yt-project/yt/commit/d3500c7d9a1395340ee5e75972278a46c7891ec5, so it wasn't a Setuptools regression at all, but the user expecting a behavior that was likely never present.

I see. Sorry for the confusion. I don't really get how my adding a comment there survived CI however, but I can live with it. Thank you for your feedback !

Thank you Jason and Clément. Let's leave this aside for now. Ideally we want to try avoiding adding more features to setup.cfg.

Perfectly understandable. Good luck to you guys with supporting pyproject.toml, and thank you for your work in general !


No iOS 14 availability check

Won't this crash on earlier iOS versions?
https://github.com/singular-labs/Singular-SKAdNetwork-App/blob/774b1f63d1e4e81b8fd75b74f487f9008188dac0/advertiser-sample-app/SingularAdvertiserSampleApp/ViewController.m#L30

Hi @manelizzard - good point, thanks, we'll add a check around that as well


Update samples for preview.5

Still a work in progress.
Updates the samples for preview.5 and adds integration tests to verify that all samples startup successfully and health checks endpoints in projects return healthy status. Lots of code here to make the integration testing possible including waiting for resources to successfully start, capturing resource console logs and AppHost ILogger logs, and asserting against both that no errors occurred, and more randomization to ensure proper test execution and isolation including parameter values (to ensuring they have values) and volume names. Some of this should make its way back into Aspire.Hosting.Testing at some point.
The Dapr sample still fails the integration tests due to a known issue that should be fixed by dotnet/aspire#3305 but that's for preview.6
All samples have been converted to use HTTPS inline with changes in preview.5. Note that the Node.js sample needed to be changed to configure Node.js (as a client) to work with the ASP.NET Core HTTPS dev cert which we should likely improve in the future (see dotnet/aspire#3324). The SPA apps sample (AspireWithJavaScript) is using HTTPS for the .NET pieces but the SPA dev servers are all running with HTTP still.
Before merging will need the final preview.5 package version updated and nuget.config feeds reverted.
Fixes #172

Could the non-test changes be split out to a separate PR, and merged first?

Could the non-test changes be split out to a separate PR, and merged first?

Yes? But I'd kinda like to get some test coverage as part of the preview.5 push honestly.


Not an issue, just

@arbabnazar firstly :bowing_man:
So you are launching 2 webserber instances in public_subnets ?
I am searching for the way to provision the instance launched inside the private subnets  (via some bastion) directly from the localhost (my machine :neckbeard: not ssh over bastion and then fire ansible :see_no_evil:  ). My ssh proxy works fine, but kinda not getting it to work with private ips.
Any thoughts || any tricks you want to share.
thanks again for supercool yamls :wink:

@zerOnepal I normally do this using bastion host:
##### Private subnet hosts access through bastion host #####
Host tendo-bastion
  HostName <IP_ADDRESS>
  ForwardAgent yes

Host 10.12.* # Range of my private subnet(s)
  ProxyCommand ssh -q tendo-bastion nc -q0 %h %p

Hope that help you

@arbabnazar thanks :bowing_man:
Still I wonder :open_mouth: if there is a possibility to get it running from a localhost with ansible.

If I am not wrong, you want something like this

hehe, thanks for that awesome post...
though its not the thing I was asking, you just gave me one more reason to re-design the auto-scaling playbooks :sun_behind_small_cloud:
By localhost I mean... my own machine :neckbeard:
something like this:
[ansibe-playbook dothis_from_my_laptop.yml] ----> [through bastion] ---> [private ips in my vpc]

@zerOnepal that's what I gave you the idea first. I normally do the same. I run the playbook from my local machine to remote hosts(inside the private subnet) through bastion.
Are you able to ssh to the hosts in private subnet from your local machine?

yeah I can,
oh you are doing it... nice
Can you share like how ? or ellaborate more if possible

Can you please first tell me that how you ssh to your hosts(inside private subnet), so I'll help you

hmm, I use ip of bastion(inside public subnet of my vpc) with my agents forwarded...and then move into the private ips...
Not sure, how I make ansible aware of this ?

OK. I am supposing that you are using *NIX based system.
create file under you user home directory like this:
vi ~/.ssh/config

Then add these contents inside it:
##### Private subnet hosts access through bastion host #####
Host tendo-bastion
  HostName <IP_ADDRESS>
  ForwardAgent yes

Host 10.12.* # Range of my private subnet(s)
  ProxyCommand ssh -q tendo-bastion nc -q0 %h %p

You just need to change two things in above mentioned contents:

Public IP of your Bastion Host
Range of your private subnet (like I have 10.12.4.x,10.12.5.x etc so I just make it simple by regex 10.12.*)

After that ssh to your host in private subnet:
ssh username@private-ip

and same with ansible:
ansible-playbook -i "private-ip," yourplaybook.yml -u username

Hope you get it

:bowing_man: I owe you a :coffee:

I am happy that it worked for you :)

I am happy that it worked for you. Please let me know, If I can help you more. I'll take a coffee with you if I'll come, where you are living but really happy that it worked for you

its utc + 5:45 :smile:
Nepal is my home, hope you get some slack time to travel.
or in future, I find your place in this spherical earth

I have planned to come to Nepal in few months. Will definitely ping you :-)


invalid yaml version specified in config.go

Hi, FYI there seems to be an invalid import in config.go
I replace the import for github.com/go-yaml/yaml with gopkg.in/yaml.v2
and, for what it's worth, there's an underscore in a variable name and missing comments on exported funcs in the same file, which gofmt comlains about. I can branch and fix myself if that helps, but as it's such a minor complaint I thought I'd create an issue first :)
:+1: for the work so far

Hi @jacec. Thank you very much for the comments on the Walter source! That would be very helpful if you give us the pull request for the fixes.

Hi @takahi-i my bad, I didn't see you were running godep in your build script, and you explicitly referencing a particular rev of go-yaml.
"ImportPath": "github.com/go-yaml/yaml",
"Rev": "1b9791953ba4027efaeb728c7355e542a203be5e"

Given this, my suggestion of gopkg.in/yaml.v2 is invalid, although at some point you might want to take a newer revision.


IPython integration - displaying blocks in Jupyter notebooks

Thank you so much for contributing to Datapane, please help us by filing out this PR template and ensure you have read the CONTRIBUTING.md.
It may take a few days to review your PR and merge it - please bear with us!
Thanks!
Prerequsites

[x] Has been tested locally
[ ] If a bugfix, have included a breaking test if possible

Proposed Changes

Stringify(LocalProcessor) to support returning a Datapane app as a string.
ipython_template.html to wrap the app in an iframe, with additional style/script for auto height calculation-adjustment.
App.stringify() function to allow user to return an app as a string.
IPython integration for BaseElement.

Notebook with some nice tests attached! It comes as a zip - GitHub didn't allow attaching an ipynb!
do_more_with_datapane.ipynb.zip


Thanks!

Just wanna say thank you :)
I've used it today and still works great.

Thanks for your feedback :) Could you copy it to #13?


Date / time serialization concerns

Hi.  I just stumbled across Jil, and thought I would check out how it manages date and time issues - as that is one of my areas of specialty.
In general, it looks fairly good, except for a few things.

The MicrosoftStyleMillisecondsSinceUnixEpoch option never encodes the offset. It should for a DateTimeOffset.

Ex. 2007-12-28T23:11:57.056-07:00 should be encoded as "/Date(1198908717056-0700)/"

I highly recommend revisiting #80.  ISO8601 should be the default.

The UnspecifiedDateTimeKindBehavior option only has two choices IsUTC or IsLocal.  There's no way to serialize an unspecified DateTime in its current representation.
Consider:
  var options = new Options(dateFormat: DateTimeFormat.ISO8601);
  string json = JSON.Serialize(new DateTime(2015, 12, 31, 0, 0, 0), options);

Since the DateTime has Unspecified kind, and the default option is IsLocal, and I'm in the US Pacific time zone, I get the output "2015-12-31T08:00:00Z".
If I explicitly set IsUtc, then I get "2015-12-31T00:00:00Z".
But what I actually want is "2015-12-31T00:00:00".   This is a perfectly valid ISO-8601 string, and is the common convention for an unspecified DateTime.
This is actually really important for a variety of use cases.  Consider an appointment scheduling system.  Mapping from a local time to UTC is sometimes unreliable for future dates, as time zone rules can be changed by governments.

I don't really like the behavior of Local kind converting to UTC.  It has the unfortunate side effect of not being able to round-trip.  Other serializers (such as Newtonsoft) will serialize a local DateTime using the local offset.  So instead of getting "2015-12-31T08:00:00Z", I would get "2015-12-31T00:00:00-08:00".

On deserialization, if a value with an offset is deserialized to a DateTime, then the common convention is to convert to UTC using the offset in the string, then convert back to "local time" and mark it with DateTimeKind.Local.  (Though admittedly this is just convention - one might prefer to instead drop the offset and treat it as DateTimeKind.Unspecified.)

You might just consider dropping the UnspecifiedDateTimeKindBehavior option entirely.  IMHO, it's not really needed, since the three kinds Unspecified, Utc, and Local will map cleanly if you take my previous two suggestions into consideration.

Your first point is reasonable, I will investigate it.  I vaguely recall some shenanigans around offsets being ignored with that format, so no promises.
I agree ISO8601 should be default, but I'm not going to change that in a point release.  Nor will I do a major release just to change it.  If and when 3.0 is created, I do intend to change the default.

For the rest, I disagree.  Unspecified DateTimes are a plague*, relying upon them is at best undesirable.  It's far too easy, in my experience, for code to make assumptions about time zones (either local or UTC) and make serious errors.  The BCL's behavior doesn't help.
Since the only DateTimeKind that is reliably transferable is UTC, that is what Jil converts to.  Any consumer who really needs to preserve time zone information should either use DateTimeOffset, or an additional field.
The UnspecifiedDateTimeKindBehavior configuration is aimed at cases where you can't control what sort of DateTime you are dealing with.  Ideally consumers would consciously be in Local or UTC, but this is not always possible (especially around ORMs).  In practice consumers appear to assume one or the other, the enum makes it easy to inform Jil which is being assumed.
To an extent Jil is looking at the world through Stack Overflow colored glasses**, and I do admit that not everyone thinks the same way.  When we deal with dates, we're dealing with dates across the entire world and UTC is the only realistic way to store and compare them.  That our serialization tends to prefer UTC is a natural consequence.
*Note that DateTimeOffset always assumes an offset.  There is no notion of "Unspecified".
**Although Jil is not officially a Stack Overflow / Stack Exchange library.

Yeah, that ugly format does have some quirks.  I believe the shenanigan you're thinking of is that DataContractJsonSerializer has a bug where if an offset is present at all, it not only assumes local time (which is ok), but it doesn't adjust the date/time for that offset.  It just drops it and assumes the local offset instead.   (The JavaScriptSerializer doesn't have that particular bug.)
I agree that unspecified values can be difficult, but only when used inadvertently.  Common example is retrieving a DateTime from a DB and not setting it's kind.  But my point is that there are many use cases where you really DO want just a date and time, and pinning it to a particular time zone offset is not ideal.
Consider the use case of a simple date-of-birth.  Mine is 1976-08-27.  .NET doesn't currently have a date-only data type out of the box.  One could use Noda Time's LocalDate type, or eventually perhaps the one I'm working on will be part of the framework.  But for now, a SQL date type will get mapped to a .NET DateTime, with the time set to midnight, and the kind set unspecified.
When serialized as ISO8601, this should end up as 1976-08-27T00:00:00  (again, I'd prefer 1976-08-27, but that first needs type support).   If I treat unspecified as local and convert to UTC, it's serialized as 1976-08-27T07:00:00Z in my time zone, but could be serialized as 1976-08-26T22:00:00Z in another part of the world.  Suddenly my birthday could be a day early.  Serialized as UTC, 1976-08-27T00:00:00Z, is no better, as it could still get adjusted to 1976-08-26T17:00:00 when converted back to my local time.
The reason that the date-of-birth case has this problem is because humans are intentionally ambiguous about pinning down the relevant time and time zone. They just don't apply in this context.  (See my blog post on this subject).
WRT the StackOverflow colored glasses - I can see that you probably just have use cases where a date and time value represents an exact moment in time - such as recording the timestamp of a post.  But there are many other uses cases where that context doesn't apply.  See also the four types of times (I disagree that there are only four, but the ones he describes are valid).
One thing I wasn't able to ascertain from the project readme - is Jil intented to be for general purpose? Or does it have specific intended usage where these other contexts aren't relevant?


Fix "config file not found" by adding abspath

os.path.dirname(__file__) can return blank, leading to the app looking for the config file at /config.json (i.e. in the root directory).
See https://stackoverflow.com/a/7783326

Might be a Python version thing. This change stops the app from breaking on Python 3.6 for me

could you also change the other times dirname() is used too?
for instances such as icons.txt, games.txt, and so on

looks like everything's functional to me, do note though the pypresence library i'm using only officially supports python3.8 and above so you might experience problems with it.
but if it works it works!

thanks!


🚀 Feature: UI Change for better experience

🔖 Feature description
Change the size input fields from bytes into something more user-friendly.
This is also relevant for the “Chunk Size” field, and all others where this is relevant.
🎤 Pitch
I suggest having 2 input fields, one for integers and the other a dropdown selection for Bytes, MB, GB, TB etc.
All conversions can be done in the background automatically. This will simplify the user experience.

Personally, I prefer bytes because it's platform independent and is an administrative feature that needn't be changed often.

@jwdoll how are the other options not platform independent? there is only the distinction between eg. gigabyte (1000³) and gibibyte (1024³), and only gibibytes would be reasonable imo.

Mac uses base 10 gigabytes, and bandwidth is typically quoted in base 10, at least in the US - my router reports that way as well, but takes settings in bytes to avoid ambiguity. Personally, I'm a gibibyte preferrer, but in this context, I'd assume base 10. Or are you proposing the integer and unit fields as in addition to the byte field as a helper to fill it in?

That said, I do think it would be worthwhile to format the byte boxes with commas (or I suppose periods, depending on localization).

I was proposing to replace the byte fields with the integer and unit fields, but the idea was that they will be converted to bytes in the background anyways. This will only be a a UI/UX change for the end user. Besides the "value" fields can start from byte, Mib, Gib etc. So if a user prefers to use bytes he can use them as it was until now.
The question for me would be if the conversion should be done from MB, GB or Mib, GiB.


Feature/Chat/CLK32-1001: Update MessageService

Prerequisite

[ ] Self-review :monocle_face:
[ ] No Crashes ☠

Root cause

// Explain what you have done

Solution

// Explain how you fix it

Impact

// List of affected components/modules

Screenshots (Optional)

// Capture affected screens

          2 Warnings

:warning:
Big PR

:warning:
Consider to place some MARK: lines for files over 200 lines big.

  Generated by :no_entry_sign: Danger


Typo in ARM deployment task text

Note
Issues in this repo are for tracking bugs, feature requests and questions for the tasks in this repo
For a list:
https://github.com/Microsoft/azure-pipelines-tasks/tree/master/Tasks
If you have an issue or request for the Azure Pipelines service, use developer community instead:
https://developercommunity.visualstudio.com/spaces/21/index.html )
Required Information
Entering this information will route you directly to the right team and expedite traction.
Question, Bug, or Feature?
Type: Bug
Enter Task Name: ARM template deployment / AzureResourceManagerTemplateDeploymentV3
list here (V# not needed):
https://github.com/Microsoft/azure-pipelines-tasks/tree/master/Tasks
Environment

Server - Azure Pipelines or TFS on-premises?

If using TFS on-premises, provide the version:

If using Azure Pipelines, provide the account name, team project name, build definition name/build number: Cannot provide this now

Agent - Hosted or Private:

If using Hosted agent, provide agent queue name: windows-2019

If using private agent, provide the OS of the machine running the agent and the agent version:

Issue Description
Typo in https://github.com/microsoft/azure-pipelines-tasks/blob/7bf2391069f629f64fc18f4258995565283ce37b/Tasks/AzureResourceManagerTemplateDeploymentV3/Strings/resources.resjson/en-US/resources.resjson#L84:

ARM Service Conection deployment scope - %s

Should be:

ARM Service Connection deployment scope - %s

Task logs
Troubleshooting
Checkout how to troubleshoot failures and collect debug logs: https://docs.microsoft.com/en-us/vsts/build-release/actions/troubleshooting
Error logs

fixed the issue. Thanks for reporting.


Relational: Move SequenceHiLo to Relational

Uncovered during Oracle sample provider work.

May be a breaking change to do this.

Closing old issue as this is no longer something we intend to implement.


Control + [key] on JIS keyboard results in Ctrl+US-mapping

When I use Control + the "+" key, for example, the resulting output is Ctrl+'.
This also happens for any of the symbol keys such as brackets, @ symbol, \ symbol, all reverting to US layout instead.
Shift works OK, so I think there may be a special needed to fix Control.
Will have a look myself, but leaving this as a note for others experiencing the same issue.

Issue is still present


fix: extend max retries for submitting package

Increase time for sending and verifying package by appinspect api.
appinspect-api action used to correctly submit and veirfy package for mscs TA:
https://github.com/splunk/splunk-add-on-for-microsoft-cloud-services/actions/runs/6369944655/job/17290679616
Now it hits time limit: https://github.com/splunk/splunk-add-on-for-microsoft-cloud-services/actions/runs/6402222678/job/17378649724

:tada: This PR is included in version 3.0.3 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Add some checks of OCSP functions

Some return values of OCSP functions were not checked.
These functions can fail, e.g., when hardware RNG is in use and is unavailable.

Pushed. Thanks.


tensorflow 2st test:"CUDA_ERROR_OUT_OF_MEMORY", What's wrong here???

when I run:

import tensorflow as tf
hello=tf.constant('Hello, TensorFlow!')
sess=tf.Session()
ERROR came like that:
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:910] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] Found device 0 with properties:
name: GeForce GTX 1080
major: 6 minor: 1 memoryClockRate (GHz) 1.7335
pciBusID 0000:01:00.0
Total memory: 7.92GiB
Free memory: 190.31MiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA: 0
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0:   Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1080, pci bus id: 0000:01:00.0)
E tensorflow/stream_executor/cuda/cuda_driver.cc:1002] failed to allocate 190.31M (199557120 bytes) from device: CUDA_ERROR_OUT_OF_MEMORY

Is there anyone who can tell me what's wrong here??? Very gratefull for you help!!!

Total memory: 7.92GiB
Free memory: 190.31MiB

Something is already consuming all your GPU memory. Run nvidia-smi to see what's going on, you have no memory left.
If you are trying to run 2 TensorFlow codes in parallel, you will want to change the Session command to this:
config = tf.ConfigProto(log_device_placement=False, allow_soft_placement=True)
config.gpu_options.allow_growth=True
sess = tf.Session(config=config)

This way, TensorFlow won't allocate all of the memory for a single process.

Automatically closing due to lack of recent activity. Please update the issue when new information becomes available, and we will reopen the issue. Thanks!

I am running boston.py  from this tutorial
https://www.tensorflow.org/get_started/input_fn, I have a Nvidia GPU 1080, tensorflow 1.3 on ubuntu 16.04
getting CUDA out of memory even for such a small dataset.
I could run a test for 10000 x 10000 matrix multiplication


Merge Player Trading into Main

Integrated Player Trading (DEVX-3358) and fixed the misc bug issues in the Unity Showcase Game (DEVX-3640). Please take a look at the last four commits (starting with commit 0430e15), for more details on what exactly was done, as the earlier commits are from Radoslav).
I wanted to mention two major points of concern:

PNObjects event listener is still not properly getting called in the PubNubTrading.cs file (which is what handles any of the trading system implementation). I've tried to debug and figure out why, but I've had to go with a slightly different implementation when updating the inventory. Previously, updating the metadata for both recipient and initiator was done by the initiator. Now, once the trade has been accepted, both recipient and initiator update the metadata, as well as update their own local hat inventory. Check out ReplaceHats in Scripts/TradingSystem/MetadataNormalization.cs for more details.
Sometimes when a trade is initiated, it generates a leave event for the initiator from the global channel global, which is affecting total player count. It can also affect the recipient when the window pops up on their end. I have spent way too much time trying to figure out why, as I also cannot reproduce the issue reliably. I did update the readme as this issue being a potential bug that some players might see. Please let me know if you have any major questions.

Thanks!

I found a 'crash' with TradingService.cs.  Seems reproducible as follows:

Given two instances of the app
Start a game with two human players (not bots)
Quit the game as Player A
Start another game with two human players
You will see an error related to TradingService.cs:176
Quit the game as Player A
You will see an error related to TradingService.cs:54
I'll try to attach screenshots

@darryncampbell-pubnub is there a fix for this pull request? I'm just tryna add trading to my game and would love to add this but not have that issue above..

@LoudStank I'm going to have to defer to @oliverfcarson on this one as I haven't touched the game since last year.  @oliverfcarson ?


Added END_HEADERS flags, printable characters and fixed PUSH_PROMISE stream ID

A few minor changes to existing frames:

Replaced non-printable characters in header block fragment examples with regular ASCII so we don't depend on specific codepages or character encodings on the developer's machine.
Added END_HEADERS flag because when decoding these frames in isolation that makes a bit more sense.

Very sorry. I missed this pull request. I will process this ASAP.

Confirmed and merged this pull request. Thank you for your excellent contributions!


[AIRFLOW-731] Fix period bug for NamedHivePartitionSensor

Fix a bug in partition name parsing for the operator
Added relevant tests
Dear Airflow Maintainers,
Please accept this PR that addresses the following issues:

[AIRFLOW-731] NAmedHivePartitionSensor chokes on partitions with periods.

Per Apache guidelines you need to create a Jira issue.
Testing Done:

Unittests are included and have been run locally to satisfaction. I am trying to check that Travis actually will pass those as well.

Please squash your commits when possible and follow the How to write a good git commit message.
Summarized as follows:

Separate subject from body with a blank line
Limit the subject line to 50 characters
Do not end the subject line with a period
Use the imperative mood in the subject line (add, not adding)
Wrap the body at 72 characters
Use the body to explain what and why vs. how

Current coverage is 67.01% (diff: 50.00%)

Merging #1973 into master will decrease coverage by <.01%

@@             master      #1973   diff @@
==========================================
  Files           135        135
  Lines         10255      10255
  Methods           0          0
  Messages          0          0
  Branches          0          0
==========================================
- Hits           6873       6872     -1
- Misses         3382       3383     +1
  Partials          0          0

Powered by Codecov. Last update 3f7b875...05ac7bf

@bolkedebruin, yes, I will just not mark the imports as # noqa. The reason I was a little slow is that in the process I noticed those tests are never run. So it shouldn't be a blocker either way. The test I added passes locally.

@bolkedebruin @aoen PTAL.
I will try to fix the tests in a separate PR.


Update chromium to latest version

Hi!
Any plans on updating chromium (CEF) to latest stable version?
Recently encountered CEF bug (https://github.com/centricular/gstcefsrc/issues/72) Thought a version bump could help there

Sorry github 500 on me


finish assessment

Assessment 5/19

I had technical difficulties dealing with instantiating the tvCounter and kept having a null pointer exception for it, however, I know the button code I wrote is correct! I enlisted the help of various TA's to figure out why it was a null pointer exception but even they were confused! :(


remove a typo

Internal previews

📄 File
🔗 Preview link

docs/csharp/tour-of-csharp/program-building-blocks.md
C# program building blocks

Thanks @Void00000000
This will merge as soon as the build finishes.


[add] support for displaying PDF file

PDFs are not displayed as thumbnail.
This adds support for displaying a PDF 'thumbnail'.
If OK, it should be added to all fileupload widgets.
I guess it is somewhat linked to this PR: https://github.com/wintercms/winter/pull/996

Well I guess its the same as https://github.com/wintercms/winter/pull/990/files 😆

It might be interesting to use a generic icon in SVG format, using a <text /> node to display the file extension.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="100%" height="100%" viewBox="0 0 250 250" version="1.1"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve"
    xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
    <path d="M62.5,0c-8.594,0 -15.625,7.031 -15.625,15.625l0,218.75c0,8.594 7.031,15.625 15.625,15.625l156.25,0c8.594,0 15.625,-7.031 15.625,-15.625l0,-171.875l-62.5,-62.5l-109.375,0Z" style="fill:#e2e5e7;fill-rule:nonzero;"/>
    <path d="M187.5,62.5l46.875,0l-62.5,-62.5l0,46.875c0,8.594 7.031,15.625 15.625,15.625Z" style="fill:#b0b7bd;fill-rule:nonzero;"/>
    <path d="M234.375,109.375l-46.875,-46.875l46.875,0l0,46.875Z" style="fill:#cad1d8;fill-rule:nonzero;"/>
    <path d="M195.313,210.938l-148.438,-0.001l0,7.813l148.438,0c4.296,0 7.812,-3.516 7.812,-7.813l-0,-7.812c-0,4.297 -3.516,7.813 -7.813,7.813Z" style="fill:#cad1d8;fill-rule:nonzero;"/>
    <!-- Colour label -->
    <path d="M203.125,203.125c0,4.297 -3.516,7.813 -7.813,7.813l-171.875,-0c-4.296,-0 -7.812,-3.516 -7.812,-7.813l-0,-78.125c-0,-4.297 3.516,-7.813 7.812,-7.813l171.875,0.001c4.297,-0.001 7.813,3.515 7.813,7.812l0,78.125Z" style="fill:#576d7e;fill-rule:nonzero;"/>
    <!-- Extension text node -->
    <text x="47.965px" y="188.125px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:61.512px;fill:#fff;">EXT</text>
</svg>

In this case EXT in text node may be replaced by the file extension.
Some examples :

Render

Generic

PSD

PDF

I like that @damsfx, @AIC-BV are you interested in making that change?

That looks awesome and will work for 'all' file types.
However, I don't have time to do try this straight away

@damsfx too fast
https://github.com/wintercms/winter/pull/1061

Hmm or is that only in the mediafinder and not in form widget? Might need to extend it. Need to test it first.

@damsfx perhaps we should take the logic for generating the SVG and put it in a helper class so that the mediamanager and the fileupload field can use it?

@LukeTowers Yes, that would be perfect, but I'm not sure how to get started with that change.

Sure, we could use the PHP SVG library. Would be very simple to have it generate text on the fly from what I can see.

@LukeTowers @bennothommo Isn't using a library to generate an SVG image (a simple string of characters) a bit over-dimmed?
What's needed is just displaying the image where it's needed, wouldn't a simple partial containing the image code be enough?

@damsfx are you still interested in porting your work in #1061 to the FileUpload FormWidget?

@LukeTowers Yes, of course.
But I still don't know the best way to share a partial representing the structure of the SVG icon and the associated stylesheet between the mediamanager widget and the fileupload formwidget.

CSS here: https://github.com/damsfx/winter/blob/048b37a8e7fd64e6b5af0fc42c249b62f87f0079/modules/backend/assets/less/controls/svg-icons.less
HTML, maybe here: https://github.com/wintercms/storm/blob/develop/src/Filesystem/Filesystem.php as File::svgIcon($extension);?
@bennothommo @jaxwilko @mjauvin any thoughts?


Haversine trigonometric function added

Implemented the haversin() Cypher trigonometric function.
Wrote regression tests for the haversin() function.

More about the Haversine trigonometric function here.

Looks good, but can you remove the changes you have made to the .gitignore file? Those are personal config changes we don't want them pushed to the main branch. Thank you @Allison-E

Looks good, but can you remove the changes you have made to the .gitignore file? Those are personal config changes we don't want them pushed to the main branch. Thank you @Allison-E

Thank you. I've reverted the changes made.

@Allison-E This PR needs to be rebased against the current master due to changes to the age--x.x.x.sql file.

@Allison-E This PR needs to be rebased against the current master due to changes to the age--x.x.x.sql file.

@Allison-E Two points -

The age--x.x.x.sql file was split up, your PR includes it again. You need to put your new function into the appropriate sql file for it. See the Makefile to see how age--x.x.x.sql was broken up. You likely need to bring your local repo up-to-date.
I don't see the haversin function here, I see a date function?

Thanks for pointing that out, @jrgemignani. I've reviewed the changes. I'll work on it and push the correct thing tomorrow.

@Allison-E Any update?


Update for just_gtfs library url

Hello! 3 years ago I added link to just_gtfs library. But since the MAPS.ME project is not supported anymore I update just_gtfs url to the repository which is maintained and alive.

Thanks @mesozoic-drones!


Calling wait() on TcpStream::connect() hangs the program

When you create a future TcpStream::connect() and then call wait() on it, the program hangs inside the wait() forever and it seems that the future never resolves after that.

Future::wait() will block the event loop, preventing progress from being made. You should chain your computation with and_then() or similar. If you are at the top level of your program, you can call core.run().

Future::wait() will block the event loop, preventing progress from being made.

Yes, wait() blocks the current activity until the future is resolved (returning success result or error), the problem is not blocking itself, the problem is that the future never resolves, it hangs on wait() and waits forever. When I use the regular chain computations using and_then() and run the future with core.run(), it works absolutely fine.

wait() can cause deadlock if the future depends on the event loop turning.

It sounds like @dwrensha is correct. By calling wait, you are blocking the thread. Given that Core is single threaded, you are blocking the event loop which also processes I/O events. This means that the connect cannot resolve. The solution is to not call wait on the event loop.
I'm going to close the issue. If you think that there actually is a bug, please open a new one with a test case illustrating the incorrect behavior. Thanks!

(Some discussion over on futures-rs that is perhaps relevant: https://github.com/alexcrichton/futures-rs/issues/360 https://github.com/alexcrichton/futures-rs/issues/397)


devServer.index removed

In Webpack 5 devServer.index was removed.  What was the reasoning for this?
I have a bit of a strange setup I inherited, but if I can change the name of the index that devServer loads it will reduce a lot of headaches in a migration of an archaic (and poorly designed) app.
I can place the logic on a an alternative HTML plugin, but I'm left wondering why the simple option was dropped.

Please respect time and work of other developers and use the issue template, but if you have questions please use https://github.com/webpack/webpack/discussions.
index was not removed, please read https://github.com/webpack/webpack-dev-server/blob/master/migration-v4.md

fs, index, mimeTypes, publicPath, serverSideRender, stats, and writeToDisk (related to webpack-dev-middleware) were moved to devMiddleware option.


[BUG] Wrong Symbols used in the Example TestCases on a JS Question

Describe the Issue
According to the first 3  test cases, the 'tick' (symbol/button) means the test case is correct and the 'cross'(x) represents the  wrong ones. But later in the examples the wrong cases are also represented by the tick.
e.g Test Case '007' supposed to be cross but it is tick out there. and many more 👇👇👇.

Affected Page
https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/regular-expressions/restrict-possible-usernames
Your code
let username = "JackOfAllTrades";
let userCheck = /^[a-zA-Z]+[0-9]*$/; // Changed this Line
let result = userCheck.test(username);

username = "BadUs3rnam3"; // should be false.
result = userCheck.test(username);
if(username.length < 2) result=false; // Edge case for single digit usernames

Expected behavior
The Examples Test Cases like '007', '9', 'BadUs3rnam3' etc. should have cross(x) symbol at the beginning since they does not support the problem statement.

Screenshots
No response
System

Device: Laptop
OS:  Ubuntu 20.04
Browser: Chrome
Version: latest

Additional context
No response

I can take this up.

The tick is if your code pass the test, and the cross is if you don't pass the test. It doesn't matter if the test say "it should match" or "it should not match"

The regular expression /^a-zA-Z$/ is correct, and there is a mistake in the pattern mentioned earlier

Please expand on why you think there is a mistake


[SVCS-678] Ft/noop for export

What
When MFR receives an export request where the input and output formats are the same, it should simply return the original file unmodified... unless there's another reason to export the file (i.e. image scaling).
#Why
A no-op is a simple operation to support, why not do it?
Acceptance criteria
A PR to support
QA notes
Devs will test this. Dev, please add a list of affected and unaffected file types.
Build an MFR export url requesting to export a file of type foo as type foo. This should start a download of the raw file without modification. Exception: image files should respect scaling parameters.

Coverage decreased (-0.2%) to 71.095% when pulling c898d6f4d1537c0c6bd72853a911c61c90081c47 on birdbrained:ft/noop-for-export into 3a955aceef14337cf2e759e7416125da050f8c96 on CenterForOpenScience:develop.

 I want to make sure we like the implementation before spending time fixing tests.


Delete add-issues-to-project workflow

Description
Delete add-issues-to-project workflow as it does not work from external pr's

Unstable and not related test failing, merging lell...


Clarify extended-use standard structures

The current specification defines

An extended-use standard structure is a structure whose type, tag, and meaning are defined in this document and whose superstructure is a tagged extension structure.

and recommends

It is recommended that extensions use extended-use standard structures instead of tagged extension structures if extended-use standard structures will suffice.

However, it does not clarify how to disambiguate these extended-use substructures. For example, should _XYZ.DATE be interpreted as a g7:DATE, g7:DATE-exact, g7:HEAD-DATE, g7:NO-DATE, or g7:DATA-EVEN-DATE?
Comparing the current specification with the last pre-URI draft, I believe the following is the intended meaning:

The URI of a standard tag is determined by the combination of (a) the specification, (b) the superstructure's structure type, and (c) it's tag.
If the superstructure's structure type is one defined in the specification then, regardless of its tag, it's mapping between substructure tags and substructure structure types is given in the specification.
Otherwise, if there is a URI defined in the spec as g7:tag, that is the URI of the structure type of this extended-use standard structure.

For example, that rule would interpret the following example:
0 @1@ _LOC
1 NAME New Amsterdam
2 DATE FROM 1609 TO 1664
1 TYPE Trading post

as the following structure hierarchy:

a tagged extension structure

a g7:NAME

an error; g7:NAME has no DATE-tagged substructures

a g7:TYPE

and the following example
0 HEAD
1 GEDC
2 VERS 7.0
1 SCHMA
2 TAG _CHAN https://gedcom.io/terms/v7/CHAN
0 @I1@ INDI
1 NAME Mary //
2 _CHAN
3 DATE JUN 2021

as an error because the DATE that is a substructure of g7:CHAN is g7:DATE-exact and the given date lacks a day of the month.
Is this the behavior we believe the 7.0 specification implies? If not, how should it be adjusted? If it is, we'll need to consider how to make this clear in the specification itself.

Discussed 2021-06-22
Alternative views:

When you use a standard tag under an extension tag, it must match the semantic meaning and payload rules of at least one standard structure type with that tag, but may have distinct substructures and other limitations imposed by the extension.
or
This reveals an inconsistency in the "extended-use standard structure" concept, so it should be removed
or
Once you hit an extension tag, all of its substructures are also extensions even if they use standard tags

We did not come to a conclusion which the right view is.

Proposals on how to change "An extended-use standard structure is a structure whose type, tag, and meaning are defined in this document and whose superstructure is a tagged extension structure."

Change it to "An extended-use standard structure is a structure whose type, tag, and meaning are defined in this document and whose superstructure is a tagged extension structure or an extended-use standard structure."; also clarify how the URIs of these structures are selected
Change it to "A standard-tagged extension structure is a structure with a standard tag whose superstructure is either a tagged extension structure or an extended-use standard structure."; also add a modification to SCHMA to allow defining the URIs of these structures (e.g. by letting dot-separated tags in the TAG structure or letting a TAG structure have TAG substructures, such as1 SCHMA
2 TAG _LOC <url _LOC>
2 TAG _LOC.NAME <url of _LOC.NAME>

or1 SCHMA
2 TAG _LOC <url _LOC>
3 TAG NAME <url of _LOC.NAME>

I'm not sure which I like better)
Change the text as per 2, but don't provide any way to get a URI for these and instead deprecate this usage.

Discussed 2021-06-29
Two part solution:

Clarify how you get the structure type (see the pull request)

Adjust extended-use as follows:
An extended-use standard structure is a structure whose type, tag, and meaning are defined in this document and whose superstructure is a tagged extension structure or another extended-use standard structure.
:::note
In practice, this means that if a structure is underneath an extnesion structure, regardless of how many levels up, then the structure must follow all rules of the structure type except it may have any types of substructures.
:::

Following up:
I think this proposal and the follow-on conversation we had in the 2021-06-29 meeting means there are five kinds of structure types:

Standard, as defined in the spec
Extension-tagged standard, using a documented extension tag to get a URI in the spec. They can appear as substructures of structures that cannot accept the structure type with a standard tag, but abide all other standard restrictions.
Undocumented extension. Anything goes.
Documented extension, using a documented extension tag to get a URI not in the spec. Constrained by an external spec.
Extended-use standard, using a standard tag and appearing somewhere beneath an extension. They can have a superstructure and/or substructures of types not documented for their structure type in the spec, but abide all other standard restrictions.

Extended-use standard use a structure type derived as

the URI for that tag as a substructure of its superstructure's type somewhere in the spec; or, if that doesn't exist
the URI crated by concatenating https://gedcom.io/terms/v7/ and the tag if that is defined as a structure type in the spec; or, if that doesn't exist
it's an error

Cardinality rule {1: requires a standard tag (standard structure or extended-use standard structure; using only an extension-tagged standard structure does not suffice).
Cardinality rule :1} limits a structure type (the sum of the number of standard, extension-tagged standard, and extended-use standard structures of that type cannot exceed 1).
I was going to put this directly in a pull request, but realized it needs a bit of reordering between sections 1.5 and 1.5.1, and possibly a full re-write of section 1.5, which will take time. I wanted to post the objective of that pull request before I invest that effort in writing it.

We now have two general approaches to clarifying extended-use standard structures (EUSS):
PR #19 provides detailed rules for EUSS:

Explains how to pick a URI
Explains substructure, superstructure, and cardinality rules
Result: I can edit substructures of extensions even if I don't understand the extension
Result: _LOC.NAME.DATE is OK, and is a g7:DATE
Result: _LOC.TYPE is OK, and is a g7:TYPE -- which is not what GEDCOM-L uses _LOC.TYPE for.
Also: explains rules about enumerations and relocated standard structures

PR #24 removes EUSS entirely

Once you hit an extension tag, all substructures are defined by the spec for that tag, not by the v7 spec
Result: I can only edit substructures of extensions if I understand the extension
Result: _LOC.NAME.DATE and _LOC.TYPE are both OK, and both are defined by the _LOC spec
Also: explains rules about relocated standard structures

Resolved by #24


feat: create and use create model api for compute task output

Signed-off-by: Kelvin Moutet<EMAIL_ADDRESS>Description

Create a post api for model files and use it in for the compute task output
How has this been tested?
Unit tests
E2E tests

Checklist

[x] changelog was updated with notable changes
[ ] documentation was updated

/e2e

End to end tests: :hourglass_flowing_sand: STARTING

/e2e

End to end tests: :hourglass_flowing_sand: STARTING

/e2e

/e2e

End to end tests: :hourglass_flowing_sand: STARTING

/e2e

End to end tests: :hourglass_flowing_sand: STARTING


[bazel] Let repositories that depend on this one BTOP

We want this to let repositories that depend on it to bring their own
python
Signed-off-by: Drew Macrae<EMAIL_ADDRESS>

Presumably pip.bzl needs to depend on a hermetic interpreter, like in //third_party/python/pip.bzl in the OT repo?

Thanks, I was unaware of that feature.

Submitted in https://github.com/lowRISC/misc-linters/pull/27


⚠ Bofrost.fr has degraded performance

In 5dafb94, Bofrost.fr (https://www.bofrost.fr) experienced degraded performance:

HTTP code: 200
Response time: 1032 ms

Resolved: Bofrost.fr performance has improved in d9550e0.


Training nodule detector is slow. 16 hours for an epoch

Hi,
I'm running step2_train_nodule_detector.py in Linux machine with TitanX GPU.
It's taking close to 16 hours for completing a single epoch, where as in Readme.MD it's mentioned the total time for 12 epochs is 8 hours. I'm using anaconda2 python environment.
Can you please help me with this ? What am I missing ?

Hi,
Found the issue. This is because of the steps_per_epoch value given in line number 387(fit_generator function). I changed the value from len(train_files) / 1 to len(train_files) / batch_size. Now it's taking approximately an hour for an epoch.
This issue can be closed.


Gateways configured in ISTIO_MUTUAL require clients to overwrite SNI in DestinationRule

Describe the feature request
Given the following for a server
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: httpbin-example-ingressgateway
  namespace: httpbin
spec:
  selector:
    istio: ingressgateway
  servers:
  - hosts:
    - httpbin.example.com
    port:
      name: https-8443
      number: 8443
      protocol: HTTPS
    tls:
      mode: ISTIO_MUTUAL
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: httpbin-example-igw-vs
  namespace: httpbin
spec:
  exportTo:
  - .
  gateways:
  - httpbin-example-ingressgateway
  hosts:
    - httpbin.example.com
  http:
  - match:
    route:
    - destination:
        host: httpbin.httpbin.svc.cluster.local
        port:
          number: 8000

and a client that has the following config
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
  name: httbin-example-se
  namespace: sleep
spec:
  hosts:
    - httpbin.example.com
  ports:
  - name: http2-8443
    number: 8443
    protocol: HTTP2
  location: MESH_EXTERNAL
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: httpbin-example-dr
  namespace: sleep
spec:
  host: httpbin.example.com
  trafficPolicy:
    tls:
      mode: ISTIO_MUTUAL

configures the client's cluster definition to use an SNI of outbound_.8443_._.httpbin.example.com
This requires additional user configuration for the DestinationRule. Wildcards can introduce more complexity for users if they wish to have a DestinationRule with sni: *.example.com.
Proposal: For HTTP connections we can build the client's cluster definition to use Envoy's auto_sni feature for location: MESH_EXTERNAL services. This would auto-populate the SNI based on the host authority header making the UX much better for users doing this. We would not alter this for TCP-only connections.
Describe alternatives you've considered
N/A
Affected product area (please put an X in all that apply)
[ ] Ambient
[ ] Docs
[ ] Installation
[X] Networking
[ ] Performance and Scalability
[ ] Extensions and Telemetry
[ ] Security
[ ] Test and Release
[ ] User Experience
[ ] Developer Infrastructure
Affected features (please put an X in all that apply)
[ ] Multi Cluster
[ ] Virtual Machine
[ ] Multi Control Plane
Additional context

I have something workable for this use case. I just am not aware of possible affected use cases where others are using this.

There is ENABLE_AUTO_SNI, but unfortunately it is only for TLSSimple and Mutual mode not for ISTIO_MUTUAL mode

@howardjohn Kind of remember you have comment on MeshExternal/MeshInternal. The field is actually a bad design

IMO the SNI is part of what makes it "ISTIO_MUTUAL". If you don't want
Istio mTLS use MUTUAL
On Mon, May 29, 2023, 2:12 AM Zhonghu Xu @.***> wrote:

@howardjohn https://github.com/howardjohn Kind of remember you have
comment on MeshExternal/MeshInternal. The field is actually a bad design
—
Reply to this email directly, view it on GitHub
https://github.com/istio/istio/issues/45173#issuecomment-1566810682, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/AAEYGXMLLWV4QQN6LLWCYPTXIRSBLANCNFSM6AAAAAAYQWP76A
.
You are receiving this because you were mentioned.Message ID:
@.***>

We have a few customers doing this, but need to set a DestinationRule with SNI. So in some way it is "supported," but is not a pleasant UX.
I understand the reasoning for Istio's proprietary SNI and do not think this should be enabled by default. I put this behind a feature flag for users using this.

See my comment on the PR, I am fairly sure you can do it with MUTUAL easily. LMK if you have issues with it


It seems the macro ignores prefix

Hi! Thanks a lot for this nice crate!
I'm playing around with it and it seems that your RustEmbed macro ignores the prefix.
Currenty I have an assets folder with a css subfolder and files, and:
#[derive(RustEmbed)]
#[folder = "assets"]
#[prefix = "foo/bar"]
struct StaticAssets;

and later:
StaticAssets::get("css/tw.css"); // Some
StaticAssets::get("foo/bar/css/tw.css"); // None

Am I doing something wrong?

Hey, thanks for checking it out!
Prefix support is not implemented at all. It looks like I accidentally left the proc macro definition, but it's not actually implemented.
I'm happy to accept a PR to implement this if you'd like, I can point towards where to start. Otherwise I can probably work on this to add support this weekend.

Hey, I'd be happy to have a try at it :) if you have some pointers to start they're welcome.

PR is ready! #11

Closed by #11


Document the use of git tags

Seems to be related to Docker.

Continued in https://github.com/open-contracting/data-registry/issues/62, where I suggest not using tags anymore.


perf: optimize storage usage in didexchange

This PR improves performance of didexchange protocol by reducing the number of expensive calls for saving/retrieving DIDs.
Key changes:

Fetching DIDs was moved from packager.UnpackMessage to inbound message handler (here)
There are 2 reasons for that:

At the point when a message is unpacked, we don't know yet what service will process the message and can't optimize accordingly (in case of didexchange there is no need for expensive DID retrievals).
It's not the responsibility of packager.UnpackMessage to retrieve DIDs, so moving that logic away should improve separation of concerns.

DIDConnectionStore is now an injectable framework component that defaults to did.NewConnectionStore and is backed by storage and VDR that the framework is initialized with (done as a part of the optimizations above)

Improvements in didexchange protocol:

myDID is not persisted on every saving of connection record (depending on the underlying storage saving myDID might be very expensive)
clear separation between transient storage (connectionRecorder and permanent DID connection storage (connectionStore)

Closes #2586
Signed-off-by: Andriy Holovko<EMAIL_ADDRESS>

I think this is the right approach, but I do think there's further followup that can be done (in another PR):
I noticed that ConnectionRecorder uses the standard context.StorageProvider(), same as ConnectionStore, so I imagine this refactor will enable optimization but won't offer much of a speedup on its own.
I think ConnectionRecorder could use some further refactoring - it's currently trying to serve a couple of purposes, and they conflict a little bit for the purpose of optimization:

DIDexchange stores "incomplete" connection records, which other protocols don't want to see.
DIDexchange stores persistent connection records, which other protocols load occasionally.
Out-of-band saves invitations and invitation-requests created by the client, which didexchange loads.

@aholovko is this ready?

@aholovko is this ready?

I would like to double check these changes in the downstream project (sandbox)

I noticed that ConnectionRecorder uses the standard context.StorageProvider(), same as ConnectionStore, so I imagine this refactor will enable optimization but won't offer much of a speedup on its own.

ConnectionRecorder uses both ProtocolStateStorageProvider() and StorageProvider() (code). Transient state is handled by ProtocolStateStorage, while cases where permanent storage is needed by "regular" StorageProvider().
@Moopli I totally agree with you regarding

I think ConnectionRecorder could use some further refactoring - it's currently trying to serve a couple of purposes, and they conflict a little bit for the purpose of optimization

Concerns about breaking the API without defining a clear transition plan for consumers.

@llorllale plz check https://github.com/hyperledger/aries-framework-go/pull/2588#discussion_r594551643


Google Hangouts Chat channel

Proposed changes:

Please see issue #5006 for details

Status (please check what you already did):

[x] added some tests for the functionality
[x] updated the documentation
[x] updated the changelog (please check changelog for instructions)
[x] reformat files using black (please check Readme for instructions)

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.martinmuelle seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.You have signed the CLA already but the status is still pending? Let us recheck it.


fix(title): add hyphen

close #1762
These are the components with titles that hyphen: auto would effect. I actually think that we should change the title in modal to not truncate using ellipsis for consistency.

Deploy preview for pf-next ready!
Built with commit 1251b9e696aa046fc877780f6c209daf2ba223e7
https://deploy-preview-1819--pf-next.netlify.com

Big +1 from me here @christiemolloy @mcoker @kybaker

I've done a little more research into this issue.
As this issue first occurred in the Wizard I'm going to start there. At the minimum mobile screen width of 320px, using a word length of 15 characters or less, using capitalized letters, and using the default title font size, you can see in the example below that **there are no words that break to the next line ** . This is an ideal use case.

When testing for edge cases like words 15 characters and above hyphens should ideally be used so that the broken string of text can be identified. Look at these two examples:

This is a use case where you have generic long words and edge case long words. It seems unideal that the words less than 15 characters would wrap, shouldnt the long ones? There is currently no support for CSS Text Level 4 which would support this cause.

Back to the generic 15 characters words at a medium size viewport. The first is good typography, the second is poor typography. I wonder though because the web is only just catching up to these more "editorial" styling choices, if users will see the hyphens as unexpected.

This is a really great article that addresses hyphenation in CSS and how we may be able to set hyphenation for limiting characters so that we could only have words over 15 characters wrap, but unfortunately this is only supported by Edge and Safari.
Hyphenation also requires that a language be set in the HTML. It looks like Patternfly uses English US Language, which is why it hyphenates the words well in the examples above.
IMO until CSS Text Level 4 is accepted into Chrome/Firefox, we should wait to add hyphens into the Patternfly design system as we can't set the hyphen on words with a particular character count.

@christiemolloy is it ok to close this one for now?

Closing this PR, we can discuss further in the future


[docs-infra] Tweak editable code blocks callout design

[x] I have followed (at least) the PR section of the contributing guide.

Through browsing the documentation, found this little opportunity for refinement on the "Press Enter to start editing" callout. Small padding & color adjustments there.

Before
After

@alexfauquette hey there! Let me know once you can give this a quick look ⎯ it's a simple one, I promise! 😬


fixes to unit tests so that they pass when the default array type is ndarray

instead of deprecated matrix class. Changes entailed:

slicing fixes in code. In particular, if A is a matrix, A[:, 1] is still a 2D matrix, but if A is an ndarray, that slice results in a 1D vector. To fix, this was changed to e.g. A[:, 1:2], which perserves that the array is 2D after slicing.
use np.dot instead of * to multiply matrices in a few unit tests
if B or C are given as 1d arrays, new code in statesp.__init__ attempts to determine whether they should be row or column vectors.
completes tasks in #314

I checked on my computer and unit tests also pass when the default array type is matrix.

Coverage increased (+0.03%) to 84.242% when pulling 5ecc543c2fe0fed93859153155d267fd6f3bdd0f on sawyerbfuller:ndarray-is-default into d3142ff24c7af5e2c0843fd16d0e1be82b322bb9 on python-control:master.

I made a test merge in https://github.com/bnavigator/python-control/pull/1 and reactivated TravisCI for my fork. Tests look good so far, there were merge conflicts in both merges, because the edits were in lines next to each other. Please check, if I resolved correctly.

Regarding the actual PR: Could you add a CI job that runs the tests with default ndarray too?

I made a test merge in bnavigator#1 and reactivated TravisCI for my fork. Tests look good so far, there were merge conflicts in both merges, because the edits were in lines next to each other. Please check, if I resolved correctly.

Looks good to me -- I think!

Regarding the actual PR: Could you add a CI job that runs the tests with default ndarray too?

Could you possibly point me to where I might configure that? runtests.py?

I was a about to create a PR into yours, but your repo does not show up, when I try to select the Base Repository? Please pull the commit yourself: https://github.com/bnavigator/python-control/commit/eda91ca9b203b7663e6f07ebe6845447fe9cbd5e
git remote add bnavigator https://github.com/bnavigator/python-control.git
git fetch --all
git merge bnavigator/pr433

Ok sure. Kids just got home so I will have to do it when I have a moment at
the computer later this evening.
On Thu, Jul 23, 2020 at 3:57 PM Ben Greiner<EMAIL_ADDRESS>wrote:

I was a about to create a PR into yours, but your repo does not show up,
when I try to select the Base Repository? Please pull the commit yourself:
bnavigator@eda91ca
https://github.com/bnavigator/python-control/commit/eda91ca9b203b7663e6f07ebe6845447fe9cbd5e
git remote add bnavigator https://github.com/bnavigator/python-control.git
git fetch --all
git merge bnavigator/pr433
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/python-control/python-control/pull/433#issuecomment-663271375,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AN74SSO3KI2ZUSKN2O4BWCTR5C54HANCNFSM4PFCUGCA
.

 Array must be '
2043                        'at least two-dimensional' % a.ndim)
2044E               numpy.linalg.LinAlgError: 1-dimensional array given.

Ok sure. Kids just got home so I will have to do it when I have a moment at the computer later this evening.
On Thu, Jul 23, 2020 at 3:57 PM Ben Greiner @.> wrote: I was a about to create a PR into yours, but your repo does not show up, when I try to select the Base Repository? Please pull the commit yourself: @. <bnavigator@eda91ca> git remote add bnavigator https://github.com/bnavigator/python-control.git git fetch --all git merge bnavigator/pr433 — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub <#433 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AN74SSO3KI2ZUSKN2O4BWCTR5C54HANCNFSM4PFCUGCA .
-- Sawyer Fuller Assistant Professor of Mechanical Engineering University of Washington http://faculty.washington.edu/~minster/ (Typed with my thumbs)

Should I do a git push upstream now that it's merged?

I was a about to create a PR into yours, but your repo does not show up, when I try to select the Base Repository? Please pull the commit yourself: bnavigator@eda91ca
git remote add bnavigator https://github.com/bnavigator/python-control.git
git fetch --all
git merge bnavigator/pr433

Should I do a git push upstream now that it's merged?

As for the errors you're seeing, I don't see them. To run tests locally, I've been running python setup.py test but maybe that's not running everything? Thanks.

As for the errors you're seeing, I don't see them. To run tests locally, I've been running python setup.py test but maybe that's not running everything? Thanks.

That one is deprecated.
Use pytest -v nowadays. Only pytest picks up the conftest.py
We should adjust the Readme and setup.py settings. #380 has been merged quite a while ago.

Should I do a git push upstream now that it's merged?
Not upstream but into your origin. I saw you did. And you see the failure in Travis CI here, too.

OK I think I got those three bugs squashed. waiting on Travis to confirm.

BTW, I am working on the overall matrix/array testing. https://github.com/bnavigator/python-control/tree/array-matrix-tests

In my opinion, this PR should go into 0.8.4. The patch release will still have matrix as default output, but when setting to array manually things would break without this fix.

Since this is mainly a developer-facing change (right?), seems OK to push it into master sooner rather than later (and hence have it be part of 0.8.4).

The user facing changes are in statesp.py:

slicing fixes in code. In particular, if A is a matrix, A[:, 1] is still a 2D matrix, but if A is an ndarray, that slice results in a 1D vector. To fix, this was changed to e.g. A[:, 1:2], which perserves that the array is 2D after slicing.
if B or C are given as 1d arrays, new code in statesp.__init__ attempts to determine whether they should be row or column vectors.

Now a user can use arrays.

Sounds backwards compatible, so seems fine for 0.8.4.


Apply is_ceiling/is_wall swap fix to 2D move_and_slide

This fixes is_ceiling being swapped with is_wall.
Essentially a condition was slightly the wrong way around, though I've gone and added some comments to that area to help understand the code, partially to help myself understand it,and partially in case of future maintainers.
This project (note: Do not press "3D" in the menu, as that is meant for testing another PR.) shows the bug on master.
kTest.zip

This explanation doesn't make no sense to me.
There is one condition: surface_n.dot(collision_n) >= cos(threshold). You shouldn't be changing the direction of the inequality just because you're dealing with a different surface.
Meaning
else if (get_collision_normal().dot(-p_floor_direction) <= Math::cos(p_floor_max_angle)) { //ceiling
should simply be replaced by
} else if (get_collision_normal().dot(-p_floor_direction) => Math::cos(p_floor_max_angle)) { //ceiling
And I don't think this requires any further explanation.

I was in a hurry, so I forgot to mention a few points, sorry.
So basically, if you can express things in the vector form, you can write general expressions without worrying about the coordinate systems etc. (in general terms, if you have gradients etc, you need to make sure you're using covariant derivatives of course)
And surface_n.dot(collision_n) >= cos(threshold) is like that. It's a vector expression, and as long as you feed it the correct surface normal and collision normal, it will work.
In your PR, you're giving the wrong surface normal, and furthermore flipping the direction of the inequality condition. This double-sign mistake happens to give correct results, but that's of course not the proper way to fix it.
So could you please modify your PR such that it's just replacing that line with:
else if (get_collision_normal().dot(-p_floor_direction) => Math::cos(p_floor_max_angle)) { //ceiling
and remove the explanation you wrote?

Huh, really? I thought it made sense, but I'll change it.
I guess I don't think in... whatever system you're using.

The nice thing is when/if we add the ceiling normal as a distinct parameter, we can simply change that line to
} else if (get_collision_normal().dot(p_ceiling_direction) >= Math::cos(p_floor_max_angle)) { //ceiling

LGTM

@tagcup So, you're saying I should add the parameter in this PR? I'm a bit confused since that seems to go against PR policy, but alright

@20kdc it is "Looks Good To Me"

Yep, I just meant "this PR in it's current state looks good to me"