<86>Aug 3 02:34:13 userdel[3347775]: delete user 'rooter' <86>Aug 3 02:34:13 userdel[3347775]: removed group 'rooter' owned by 'rooter' <86>Aug 3 02:34:13 userdel[3347775]: removed shadow group 'rooter' owned by 'rooter' <86>Aug 3 02:34:13 groupadd[3347809]: group added to /etc/group: name=rooter, GID=1211 <86>Aug 3 02:34:13 groupadd[3347809]: group added to /etc/gshadow: name=rooter <86>Aug 3 02:34:13 groupadd[3347809]: new group: name=rooter, GID=1211 <86>Aug 3 02:34:13 useradd[3347816]: new user: name=rooter, UID=1211, GID=1211, home=/root, shell=/bin/bash, from=none <86>Aug 3 02:34:13 userdel[3347864]: delete user 'builder' <86>Aug 3 02:34:13 userdel[3347864]: removed group 'builder' owned by 'builder' <86>Aug 3 02:34:13 userdel[3347864]: removed shadow group 'builder' owned by 'builder' <86>Aug 3 02:34:13 groupadd[3347892]: group added to /etc/group: name=builder, GID=1212 <86>Aug 3 02:34:13 groupadd[3347892]: group added to /etc/gshadow: name=builder <86>Aug 3 02:34:13 groupadd[3347892]: new group: name=builder, GID=1212 <86>Aug 3 02:34:13 useradd[3347908]: new user: name=builder, UID=1212, GID=1212, home=/usr/src, shell=/bin/bash, from=none <13>Aug 3 02:34:19 rpmi: libmpdec3-2.5.1-alt3 sisyphus+314490.500.5.1 1675432004 installed <13>Aug 3 02:34:19 rpmi: libgdbm-1.8.3-alt10 sisyphus+278100.1600.1.1 1626058413 installed <13>Aug 3 02:34:19 rpmi: libexpat-2.5.0-alt1 sisyphus+309227.100.1.1 1667075764 installed <13>Aug 3 02:34:19 rpmi: libb2-0.98.1-alt1_1 sisyphus+291614.100.1.1 1638962877 installed <13>Aug 3 02:34:19 rpmi: libp11-kit-1:0.24.1-alt2 sisyphus+324666.100.1.1 1689083439 installed <13>Aug 3 02:34:19 rpmi: libtasn1-4.19.0-alt2 sisyphus+323514.100.1.1 1687445894 installed <13>Aug 3 02:34:19 rpmi: rpm-macros-alternatives-0.5.2-alt2 sisyphus+315270.200.2.1 1676457367 installed <13>Aug 3 02:34:19 rpmi: alternatives-0.5.2-alt2 sisyphus+315270.200.2.1 1676457367 installed <13>Aug 3 02:34:19 rpmi: ca-certificates-2023.07.31-alt1 sisyphus+326137.200.1.1 1690809798 installed <13>Aug 3 02:34:19 rpmi: ca-trust-0.1.4-alt1 sisyphus+308690.100.1.1 1666182992 installed <13>Aug 3 02:34:19 rpmi: p11-kit-trust-1:0.24.1-alt2 sisyphus+324666.100.1.1 1689083439 installed <13>Aug 3 02:34:19 rpmi: libcrypto3-3.1.2-alt1 sisyphus+326244.100.1.1 1690906741 installed <13>Aug 3 02:34:19 rpmi: libssl3-3.1.2-alt1 sisyphus+326244.100.1.1 1690906741 installed <13>Aug 3 02:34:19 rpmi: python3-3.11.4-alt2 sisyphus+324359.500.4.1 1689257961 installed <13>Aug 3 02:34:20 rpmi: python3-base-3.11.4-alt2 sisyphus+324359.500.4.1 1689257961 installed <13>Aug 3 02:34:20 rpmi: tests-for-installed-python3-pkgs-0.1.22-alt1 sisyphus+319076.100.3.1 1682536051 installed <13>Aug 3 02:34:20 rpmi: rpm-build-python3-0.1.22-alt1 sisyphus+319076.100.3.1 1682536051 installed <13>Aug 3 02:34:23 rpmi: python3-module-attrs-23.1.0-alt1 sisyphus+321859.100.1.1 1685027490 installed <13>Aug 3 02:34:23 rpmi: python3-module-six-1.16.0-alt2 sisyphus+324249.100.1.1 1688484676 installed <13>Aug 3 02:34:23 rpmi: libpng16-1.6.40-alt1 sisyphus+323732.100.1.1 1687771851 installed <13>Aug 3 02:34:23 rpmi: libjpeg-2:2.1.2-alt1.2 sisyphus+300827.100.2.1 1653916633 installed <13>Aug 3 02:34:23 rpmi: python3-module-pkg_resources-1:68.0.0-alt1 sisyphus+323352.700.5.2 1687447030 installed <13>Aug 3 02:34:23 rpmi: python3-module-idna-3.4-alt1 sisyphus+307942.100.1.1 1665051373 installed <13>Aug 3 02:34:23 rpmi: libatk-2.48.3-alt1 sisyphus+322046.200.1.1 1685216218 installed <13>Aug 3 02:34:23 rpmi: python3-module-zope.interface-5.4.0-alt2.1 sisyphus+325755.300.2.1 1690991603 installed <13>Aug 3 02:34:23 rpmi: python3-module-mypy_extensions-1.0.0-alt1 sisyphus+316350.100.2.1 1678357948 installed <13>Aug 3 02:34:23 rpmi: python3-module-typing_extensions-4.7.1-alt1 sisyphus+324215.100.1.1 1688464174 installed <13>Aug 3 02:34:24 rpmi: python3-module-greenlet-2.0.1-alt1 sisyphus+311250.54100.178.1 1685787319 installed <13>Aug 3 02:34:24 rpmi: python3-module-packaging-23.1-alt1 sisyphus+318906.100.2.1 1683015285 installed <13>Aug 3 02:34:24 rpmi: libtcl-8.6.13-alt1 sisyphus+310696.100.1.1 1669548266 installed <13>Aug 3 02:34:24 rpmi: libopenblas-0.3.23-alt1.2 sisyphus+325749.100.1.1 1690531809 installed <13>Aug 3 02:34:24 rpmi: libwayland-client-1.22.0-alt1.1 sisyphus+318010.100.1.1 1680606299 installed <13>Aug 3 02:34:24 rpmi: liblcms2-2.15-alt1 sisyphus+316039.100.1.1 1677666328 installed <13>Aug 3 02:34:24 rpmi: perl-HTTP-Date-6.06-alt1 sisyphus+324527.100.1.1 1688834564 installed <13>Aug 3 02:34:24 rpmi: perl-XML-NamespaceSupport-1.12-alt1 1491296348 installed <13>Aug 3 02:34:24 rpmi: libwebp7-1.3.1-alt1 sisyphus+323891.100.1.1 1688040826 installed <13>Aug 3 02:34:24 rpmi: python3-module-dateutil-2.8.2-alt2 sisyphus+319889.300.1.1 1683215971 installed <13>Aug 3 02:34:24 rpmi: python3-module-rpds-py-0.9.2-alt1 sisyphus+325217.100.1.1 1689836377 installed <13>Aug 3 02:34:24 rpmi: python3-module-referencing-0.30.0-alt1 sisyphus+325129.200.1.1 1689695501 installed <13>Aug 3 02:34:24 rpmi: python3-module-pytz-1:2022.6-alt1 sisyphus+311396.200.1.1 1670517427 installed <13>Aug 3 02:34:24 rpmi: python3-module-multidict-6.0.4-alt1 sisyphus+311250.32340.176.1 1685737916 installed <13>Aug 3 02:34:24 rpmi: python3-module-click-8.1.6-alt1 sisyphus+325473.100.2.1 1690373662 installed <13>Aug 3 02:34:24 rpmi: python3-module-sortedcontainers-2.4.0-alt1 sisyphus+272042.100.1.1 1621262424 installed <13>Aug 3 02:34:24 rpmi: python3-module-async-timeout-4.0.2-alt1 sisyphus+295017.1100.2.1 1644497909 installed <13>Aug 3 02:34:24 rpmi: python3-module-frozenlist-1.3.3-alt1 sisyphus+311250.30540.176.1 1685737433 installed <13>Aug 3 02:34:24 rpmi: python3-module-charset-normalizer-2.1.1-alt1 sisyphus+311047.100.1.1 1669992940 installed <13>Aug 3 02:34:24 rpmi: libsqlite3-3.42.0-alt1 sisyphus+321513.100.1.1 1684602997 installed <13>Aug 3 02:34:24 rpmi: libopenjpeg2.0-2.5.0-alt1 sisyphus+299926.300.3.1 1652478843 installed <13>Aug 3 02:34:24 rpmi: libfribidi-1.0.13-alt1 sisyphus+320646.100.1.1 1684307082 installed <13>Aug 3 02:34:24 rpmi: libusb-1.0.26-alt2 sisyphus+305525.100.1.1 1660924427 installed <13>Aug 3 02:34:24 rpmi: libcares-1.19.1-alt1 sisyphus+324326.100.1.1 1688585812 installed <13>Aug 3 02:34:24 rpmi: libICE-1.1.1-alt1 sisyphus+311428.500.1.1 1670577555 installed <13>Aug 3 02:34:24 rpmi: perl-LWP-MediaTypes-6.04-alt1 sisyphus+225468.100.1.1 1553186684 installed <13>Aug 3 02:34:24 rpmi: perl-Compress-Raw-Zlib-2.206-alt1 sisyphus+325780.100.1.1 1690558898 installed <13>Aug 3 02:34:24 rpmi: perl-libnet-1:3.15-alt1 sisyphus+317310.100.1.1 1679580208 installed <13>Aug 3 02:34:24 rpmi: perl-XML-SAX-Base-1.09-alt1 1494364363 installed <13>Aug 3 02:34:24 rpmi: libkmod-30-alt1 sisyphus+324359.1200.6.1 1689326311 installed <13>Aug 3 02:34:24 rpmi: kmod-30-alt1 sisyphus+324359.1200.6.1 1689326311 installed <13>Aug 3 02:34:24 rpmi: libSM-1.2.4-alt1 sisyphus+312057.200.1.1 1671526916 installed <13>Aug 3 02:34:24 rpmi: libhidapi-0.12.0-alt1_1 sisyphus+303213.100.1.1 1657034192 installed <13>Aug 3 02:34:24 rpmi: python3-module-cython-hidapi-0.14.0-alt1 sisyphus+326006.100.1.1 1690656873 installed <13>Aug 3 02:34:24 rpmi: python3-module-serial-3.5-alt2 sisyphus+281995.100.1.1 1628172783 installed <13>Aug 3 02:34:24 rpmi: python3-modules-sqlite3-3.11.4-alt2 sisyphus+324359.500.4.1 1689257961 installed <13>Aug 3 02:34:24 rpmi: python3-module-coverage-6.5.0-alt1 sisyphus+311250.11540.175.1 1685631973 installed <13>Aug 3 02:34:24 rpmi: python3-module-Cython-0.29.35-alt2 sisyphus+311250.25110.176.1 1685734934 installed <13>Aug 3 02:34:24 rpmi: python3-module-aiosignal-1.3.1-alt1 sisyphus+314057.100.1.1 1674561191 installed <13>Aug 3 02:34:24 rpmi: python3-module-incremental-22.10.0-alt1 sisyphus+312706.100.1.1 1672404273 installed <13>Aug 3 02:34:24 rpmi: python3-module-yarl-1.9.2-alt1 sisyphus+311250.34340.176.1 1685738745 installed <13>Aug 3 02:34:24 rpmi: python3-module-jsonschema-specifications-2023.07.1-alt1 sisyphus+325176.100.1.1 1689770147 installed <13>Aug 3 02:34:24 rpmi: perl-File-Listing-6.16-alt1 sisyphus+325783.100.1.1 1690559356 installed <13>Aug 3 02:34:24 rpmi: libwayland-cursor-1.22.0-alt1.1 sisyphus+318010.100.1.1 1680606299 installed <13>Aug 3 02:34:24 rpmi: libwayland-egl-4:18.1.0-alt1.1 sisyphus+318010.100.1.1 1680606299 installed <13>Aug 3 02:34:24 rpmi: tcl-8.6.13-alt1 sisyphus+310696.100.1.1 1669548266 installed <13>Aug 3 02:34:24 rpmi: python3-module-typing-inspect-0.9.0-alt1 sisyphus+321831.100.1.1 1685011068 installed <13>Aug 3 02:34:24 rpmi: python3-module-idna_ssl-1.1.0-alt2 sisyphus+272418.100.1.1 1621876529 installed <13>Aug 3 02:34:24 rpmi: python3-module-hyperlink-21.0.0-alt1.1 sisyphus+304836.100.1.1 1659710964 installed <13>Aug 3 02:34:24 rpmi: python3-module-genshi-0.7.7-alt1 sisyphus+311250.13200.175.1 1685632292 installed <13>Aug 3 02:34:24 rpmi: python3-module-outcome-1.2.0-alt2 sisyphus+318894.1400.3.1 1682420792 installed <13>Aug 3 02:34:25 rpmi: spatialindex-1.9.3-alt1 sisyphus+292668.100.3.1 1641438405 installed <13>Aug 3 02:34:25 rpmi: xml-utils-1:2.10.4-alt1 sisyphus+311250.4140.175.1 1685628991 installed <13>Aug 3 02:34:25 rpmi: python3-module-mpmath-1.2.1-alt1 sisyphus+277364.40.2.1 1625515359 installed <13>Aug 3 02:34:25 rpmi: python3-module-matplotlib-data-3.7.0-alt3 sisyphus+323175.100.1.1 1686946506 installed <13>Aug 3 02:34:25 rpmi: python3-module-railroad-diagrams-1.1.1-alt1 sisyphus+294587.100.1.1 1643813088 installed <13>Aug 3 02:34:25 rpmi: python3-module-kiwisolver-1.4.4-alt1 sisyphus+311250.36500.176.1 1685740285 installed <13>Aug 3 02:34:25 rpmi: python3-module-lark-1.1.7-alt1 sisyphus+325463.300.3.1 1690386555 installed <13>Aug 3 02:34:25 rpmi: python3-module-webencodings-0.5.1-alt2 sisyphus+276020.100.1.1 1624812421 installed <13>Aug 3 02:34:25 rpmi: python3-module-sqlparse-0.4.4-alt1 sisyphus+319188.100.1.1 1682328039 installed <13>Aug 3 02:34:25 rpmi: python3-module-markupsafe-1:2.1.3-alt1 sisyphus+323659.100.1.1 1687595160 installed <13>Aug 3 02:34:25 rpmi: python3-module-jinja2-3.1.2-alt1 sisyphus+303664.100.1.1 1657809843 installed <13>Aug 3 02:34:25 rpmi: python3-module-pyparsing-3.0.9-alt2 sisyphus+309123.700.4.1 1668095436 installed <13>Aug 3 02:34:25 rpmi: python3-module-decorator-4.4.2-alt2 sisyphus+280713.100.1.1 1627266028 installed <13>Aug 3 02:34:25 rpmi: python3-module-cycler-0.11.0-alt2 sisyphus+318170.100.1.1 1680850132 installed <13>Aug 3 02:34:25 rpmi: python3-module-platformdirs-3.10.0-alt1 sisyphus+326155.100.2.1 1690880012 installed <13>Aug 3 02:34:25 rpmi: python3-module-pathspec-0.11.2-alt1 sisyphus+326154.100.2.1 1690886843 installed <13>Aug 3 02:34:25 rpmi: python3-module-asgiref-3.4.1-alt1 sisyphus+283297.40.2.1 1629315886 installed <13>Aug 3 02:34:25 rpmi: python3-module-olefile-0.46-alt2 sisyphus+288126.100.1.1 1635163866 installed <13>Aug 3 02:34:25 rpmi: python3-module-constantly-15.1.0-alt6 sisyphus+284854.100.1.1 1631108193 installed <13>Aug 3 02:34:25 rpmi: python3-module-pygobject-2.28.6-alt13 sisyphus+311250.56700.178.1 1685789242 installed <13>Aug 3 02:34:25 rpmi: python3-module-appdirs-1.4.4-alt1 sisyphus+267613.300.2.1 1620039159 installed <13>Aug 3 02:34:25 rpmi: python3-module-certifi-2023.5.7-alt1 sisyphus+322622.100.1.1 1686217855 installed <13>Aug 3 02:34:25 rpmi: python3-module-openid-3.2.0-alt1 sisyphus+278049.100.2.1 1625998936 installed <13>Aug 3 02:34:25 rpmi: python3-module-z3c-3.0.0-alt4 sisyphus+284857.200.1.1 1631109149 installed <13>Aug 3 02:34:25 rpmi: python3-module-zc-1.0.0-alt7 sisyphus+284857.100.1.1 1631109117 installed <13>Aug 3 02:34:25 rpmi: python3-module-zope-3.3.0-alt9 sisyphus+281937.200.4.1 1628175900 installed <13>Aug 3 02:34:25 rpmi: python3-module-zope.event-5.0-alt1.1 sisyphus+325755.140.2.1 1690991538 installed <13>Aug 3 02:34:25 rpmi: python3-module-pycparser-2.21-alt1.1 sisyphus+309935.7300.4.1 1668527005 installed <13>Aug 3 02:34:25 rpmi: python3-module-cffi-1.15.1-alt2 sisyphus+311250.35200.176.1 1685739391 installed <13>Aug 3 02:34:25 rpmi: python3-module-cryptography-41.0.3-alt1 sisyphus+326306.100.1.1 1690985258 installed <13>Aug 3 02:34:25 rpmi: python3-module-openssl-23.2.0-alt1 sisyphus+326014.100.1.1 1690659362 installed <13>Aug 3 02:34:25 rpmi: python3-module-urllib3-2:2.0.4-alt1 sisyphus+325464.100.1.1 1690199511 installed <13>Aug 3 02:34:25 rpmi: python3-module-requests-2.31.0-alt1 sisyphus+321663.100.2.1 1684917021 installed <13>Aug 3 02:34:25 rpmi: python3-module-redis-py-4.5.5-alt1 sisyphus+319852.1100.13.1 1684229279 installed <13>Aug 3 02:34:25 rpmi: python3-module-pycares-4.1.2-alt1 sisyphus+311250.45300.178.1 1685783505 installed <13>Aug 3 02:34:25 rpmi: python3-module-astor-0.8.1-alt1.1 sisyphus+315877.100.1.1 1677481862 installed <13>Aug 3 02:34:25 rpmi: python3-module-sniffio-1.2.0-alt1 sisyphus+295017.1600.2.1 1644498020 installed <13>Aug 3 02:34:25 rpmi: python3-module-exceptiongroup-1.1.2-alt1 sisyphus+325196.100.2.1 1689854182 installed <13>Aug 3 02:34:25 rpmi: python3-module-async_generator-1.10-alt3 sisyphus+319053.1600.6.1 1682668582 installed <13>Aug 3 02:34:25 rpmi: python3-module-trio-0.22.0-alt3 sisyphus+319053.2100.6.1 1682668663 installed <13>Aug 3 02:34:26 rpmi: python3-module-dns-1:2.2.0-alt2 sisyphus+320065.60.1.1 1683366881 installed <13>Aug 3 02:34:26 rpmi: python3-module-Cheetah-3.3.1-alt3 sisyphus+323086.100.1.2 1686870555 installed <13>Aug 3 02:34:26 rpmi: python3-module-paste-3.5.0-alt1.1 sisyphus+309935.6500.4.1 1668526794 installed <13>Aug 3 02:34:26 rpmi: python3-module-PasteDeploy-1:3.0.1-alt1 sisyphus+308592.100.1.1 1666070463 installed <13>Aug 3 02:34:26 rpmi: python3-module-PasteScript-1:2.0.2-alt2 sisyphus+272468.100.1.1 1621939313 installed <13>Aug 3 02:34:26 rpmi: python3-module-pluggy-1.2.0-alt1 sisyphus+323556.100.2.1 1689242408 installed <13>Aug 3 02:34:26 rpmi: python3-module-iniconfig-2.0.0-alt1 sisyphus+314076.200.3.1 1674737275 installed <13>Aug 3 02:34:26 rpmi: python3-module-pytest-7.4.0-alt1 sisyphus+325101.100.3.1 1689758053 installed <13>Aug 3 02:34:26 rpmi: libyaml2-0.2.5-alt1 sisyphus+278391.100.1.1 1626094928 installed <13>Aug 3 02:34:26 rpmi: python3-module-yaml-6.0-alt2 sisyphus+311250.34240.176.1 1685738715 installed <13>Aug 3 02:34:26 rpmi: python3-module-libcst-1.0.1-alt1 sisyphus+322900.100.2.2 1686852287 installed <13>Aug 3 02:34:26 rpmi: python3-module-networkx-core-2:2.8.8-alt1 sisyphus+315551.100.1.1 1676908769 installed <13>Aug 3 02:34:26 rpmi: libxslt-1.1.37-alt1 sisyphus+307481.100.1.1 1664360521 installed <13>Aug 3 02:34:26 rpmi: python3-module-html5lib-1:1.1-alt1 sisyphus+278096.120.5.1 1626086978 installed <13>Aug 3 02:34:26 rpmi: python3-module-lxml-4.9.2-alt2 sisyphus+311250.25230.176.1 1685735107 installed <13>Aug 3 02:34:26 rpmi: libuv-1.46.0-alt1 sisyphus+326001.100.1.1 1690655254 installed <13>Aug 3 02:34:26 rpmi: libqhull-2020.2-alt1 sisyphus+279488.100.1.2 1626573478 installed <13>Aug 3 02:34:26 rpmi: libpython3-3.11.4-alt2 sisyphus+324359.500.4.1 1689257961 installed <13>Aug 3 02:34:26 rpmi: libncurses-6.3.20220618-alt1 sisyphus+302449.100.1.1 1655835246 installed <13>Aug 3 02:34:26 rpmi: libtinfo-devel-6.3.20220618-alt1 sisyphus+302449.100.1.1 1655835246 installed <13>Aug 3 02:34:26 rpmi: libncurses-devel-6.3.20220618-alt1 sisyphus+302449.100.1.1 1655835246 installed <13>Aug 3 02:34:27 rpmi: python3-dev-3.11.4-alt2 sisyphus+324359.500.4.1 1689257961 installed <13>Aug 3 02:34:28 rpmi: python3-module-setuptools-1:68.0.0-alt1 sisyphus+323352.700.5.2 1687447030 installed <13>Aug 3 02:34:28 rpmi: libmaxminddb-1.7.1-alt1 sisyphus+310839.100.1.1 1669722009 installed <13>Aug 3 02:34:28 rpmi: python3-module-MaxMindDB-2.4.0-alt1 sisyphus+325045.100.1.1 1689589265 installed <13>Aug 3 02:34:28 rpmi: openldap-common-2.6.4-alt1 sisyphus+324359.600.5.1 1689262595 installed <13>Aug 3 02:34:28 rpmi: libxblas-1.0.248-alt2 sisyphus+285045.40.2.1 1631388330 installed <13>Aug 3 02:34:28 rpmi: libxkbcommon-1.5.0-alt1 sisyphus+312911.100.1.1 1673035568 installed <13>Aug 3 02:34:28 rpmi: libgudev-1:238-alt1 sisyphus+324364.100.1.1 1688646144 installed <13>Aug 3 02:34:28 rpmi: libltdl7-2.4.7-alt2 sisyphus+325837.100.1.1 1690578899 installed <13>Aug 3 02:34:28 rpmi: libgts-0.7.6-alt2.drc20130205.1 sisyphus+275722.100.1.1 1624749869 installed <13>Aug 3 02:34:28 rpmi: libpaper-1.1.28-alt4 sisyphus+325501.100.1.1 1690226535 installed <13>Aug 3 02:34:28 rpmi: libgtk+2-locales-2.24.33-alt1 sisyphus+278555.100.1.2 1626252653 installed <13>Aug 3 02:34:28 rpmi: libgomp1-13.2.1-alt1 sisyphus+325923.100.1.1 1690626070 installed <13>Aug 3 02:34:28 rpmi: libimagequant-2.17.0-alt1_1 sisyphus+291138.100.1.1 1638394107 installed <13>Aug 3 02:34:28 rpmi: libquadmath0-13.2.1-alt1 sisyphus+325923.100.1.1 1690626070 installed <13>Aug 3 02:34:28 rpmi: libgfortran5-13.2.1-alt1 sisyphus+325923.100.1.1 1690626070 installed <13>Aug 3 02:34:28 rpmi: liblapack-1:3.8.0-alt7 sisyphus+293726.100.1.1 1642544497 installed <13>Aug 3 02:34:29 rpmi: python3-module-numpy-1:1.25.1-alt1 sisyphus+323343.140.2.1 1689684591 installed <13>Aug 3 02:34:29 rpmi: libgeos-3.12.0-alt1 sisyphus+323865.100.1.1 1688017707 installed <13>Aug 3 02:34:29 rpmi: libnuma-2.0.14-alt2 sisyphus+278485.100.1.1 1626104244 installed <13>Aug 3 02:34:29 rpmi: libx265-199-3.5-alt1.1 sisyphus+277560.100.1.1 1625697230 installed <13>Aug 3 02:34:29 rpmi: librav1e-0.6.6-alt1 sisyphus+320651.100.1.1 1684313161 installed <13>Aug 3 02:34:29 rpmi: libev4-4.33-alt2 sisyphus+286828.100.2.3 1634005197 installed <13>Aug 3 02:34:29 rpmi: python3-module-gevent-22.10.2-alt1 sisyphus+311250.61340.178.1 1685796005 installed <13>Aug 3 02:34:29 rpmi: libepoxy-1.5.10-alt1 sisyphus+296853.200.2.1 1647631866 installed <13>Aug 3 02:34:29 rpmi: libde265-1.0.11-alt1 sisyphus+314940.100.1.1 1675940477 installed <13>Aug 3 02:34:29 rpmi: libdav1d5-0.9.2-alt2 sisyphus+319138.140.3.1 1682251163 installed <13>Aug 3 02:34:29 rpmi: libdatrie-0.2.13-alt1_2 sisyphus+285649.100.1.1 1632260802 installed <13>Aug 3 02:34:29 rpmi: libthai-0.1.29-alt1_1 sisyphus+292947.100.1.1 1641111915 installed <13>Aug 3 02:34:29 rpmi: libverto-0.3.2-alt1_1 sisyphus+321176.2200.10.2 1684803947 installed <13>Aug 3 02:34:29 rpmi: liblmdb-0.9.29-alt1.1 sisyphus+306630.100.1.1 1663072360 installed <13>Aug 3 02:34:29 rpmi: libkeyutils-1.6.3-alt1 sisyphus+266061.100.1.1 1612919566 installed <13>Aug 3 02:34:29 rpmi: libcom_err-1.46.4.0.5.4cda-alt1 sisyphus+283826.100.1.1 1629975345 installed <86>Aug 3 02:34:29 groupadd[3367681]: group added to /etc/group: name=_keytab, GID=999 <86>Aug 3 02:34:29 groupadd[3367681]: group added to /etc/gshadow: name=_keytab <86>Aug 3 02:34:29 groupadd[3367681]: new group: name=_keytab, GID=999 <13>Aug 3 02:34:29 rpmi: libkrb5-1.21.1-alt1 sisyphus+325006.1000.1.1 1689496652 installed <86>Aug 3 02:34:29 groupadd[3367755]: group added to /etc/group: name=sasl, GID=998 <86>Aug 3 02:34:29 groupadd[3367755]: group added to /etc/gshadow: name=sasl <86>Aug 3 02:34:29 groupadd[3367755]: new group: name=sasl, GID=998 <13>Aug 3 02:34:29 rpmi: libsasl2-3-2.1.27-alt2.2 sisyphus+324359.6000.12.1 1689392001 installed <13>Aug 3 02:34:29 rpmi: libldap2-2.6.4-alt1 sisyphus+324359.600.5.1 1689262595 installed <13>Aug 3 02:34:29 rpmi: libpq5-15.3-alt2 sisyphus+325472.100.1.1 1690211368 installed <13>Aug 3 02:34:29 rpmi: python3-module-psycopg2-2.9.5-alt1 sisyphus+311250.16300.175.1 1685633229 installed <13>Aug 3 02:34:29 rpmi: python3-module-eventlet-0.33.3-alt2 sisyphus+318403.100.1.1 1681290339 installed <13>Aug 3 02:34:29 rpmi: libpixman-3:0.42.2-alt1 sisyphus+309549.100.1.1 1667649219 installed <13>Aug 3 02:34:29 rpmi: libaom3-3.5.0-alt1 sisyphus+312085.100.1.1 1671551546 installed <13>Aug 3 02:34:29 rpmi: libbrotlicommon-1.0.9-alt2 sisyphus+278430.100.1.2 1626213212 installed <13>Aug 3 02:34:30 rpmi: libbrotlidec-1.0.9-alt2 sisyphus+278430.100.1.2 1626213212 installed <13>Aug 3 02:34:30 rpmi: libgraphite2-1.3.14-alt2.1 sisyphus+279571.100.1.2 1626605111 installed <13>Aug 3 02:34:30 rpmi: libharfbuzz-8.0.1-alt1 sisyphus+324720.100.1.1 1689149430 installed <13>Aug 3 02:34:30 rpmi: libfreetype-2.13.1-alt1 sisyphus+324353.100.1.1 1688638057 installed <13>Aug 3 02:34:30 rpmi: libfontconfig1-2.14.2-alt7 sisyphus+319291.100.1.1 1682426296 installed <13>Aug 3 02:34:30 rpmi: libharfbuzz-gobject-8.0.1-alt1 sisyphus+324720.100.1.1 1689149430 installed <13>Aug 3 02:34:30 rpmi: libglvnd-7:1.6.0-alt2 sisyphus+321612.100.1.1 1684749007 installed <13>Aug 3 02:34:30 rpmi: libxshmfence-1.3.2-alt1 sisyphus+311428.400.1.1 1670577525 installed <13>Aug 3 02:34:30 rpmi: libpciaccess-1:0.17-alt1 sisyphus+308663.300.1.1 1666168260 installed <13>Aug 3 02:34:30 rpmi: libdrm-1:2.4.115-alt2 sisyphus+326300.100.1.1 1690981136 installed <13>Aug 3 02:34:30 rpmi: icon-theme-hicolor-0.17-alt2 sisyphus+248343.100.1.1 1584979043 installed <13>Aug 3 02:34:30 rpmi: perl-Try-Tiny-0.31-alt1 sisyphus+290597.100.1.1 1637915507 installed <13>Aug 3 02:34:30 rpmi: perl-IO-Socket-IP-0.42-alt1 sisyphus+325815.100.1.2 1690571193 installed <13>Aug 3 02:34:30 rpmi: perl-Module-Load-0.36-alt1 sisyphus+258992.100.1.1 1601543407 installed <13>Aug 3 02:34:30 rpmi: perl-Compress-Raw-Bzip2-2.206-alt1 sisyphus+325779.100.1.1 1690558767 installed <13>Aug 3 02:34:30 rpmi: perl-IO-Compress-Brotli-2:0.004001-alt3 sisyphus+302124.100.1.1 1655283093 installed <13>Aug 3 02:34:30 rpmi: perl-Clone-0.46-alt1 sisyphus+308850.100.1.3 1666451819 installed <13>Aug 3 02:34:30 rpmi: perl-HTML-Tagset-3.20-alt2 1317725093 installed <13>Aug 3 02:34:30 rpmi: perl-Term-ANSIColor-5.01-alt1 sisyphus+244783.100.1.2 1579747505 installed <13>Aug 3 02:34:30 rpmi: perl-Data-Dump-1.25-alt1 sisyphus+276551.100.1.1 1625126880 installed <13>Aug 3 02:34:30 rpmi: perl-Filter-1.64-alt1 sisyphus+305464.100.1.1 1660815327 installed <13>Aug 3 02:34:30 rpmi: perl-Encode-3.19-alt1 sisyphus+304776.100.1.1 1659623409 installed <13>Aug 3 02:34:30 rpmi: perl-URI-5.19-alt1 sisyphus+321559.100.1.1 1684663596 installed <13>Aug 3 02:34:30 rpmi: perl-IO-Compress-2.206-alt1 sisyphus+325819.100.1.1 1690563199 installed <13>Aug 3 02:34:30 rpmi: perl-Net-HTTP-6.23-alt1 sisyphus+323470.100.1.1 1687422469 installed <13>Aug 3 02:34:30 rpmi: perl-HTML-Parser-3.81-alt1 sisyphus+314462.100.1.1 1675193797 installed <13>Aug 3 02:34:30 rpmi: perl-WWW-RobotRules-6.02-alt1 1329756211 installed <13>Aug 3 02:34:30 rpmi: perl-Encode-Locale-1.05-alt1 1444608613 installed <13>Aug 3 02:34:30 rpmi: perl-IO-HTML-1.004-alt1 sisyphus+258983.100.1.1 1601542619 installed <13>Aug 3 02:34:30 rpmi: perl-HTTP-Message-6.44-alt1 sisyphus+309106.100.1.1 1666913573 installed <13>Aug 3 02:34:30 rpmi: perl-HTTP-Negotiate-6.01-alt1 1329760563 installed <13>Aug 3 02:34:30 rpmi: perl-libwww-6.72-alt1 sisyphus+325791.100.1.2 1690563984 installed <13>Aug 3 02:34:30 rpmi: perl-XML-LibXML-2.0209-alt1 sisyphus+325808.100.1.2 1690570827 installed <13>Aug 3 02:34:30 rpmi: perl-XML-SAX-1.02-alt1 sisyphus+232322.100.1.1 1560758406 installed <13>Aug 3 02:34:30 rpmi: perl-XML-Simple-2.25-alt2 sisyphus+257498.100.1.1 1599324034 installed <13>Aug 3 02:34:30 rpmi: icon-naming-utils-0.8.90-alt1 sisyphus+276851.100.1.1 1625243947 installed <13>Aug 3 02:34:30 rpmi: icon-theme-adwaita-44.0-alt1 sisyphus+317076.600.1.1 1679344664 installed <13>Aug 3 02:34:30 rpmi: usbids-20230519-alt1 sisyphus+321221.100.1.1 1684538206 installed <13>Aug 3 02:34:30 rpmi: pciids-20230728-alt1 sisyphus+325841.100.1.1 1690586353 installed <13>Aug 3 02:34:30 rpmi: hwdata-0.370-alt1 sisyphus+319911.1.10.1 1684006762 installed <13>Aug 3 02:34:30 rpmi: libdeflate-1.18-alt1 sisyphus+317484.100.1.1 1679768609 installed <13>Aug 3 02:34:30 rpmi: libtiff5-4.4.0-alt4 sisyphus+322581.100.1.2 1686180089 installed <13>Aug 3 02:34:30 rpmi: libgdk-pixbuf-locales-2.42.10-alt1 sisyphus+308991.100.1.1 1666721198 installed <13>Aug 3 02:34:30 rpmi: gtk+3-themes-incompatible-3.20-alt3 1461944560 installed <13>Aug 3 02:34:30 rpmi: libdevmapper-1.02.193-alt1 sisyphus+317421.100.1.1 1679684411 installed <13>Aug 3 02:34:30 rpmi: mount-2.39.1-alt1 sisyphus+323823.100.1.1 1687944164 installed <13>Aug 3 02:34:30 rpmi: losetup-2.39.1-alt1 sisyphus+323823.100.1.1 1687944164 installed <13>Aug 3 02:34:30 rpmi: lsblk-2.39.1-alt1 sisyphus+323823.100.1.1 1687944164 installed <86>Aug 3 02:34:30 groupadd[3369572]: group added to /etc/group: name=tape, GID=997 <86>Aug 3 02:34:30 groupadd[3369572]: group added to /etc/gshadow: name=tape <86>Aug 3 02:34:30 groupadd[3369572]: new group: name=tape, GID=997 <86>Aug 3 02:34:30 groupadd[3369593]: group added to /etc/group: name=dialout, GID=996 <86>Aug 3 02:34:30 groupadd[3369593]: group added to /etc/gshadow: name=dialout <86>Aug 3 02:34:30 groupadd[3369593]: new group: name=dialout, GID=996 <86>Aug 3 02:34:30 groupadd[3369609]: group added to /etc/group: name=input, GID=995 <86>Aug 3 02:34:30 groupadd[3369609]: group added to /etc/gshadow: name=input <86>Aug 3 02:34:30 groupadd[3369609]: new group: name=input, GID=995 <86>Aug 3 02:34:30 groupadd[3369627]: group added to /etc/group: name=video, GID=994 <86>Aug 3 02:34:30 groupadd[3369627]: group added to /etc/gshadow: name=video <86>Aug 3 02:34:30 groupadd[3369627]: new group: name=video, GID=994 <86>Aug 3 02:34:30 groupadd[3369647]: group added to /etc/group: name=render, GID=993 <86>Aug 3 02:34:30 groupadd[3369647]: group added to /etc/gshadow: name=render <86>Aug 3 02:34:30 groupadd[3369647]: new group: name=render, GID=993 <86>Aug 3 02:34:30 groupadd[3369663]: group added to /etc/group: name=sgx, GID=992 <86>Aug 3 02:34:30 groupadd[3369663]: group added to /etc/gshadow: name=sgx <86>Aug 3 02:34:30 groupadd[3369663]: new group: name=sgx, GID=992 <13>Aug 3 02:34:30 rpmi: udev-1:253.7-alt1 sisyphus+325621.200.2.1 1690469230 installed <13>Aug 3 02:34:31 rpmi: dmsetup-1.02.193-alt1 sisyphus+317421.100.1.1 1679684411 installed <13>Aug 3 02:34:31 rpmi: desktop-file-utils-0.26-alt4 sisyphus+324226.100.1.1 1688469484 installed <13>Aug 3 02:34:31 rpmi: shared-mime-info-2.2-alt1 sisyphus+297388.100.1.1 1648466615 installed <13>Aug 3 02:34:31 rpmi: gsettings-desktop-schemas-data-44.0-alt1 sisyphus+317076.300.1.1 1679344430 installed <13>Aug 3 02:34:31 rpmi: libgio-2.76.4-alt1 sisyphus+324380.100.1.1 1688669907 installed <13>Aug 3 02:34:31 rpmi: gsettings-desktop-schemas-44.0-alt1 sisyphus+317076.300.1.1 1679344430 installed <13>Aug 3 02:34:31 rpmi: gobject-introspection-1.76.1-alt1 sisyphus+311250.42520.176.1 1685741665 installed <13>Aug 3 02:34:31 rpmi: libgdk-pixbuf-2.42.10-alt1 sisyphus+308991.100.1.1 1666721198 installed <13>Aug 3 02:34:31 rpmi: gtk4-update-icon-cache-4.10.4-alt1 sisyphus+322490.40.2.3 1686184033 installed <13>Aug 3 02:34:31 rpmi: gobject-introspection-x11-1.76.1-alt1 sisyphus+311250.42520.176.1 1685741665 installed <13>Aug 3 02:34:31 rpmi: libheif-1.15.2-alt1 sisyphus+317953.100.1.1 1680527858 installed <13>Aug 3 02:34:31 rpmi: libgdk-pixbuf-gir-2.42.10-alt1 sisyphus+308991.100.1.1 1666721198 installed <13>Aug 3 02:34:31 rpmi: libatk-gir-2.48.3-alt1 sisyphus+322046.200.1.1 1685216218 installed <13>Aug 3 02:34:31 rpmi: libharfbuzz-gir-8.0.1-alt1 sisyphus+324720.100.1.1 1689149430 installed <13>Aug 3 02:34:31 rpmi: libdconf-0.40.0-alt3 sisyphus+325650.100.1.1 1690417205 installed <13>Aug 3 02:34:31 rpmi: libjson-glib-1.6.6-alt1 sisyphus+299768.200.2.1 1652264093 installed <13>Aug 3 02:34:31 rpmi: libgusb-0.4.6-alt1 sisyphus+322791.100.1.1 1686422571 installed <13>Aug 3 02:34:31 rpmi: libcolord-1.4.6-alt1 sisyphus+296000.100.1.1 1646050421 installed <13>Aug 3 02:34:31 rpmi: dconf-profile-0.1-alt1 sisyphus+325633.340.3.1 1690415358 installed <13>Aug 3 02:34:31 rpmi: libX11-locales-3:1.8.6-alt1 sisyphus+323114.100.1.1 1686850054 installed <13>Aug 3 02:34:31 rpmi: libXdmcp-1.1.4-alt1 sisyphus+311188.1000.1.1 1670233857 installed <13>Aug 3 02:34:31 rpmi: libXau-1.0.11-alt1 sisyphus+311428.100.1.1 1670577439 installed <13>Aug 3 02:34:31 rpmi: libxcb-1.15-alt1 sisyphus+299436.300.1.1 1651655472 installed <13>Aug 3 02:34:31 rpmi: libX11-3:1.8.6-alt1 sisyphus+323114.100.1.1 1686850054 installed <13>Aug 3 02:34:31 rpmi: libXext-1.3.5-alt1 sisyphus+309285.100.1.1 1667212412 installed <13>Aug 3 02:34:31 rpmi: libXrender-0.9.11-alt1 sisyphus+308841.100.1.1 1666436130 installed <13>Aug 3 02:34:31 rpmi: libcairo-1:1.17.8-alt1 sisyphus+324101.100.2.1 1690287710 installed <13>Aug 3 02:34:31 rpmi: libXi-1.8-alt1 sisyphus+285490.200.1.1 1632124174 installed <13>Aug 3 02:34:31 rpmi: libXfixes-6.0.0-alt1 sisyphus+284644.300.1.1 1630910331 installed <13>Aug 3 02:34:31 rpmi: libcairo-gobject-1:1.17.8-alt1 sisyphus+324101.100.2.1 1690287710 installed <13>Aug 3 02:34:31 rpmi: libXrandr-1.5.3-alt1 sisyphus+310375.100.1.1 1669010696 installed <13>Aug 3 02:34:31 rpmi: libXcursor-1.2.1-alt1 sisyphus+297765.200.1.1 1649053926 installed <13>Aug 3 02:34:31 rpmi: libXft-2.3.7-alt1 sisyphus+310164.100.1.1 1668680608 installed <13>Aug 3 02:34:31 rpmi: libpango-1.50.14-alt1 sisyphus+316117.100.1.1 1677780551 installed <13>Aug 3 02:34:31 rpmi: libtk-8.6.13-alt1 sisyphus+310696.200.1.1 1669548530 installed <13>Aug 3 02:34:31 rpmi: tk-8.6.13-alt1 sisyphus+310696.200.1.1 1669548530 installed <13>Aug 3 02:34:31 rpmi: libXxf86vm-1.1.5-alt1 sisyphus+308663.1400.1.1 1666168523 installed <13>Aug 3 02:34:31 rpmi: libXinerama-1.1.5-alt1 sisyphus+309287.100.1.1 1667213208 installed <13>Aug 3 02:34:31 rpmi: libXcomposite-0.4.6-alt1 sisyphus+311188.200.1.1 1670233682 installed <13>Aug 3 02:34:31 rpmi: libXdamage-1.1.6-alt1 sisyphus+311188.300.1.1 1670233711 installed <13>Aug 3 02:34:31 rpmi: libXt-1.2.1-alt1 sisyphus+265202.200.1.1 1611565457 installed <13>Aug 3 02:34:31 rpmi: libXmu-1.1.4-alt1 sisyphus+308663.1000.1.1 1666168409 installed <13>Aug 3 02:34:31 rpmi: libXpm-3.5.15-alt1 sisyphus+313628.100.1.1 1674030938 installed <13>Aug 3 02:34:31 rpmi: libgd3-2.3.3-alt1 sisyphus+286379.100.1.1 1633353307 installed <13>Aug 3 02:34:31 rpmi: libGLX-mesa-4:23.1.4-alt1 sisyphus+326300.200.1.1 1690981422 installed <13>Aug 3 02:34:31 rpmi: libGLX-7:1.6.0-alt2 sisyphus+321612.100.1.1 1684749007 installed <13>Aug 3 02:34:31 rpmi: libGL-7:1.6.0-alt2 sisyphus+321612.100.1.1 1684749007 installed <13>Aug 3 02:34:31 rpmi: libGLU-4:9.0.1-alt1 sisyphus+278350.100.1.2 1626174382 installed <13>Aug 3 02:34:31 rpmi: libfreeglut-3.4.0-alt1 sisyphus+308137.100.1.1 1665325473 installed <13>Aug 3 02:34:31 rpmi: tcl-tix-8.4.3-alt4 sisyphus+277292.300.2.1 1625442550 installed <13>Aug 3 02:34:32 rpmi: python3-modules-tkinter-3.11.4-alt2 sisyphus+324359.500.4.1 1689257961 installed <13>Aug 3 02:34:32 rpmi: python3-module-automat-22.10.0-alt1 sisyphus+322927.200.2.1 1686736914 installed <13>Aug 3 02:34:32 rpmi: python3-module-twisted-logger-22.10.0-alt2 sisyphus+325754.100.1.1 1690535804 installed <13>Aug 3 02:34:32 rpmi: python3-module-twisted-core-22.10.0-alt2 sisyphus+325754.100.1.1 1690535804 installed <13>Aug 3 02:34:32 rpmi: python3-module-twisted-names-22.10.0-alt2 sisyphus+325754.100.1.1 1690535804 installed <13>Aug 3 02:34:32 rpmi: python3-module-tornado-6.3.2-alt1 sisyphus+311250.21520.175.1 1685634073 installed <13>Aug 3 02:34:32 rpmi: python3-module-gunicorn-20.1.0-alt2 sisyphus+297766.100.1.1 1649054912 installed <13>Aug 3 02:34:32 rpmi: python3-module-aiohttp-3.8.4-alt1 sisyphus+311250.43420.178.1 1685782135 installed <13>Aug 3 02:34:32 rpmi: python3-module-GeoIP2-4.7.0-alt1 sisyphus+320561.100.1.1 1684172310 installed <13>Aug 3 02:34:33 rpmi: python3-module-django-3.2.20-alt1 sisyphus+324744.100.1.1 1689163331 installed <13>Aug 3 02:34:33 rpmi: python3-module-black-23.7.0-alt1 sisyphus+325184.100.2.1 1689848178 installed <13>Aug 3 02:34:33 rpmi: python3-module-hypothesis-6.75.3-alt2 sisyphus+311250.71020.178.1 1685813939 installed <13>Aug 3 02:34:33 rpmi: python3-module-numpy-testing-1:1.25.1-alt1 sisyphus+323343.140.2.1 1689684591 installed <13>Aug 3 02:34:33 rpmi: liblasi-1.1.3-alt3 sisyphus+286812.100.2.1 1633968131 installed <13>Aug 3 02:34:33 rpmi: librsvg-1:2.56.3-alt1 sisyphus+325321.100.1.1 1689966477 installed <13>Aug 3 02:34:33 rpmi: libpango-gir-1.50.14-alt1 sisyphus+316117.100.1.1 1677780551 installed <13>Aug 3 02:34:33 rpmi: python3-module-pycairo-1.24.0-alt1 sisyphus+323304.100.1.1 1687167406 installed <13>Aug 3 02:34:33 rpmi: python3-module-Pillow-9.5.0-alt1 sisyphus+311250.40310.176.1 1685740884 installed <13>Aug 3 02:34:33 rpmi: liblz4-1:1.9.4-alt1 sisyphus+309416.100.1.1 1667412981 installed <13>Aug 3 02:34:33 rpmi: libsystemd-1:253.7-alt1 sisyphus+325621.200.2.1 1690469230 installed <13>Aug 3 02:34:33 rpmi: libdbus-1.14.8-alt1 sisyphus+324298.100.1.1 1688559488 installed <13>Aug 3 02:34:33 rpmi: libat-spi2-core-2.48.3-alt1 sisyphus+322046.200.1.1 1685216218 installed <13>Aug 3 02:34:33 rpmi: at-spi2-atk-2.48.3-alt1 sisyphus+322046.200.1.1 1685216218 installed <13>Aug 3 02:34:33 rpmi: dbus-tools-1.14.8-alt1 sisyphus+324298.100.1.1 1688559488 installed <86>Aug 3 02:34:33 groupadd[3373999]: group added to /etc/group: name=messagebus, GID=991 <86>Aug 3 02:34:33 groupadd[3373999]: group added to /etc/gshadow: name=messagebus <86>Aug 3 02:34:33 groupadd[3373999]: new group: name=messagebus, GID=991 <86>Aug 3 02:34:33 useradd[3374005]: new user: name=messagebus, UID=999, GID=991, home=/run/dbus, shell=/dev/null, from=none <13>Aug 3 02:34:33 rpmi: dbus-1.14.8-alt1 sisyphus+324298.100.1.1 1688559488 installed <13>Aug 3 02:34:33 rpmi: dconf-0.40.0-alt3 sisyphus+325650.100.1.1 1690417205 installed <13>Aug 3 02:34:33 rpmi: libgtk+3-schemas-3.24.38-alt1 sisyphus+321614.100.1.1 1684749819 installed <13>Aug 3 02:34:33 rpmi: libavahi-0.8-alt2 sisyphus+321176.300.10.2 1684802422 installed <13>Aug 3 02:34:33 rpmi: libcups-2.4.2-alt3 sisyphus+325006.300.1.1 1689495737 installed <13>Aug 3 02:34:33 rpmi: libgtk+2-2.24.33-alt1 sisyphus+278555.100.1.2 1626252653 installed <13>Aug 3 02:34:33 rpmi: libgtkglext-1.2.0-alt5 sisyphus+278412.100.1.2 1626206885 installed <13>Aug 3 02:34:33 rpmi: libglade-2.6.4-alt6 sisyphus+286822.100.2.1 1633968398 installed <13>Aug 3 02:34:35 rpmi: libgs-10.01.1-alt1 sisyphus+318450.100.1.1 1681389065 installed <13>Aug 3 02:34:35 rpmi: libgraphviz-8.0.5-alt2 sisyphus+311250.1320.175.1 1685627614 installed <13>Aug 3 02:34:35 rpmi: python3-module-pygraphviz-1.11-alt1 sisyphus+326020.100.1.1 1690660890 installed <13>Aug 3 02:34:35 rpmi: graphviz-8.0.5-alt2 sisyphus+311250.1320.175.1 1685627614 installed <13>Aug 3 02:34:35 rpmi: python3-module-pydot-1.4.2-alt1 sisyphus+277818.100.1.1 1625829511 installed <13>Aug 3 02:34:35 rpmi: libpolkit-0.120-alt1.qa2 sisyphus+296007.100.1.1 1646053422 installed <86>Aug 3 02:34:35 groupadd[3375553]: group added to /etc/group: name=colord, GID=990 <86>Aug 3 02:34:35 groupadd[3375553]: group added to /etc/gshadow: name=colord <86>Aug 3 02:34:35 groupadd[3375553]: new group: name=colord, GID=990 <86>Aug 3 02:34:35 useradd[3375559]: new user: name=colord, UID=998, GID=990, home=/var/colord, shell=/dev/null, from=none <13>Aug 3 02:34:35 rpmi: colord-1.4.6-alt1 sisyphus+296000.100.1.1 1646050421 installed <13>Aug 3 02:34:36 rpmi: libgtk+3-3.24.38-alt1 sisyphus+321614.100.1.1 1684749819 installed <13>Aug 3 02:34:36 rpmi: libgtk+3-gir-3.24.38-alt1 sisyphus+321614.100.1.1 1684749819 installed <13>Aug 3 02:34:36 rpmi: python3-module-pygobject3-3.44.1-alt1 sisyphus+311250.46320.178.1 1685784051 installed <13>Aug 3 02:34:36 rpmi: python3-module-mpl_toolkits-3.7.0-alt3 sisyphus+323175.100.1.1 1686946506 installed <13>Aug 3 02:34:36 rpmi: python3-module-matplotlib-cairo-3.7.0-alt3 sisyphus+323175.100.1.1 1686946506 installed <13>Aug 3 02:34:36 rpmi: python3-module-matplotlib-gtk3-3.7.0-alt3 sisyphus+323175.100.1.1 1686946506 installed <13>Aug 3 02:34:36 rpmi: python3-module-matplotlib-3.7.0-alt3 sisyphus+323175.100.1.1 1686946506 installed <13>Aug 3 02:34:36 rpmi: python3-module-networkx-drawing-2:2.8.8-alt1 sisyphus+315551.100.1.1 1676908769 installed <13>Aug 3 02:34:36 rpmi: python3-module-networkx-2:2.8.8-alt1 sisyphus+315551.100.1.1 1676908769 installed <13>Aug 3 02:34:37 rpmi: python3-module-scipy-1.10.1-alt1 sisyphus+311250.72610.178.1 1685817153 installed <13>Aug 3 02:34:37 rpmi: python3-module-shapely-2.0.1-alt2 sisyphus+311250.72720.178.1 1685817231 installed <13>Aug 3 02:34:37 rpmi: python3-module-jsonschema-4.18.4-alt1 sisyphus+325129.100.1.1 1689695465 installed <13>Aug 3 02:34:37 rpmi: python3-module-wheel-0.41.0-alt1 sisyphus+325449.100.1.1 1690188189 installed <13>Aug 3 02:34:37 rpmi: pytest3-7.4.0-alt1 sisyphus+325101.100.3.1 1689758053 installed <13>Aug 3 02:34:37 rpmi: python3-module-rtree-0.9.4-alt1 sisyphus+281104.300.2.1 1627365097 installed <13>Aug 3 02:34:37 rpmi: python3-module-svg-path-4.1-alt1 sisyphus+294648.100.2.2 1643900295 installed <13>Aug 3 02:34:37 rpmi: python3-module-svg-6.1-alt4 sisyphus+308517.100.1.1 1665930762 installed <13>Aug 3 02:34:37 rpmi: python3-module-msgpack-1.0.5-alt1 sisyphus+311250.32240.176.1 1685737888 installed Building target platforms: x86_64 Building for target x86_64 Wrote: /usr/src/in/nosrpm/python3-module-trimesh-3.22.0-alt1.nosrc.rpm (w1.gzdio) <13>Aug 3 02:34:41 rpmi: python3-module-pyproject-installer-0.5.2-alt1 sisyphus+324644.100.2.1 1689089627 installed Installing python3-module-trimesh-3.22.0-alt1.src.rpm Building target platforms: x86_64 Building for target x86_64 Executing(%prep): /bin/sh -e /usr/src/tmp/rpm-tmp.12161 + umask 022 + /bin/mkdir -p /usr/src/RPM/BUILD + cd /usr/src/RPM/BUILD + cd /usr/src/RPM/BUILD + rm -rf trimesh-3.22.0 + echo 'Source #0 (trimesh-3.22.0.tar):' Source #0 (trimesh-3.22.0.tar): + /bin/tar -xf /usr/src/RPM/SOURCES/trimesh-3.22.0.tar + cd trimesh-3.22.0 + /bin/chmod -c -Rf u+rwX,go-w . + sed -r -i '/^[[:blank:]]*'\''glooey'\'',/d' setup.py + sed -r -i '/^[[:blank:]]*'\''meshio'\'',/d' setup.py + sed -r -i '/^[[:blank:]]*'\''python-fcl'\'',/d' setup.py + sed -r -i '/^[[:blank:]]*'\''xatlas'\'',/d' setup.py + mkdir -p _stub + cat + sed -r -i '/'\''pyinstrument'\'',/d' setup.py + exit 0 Executing(%build): /bin/sh -e /usr/src/tmp/rpm-tmp.12161 + umask 022 + /bin/mkdir -p /usr/src/RPM/BUILD + cd /usr/src/RPM/BUILD + cd trimesh-3.22.0 + export 'CFLAGS=-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto' + CFLAGS='-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto' + export 'CXXFLAGS=-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto' + CXXFLAGS='-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto' + export 'FFLAGS=-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto' + FFLAGS='-pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto' + /usr/bin/python3 -m pyproject_installer -v build INFO : pyproject_installer.build_cmd._build : Building wheel INFO : pyproject_installer.build_cmd._build : Source tree: /usr/src/RPM/BUILD/trimesh-3.22.0 INFO : pyproject_installer.build_cmd._build : Output dir: /usr/src/RPM/BUILD/trimesh-3.22.0/dist DEBUG : pyproject_installer.lib.build_backend : Validating source path DEBUG : pyproject_installer.lib.build_backend : Checking for PEP517 spec DEBUG : pyproject_installer.lib.build_backend : Parsing configuration file: /usr/src/RPM/BUILD/trimesh-3.22.0/pyproject.toml INFO : backend_caller.py : Calling hook build_wheel in subprocess INFO : backend_caller.py : Build backend: setuptools.build_meta INFO : backend_caller.py : Hook args: ['/usr/src/RPM/BUILD/trimesh-3.22.0/dist'] INFO : backend_caller.py : Hook kwargs: {'config_settings': None} INFO : root : running bdist_wheel INFO : root : running build INFO : root : running build_py INFO : root : creating build INFO : root : creating build/lib INFO : root : creating build/lib/trimesh INFO : root : copying trimesh/version.py -> build/lib/trimesh INFO : root : copying trimesh/util.py -> build/lib/trimesh INFO : root : copying trimesh/units.py -> build/lib/trimesh INFO : root : copying trimesh/triangles.py -> build/lib/trimesh INFO : root : copying trimesh/transformations.py -> build/lib/trimesh INFO : root : copying trimesh/smoothing.py -> build/lib/trimesh INFO : root : copying trimesh/schemas.py -> build/lib/trimesh INFO : root : copying trimesh/sample.py -> build/lib/trimesh INFO : root : copying trimesh/resolvers.py -> build/lib/trimesh INFO : root : copying trimesh/repair.py -> build/lib/trimesh INFO : root : copying trimesh/rendering.py -> build/lib/trimesh INFO : root : copying trimesh/remesh.py -> build/lib/trimesh INFO : root : copying trimesh/registration.py -> build/lib/trimesh INFO : root : copying trimesh/proximity.py -> build/lib/trimesh INFO : root : copying trimesh/primitives.py -> build/lib/trimesh INFO : root : copying trimesh/poses.py -> build/lib/trimesh INFO : root : copying trimesh/points.py -> build/lib/trimesh INFO : root : copying trimesh/permutate.py -> build/lib/trimesh INFO : root : copying trimesh/parent.py -> build/lib/trimesh INFO : root : copying trimesh/nsphere.py -> build/lib/trimesh INFO : root : copying trimesh/interval.py -> build/lib/trimesh INFO : root : copying trimesh/intersections.py -> build/lib/trimesh INFO : root : copying trimesh/integrate.py -> build/lib/trimesh INFO : root : copying trimesh/inertia.py -> build/lib/trimesh INFO : root : copying trimesh/grouping.py -> build/lib/trimesh INFO : root : copying trimesh/graph.py -> build/lib/trimesh INFO : root : copying trimesh/geometry.py -> build/lib/trimesh INFO : root : copying trimesh/exceptions.py -> build/lib/trimesh INFO : root : copying trimesh/decomposition.py -> build/lib/trimesh INFO : root : copying trimesh/curvature.py -> build/lib/trimesh INFO : root : copying trimesh/creation.py -> build/lib/trimesh INFO : root : copying trimesh/convex.py -> build/lib/trimesh INFO : root : copying trimesh/constants.py -> build/lib/trimesh INFO : root : copying trimesh/comparison.py -> build/lib/trimesh INFO : root : copying trimesh/collision.py -> build/lib/trimesh INFO : root : copying trimesh/caching.py -> build/lib/trimesh INFO : root : copying trimesh/bounds.py -> build/lib/trimesh INFO : root : copying trimesh/boolean.py -> build/lib/trimesh INFO : root : copying trimesh/base.py -> build/lib/trimesh INFO : root : copying trimesh/__init__.py -> build/lib/trimesh INFO : root : creating build/lib/trimesh/ray INFO : root : copying trimesh/ray/ray_util.py -> build/lib/trimesh/ray INFO : root : copying trimesh/ray/ray_triangle.py -> build/lib/trimesh/ray INFO : root : copying trimesh/ray/ray_pyembree.py -> build/lib/trimesh/ray INFO : root : copying trimesh/ray/__init__.py -> build/lib/trimesh/ray INFO : root : creating build/lib/trimesh/path INFO : root : copying trimesh/path/util.py -> build/lib/trimesh/path INFO : root : copying trimesh/path/traversal.py -> build/lib/trimesh/path INFO : root : copying trimesh/path/simplify.py -> build/lib/trimesh/path INFO : root : copying trimesh/path/segments.py -> build/lib/trimesh/path INFO : root : copying trimesh/path/repair.py -> build/lib/trimesh/path INFO : root : copying trimesh/path/raster.py -> build/lib/trimesh/path INFO : root : copying trimesh/path/polygons.py -> build/lib/trimesh/path INFO : root : copying trimesh/path/path.py -> build/lib/trimesh/path INFO : root : copying trimesh/path/packing.py -> build/lib/trimesh/path INFO : root : copying trimesh/path/intersections.py -> build/lib/trimesh/path INFO : root : copying trimesh/path/entities.py -> build/lib/trimesh/path INFO : root : copying trimesh/path/curve.py -> build/lib/trimesh/path INFO : root : copying trimesh/path/creation.py -> build/lib/trimesh/path INFO : root : copying trimesh/path/arc.py -> build/lib/trimesh/path INFO : root : copying trimesh/path/__init__.py -> build/lib/trimesh/path INFO : root : creating build/lib/trimesh/path/exchange INFO : root : copying trimesh/path/exchange/svg_io.py -> build/lib/trimesh/path/exchange INFO : root : copying trimesh/path/exchange/misc.py -> build/lib/trimesh/path/exchange INFO : root : copying trimesh/path/exchange/load.py -> build/lib/trimesh/path/exchange INFO : root : copying trimesh/path/exchange/export.py -> build/lib/trimesh/path/exchange INFO : root : copying trimesh/path/exchange/dxf.py -> build/lib/trimesh/path/exchange INFO : root : copying trimesh/path/exchange/__init__.py -> build/lib/trimesh/path/exchange INFO : root : creating build/lib/trimesh/scene INFO : root : copying trimesh/scene/transforms.py -> build/lib/trimesh/scene INFO : root : copying trimesh/scene/scene.py -> build/lib/trimesh/scene INFO : root : copying trimesh/scene/lighting.py -> build/lib/trimesh/scene INFO : root : copying trimesh/scene/cameras.py -> build/lib/trimesh/scene INFO : root : copying trimesh/scene/__init__.py -> build/lib/trimesh/scene INFO : root : creating build/lib/trimesh/voxel INFO : root : copying trimesh/voxel/transforms.py -> build/lib/trimesh/voxel INFO : root : copying trimesh/voxel/runlength.py -> build/lib/trimesh/voxel INFO : root : copying trimesh/voxel/ops.py -> build/lib/trimesh/voxel INFO : root : copying trimesh/voxel/morphology.py -> build/lib/trimesh/voxel INFO : root : copying trimesh/voxel/encoding.py -> build/lib/trimesh/voxel INFO : root : copying trimesh/voxel/creation.py -> build/lib/trimesh/voxel INFO : root : copying trimesh/voxel/base.py -> build/lib/trimesh/voxel INFO : root : copying trimesh/voxel/__init__.py -> build/lib/trimesh/voxel INFO : root : creating build/lib/trimesh/visual INFO : root : copying trimesh/visual/texture.py -> build/lib/trimesh/visual INFO : root : copying trimesh/visual/objects.py -> build/lib/trimesh/visual INFO : root : copying trimesh/visual/material.py -> build/lib/trimesh/visual INFO : root : copying trimesh/visual/color.py -> build/lib/trimesh/visual INFO : root : copying trimesh/visual/base.py -> build/lib/trimesh/visual INFO : root : copying trimesh/visual/__init__.py -> build/lib/trimesh/visual INFO : root : creating build/lib/trimesh/viewer INFO : root : copying trimesh/viewer/windowed.py -> build/lib/trimesh/viewer INFO : root : copying trimesh/viewer/widget.py -> build/lib/trimesh/viewer INFO : root : copying trimesh/viewer/trackball.py -> build/lib/trimesh/viewer INFO : root : copying trimesh/viewer/notebook.py -> build/lib/trimesh/viewer INFO : root : copying trimesh/viewer/__init__.py -> build/lib/trimesh/viewer INFO : root : creating build/lib/trimesh/exchange INFO : root : copying trimesh/exchange/xyz.py -> build/lib/trimesh/exchange INFO : root : copying trimesh/exchange/xaml.py -> build/lib/trimesh/exchange INFO : root : copying trimesh/exchange/urdf.py -> build/lib/trimesh/exchange INFO : root : copying trimesh/exchange/threemf.py -> build/lib/trimesh/exchange INFO : root : copying trimesh/exchange/threedxml.py -> build/lib/trimesh/exchange INFO : root : copying trimesh/exchange/stl.py -> build/lib/trimesh/exchange INFO : root : copying trimesh/exchange/ply.py -> build/lib/trimesh/exchange INFO : root : copying trimesh/exchange/openctm.py -> build/lib/trimesh/exchange INFO : root : copying trimesh/exchange/off.py -> build/lib/trimesh/exchange INFO : root : copying trimesh/exchange/obj.py -> build/lib/trimesh/exchange INFO : root : copying trimesh/exchange/misc.py -> build/lib/trimesh/exchange INFO : root : copying trimesh/exchange/load.py -> build/lib/trimesh/exchange INFO : root : copying trimesh/exchange/gltf.py -> build/lib/trimesh/exchange INFO : root : copying trimesh/exchange/export.py -> build/lib/trimesh/exchange INFO : root : copying trimesh/exchange/dae.py -> build/lib/trimesh/exchange INFO : root : copying trimesh/exchange/binvox.py -> build/lib/trimesh/exchange INFO : root : copying trimesh/exchange/__init__.py -> build/lib/trimesh/exchange INFO : root : creating build/lib/trimesh/resources INFO : root : copying trimesh/resources/__init__.py -> build/lib/trimesh/resources INFO : root : creating build/lib/trimesh/interfaces INFO : root : copying trimesh/interfaces/vhacd.py -> build/lib/trimesh/interfaces INFO : root : copying trimesh/interfaces/scad.py -> build/lib/trimesh/interfaces INFO : root : copying trimesh/interfaces/gmsh.py -> build/lib/trimesh/interfaces INFO : root : copying trimesh/interfaces/generic.py -> build/lib/trimesh/interfaces INFO : root : copying trimesh/interfaces/blender.py -> build/lib/trimesh/interfaces INFO : root : copying trimesh/interfaces/__init__.py -> build/lib/trimesh/interfaces INFO : root : creating build/lib/trimesh/resources/templates INFO : root : copying trimesh/resources/templates/viewer.zip -> build/lib/trimesh/resources/templates INFO : root : copying trimesh/resources/templates/ply.json -> build/lib/trimesh/resources/templates INFO : root : copying trimesh/resources/templates/path.svg -> build/lib/trimesh/resources/templates INFO : root : copying trimesh/resources/templates/dxf.json -> build/lib/trimesh/resources/templates INFO : root : copying trimesh/resources/templates/blender_boolean.py.tmpl -> build/lib/trimesh/resources/templates INFO : root : copying trimesh/resources/templates/base.svg -> build/lib/trimesh/resources/templates INFO : root : copying trimesh/resources/units_to_inches.json -> build/lib/trimesh/resources INFO : root : creating build/lib/trimesh/resources/schema INFO : root : copying trimesh/resources/schema/urdf.xsd -> build/lib/trimesh/resources/schema INFO : root : copying trimesh/resources/schema/gltf2.schema.zip -> build/lib/trimesh/resources/schema INFO : root : copying trimesh/resources/schema/README.md -> build/lib/trimesh/resources/schema INFO : root : creating build/lib/trimesh/resources/schema/primitive INFO : root : copying trimesh/resources/schema/primitive/wkt.polygon.schema.json -> build/lib/trimesh/resources/schema/primitive INFO : root : copying trimesh/resources/schema/primitive/trimesh.schema.json -> build/lib/trimesh/resources/schema/primitive INFO : root : copying trimesh/resources/schema/primitive/transform.schema.json -> build/lib/trimesh/resources/schema/primitive INFO : root : copying trimesh/resources/schema/primitive/sphere.schema.json -> build/lib/trimesh/resources/schema/primitive INFO : root : copying trimesh/resources/schema/primitive/scenegraph.schema.json -> build/lib/trimesh/resources/schema/primitive INFO : root : copying trimesh/resources/schema/primitive/primitive.schema.json -> build/lib/trimesh/resources/schema/primitive INFO : root : copying trimesh/resources/schema/primitive/extrusion.schema.json -> build/lib/trimesh/resources/schema/primitive INFO : root : copying trimesh/resources/schema/primitive/cylinder.schema.json -> build/lib/trimesh/resources/schema/primitive INFO : root : copying trimesh/resources/schema/primitive/capsule.schema.json -> build/lib/trimesh/resources/schema/primitive INFO : root : copying trimesh/resources/schema/primitive/box.schema.json -> build/lib/trimesh/resources/schema/primitive INFO : wheel : installing to build/bdist.linux-x86_64/wheel INFO : root : running install INFO : root : running install_lib INFO : root : creating build/bdist.linux-x86_64 INFO : root : creating build/bdist.linux-x86_64/wheel INFO : root : creating build/bdist.linux-x86_64/wheel/trimesh INFO : root : creating build/bdist.linux-x86_64/wheel/trimesh/interfaces INFO : root : copying build/lib/trimesh/interfaces/__init__.py -> build/bdist.linux-x86_64/wheel/trimesh/interfaces INFO : root : copying build/lib/trimesh/interfaces/blender.py -> build/bdist.linux-x86_64/wheel/trimesh/interfaces INFO : root : copying build/lib/trimesh/interfaces/generic.py -> build/bdist.linux-x86_64/wheel/trimesh/interfaces INFO : root : copying build/lib/trimesh/interfaces/gmsh.py -> build/bdist.linux-x86_64/wheel/trimesh/interfaces INFO : root : copying build/lib/trimesh/interfaces/scad.py -> build/bdist.linux-x86_64/wheel/trimesh/interfaces INFO : root : copying build/lib/trimesh/interfaces/vhacd.py -> build/bdist.linux-x86_64/wheel/trimesh/interfaces INFO : root : creating build/bdist.linux-x86_64/wheel/trimesh/resources INFO : root : creating build/bdist.linux-x86_64/wheel/trimesh/resources/schema INFO : root : creating build/bdist.linux-x86_64/wheel/trimesh/resources/schema/primitive INFO : root : copying build/lib/trimesh/resources/schema/primitive/box.schema.json -> build/bdist.linux-x86_64/wheel/trimesh/resources/schema/primitive INFO : root : copying build/lib/trimesh/resources/schema/primitive/capsule.schema.json -> build/bdist.linux-x86_64/wheel/trimesh/resources/schema/primitive INFO : root : copying build/lib/trimesh/resources/schema/primitive/cylinder.schema.json -> build/bdist.linux-x86_64/wheel/trimesh/resources/schema/primitive INFO : root : copying build/lib/trimesh/resources/schema/primitive/extrusion.schema.json -> build/bdist.linux-x86_64/wheel/trimesh/resources/schema/primitive INFO : root : copying build/lib/trimesh/resources/schema/primitive/primitive.schema.json -> build/bdist.linux-x86_64/wheel/trimesh/resources/schema/primitive INFO : root : copying build/lib/trimesh/resources/schema/primitive/scenegraph.schema.json -> build/bdist.linux-x86_64/wheel/trimesh/resources/schema/primitive INFO : root : copying build/lib/trimesh/resources/schema/primitive/sphere.schema.json -> build/bdist.linux-x86_64/wheel/trimesh/resources/schema/primitive INFO : root : copying build/lib/trimesh/resources/schema/primitive/transform.schema.json -> build/bdist.linux-x86_64/wheel/trimesh/resources/schema/primitive INFO : root : copying build/lib/trimesh/resources/schema/primitive/trimesh.schema.json -> build/bdist.linux-x86_64/wheel/trimesh/resources/schema/primitive INFO : root : copying build/lib/trimesh/resources/schema/primitive/wkt.polygon.schema.json -> build/bdist.linux-x86_64/wheel/trimesh/resources/schema/primitive INFO : root : copying build/lib/trimesh/resources/schema/README.md -> build/bdist.linux-x86_64/wheel/trimesh/resources/schema INFO : root : copying build/lib/trimesh/resources/schema/gltf2.schema.zip -> build/bdist.linux-x86_64/wheel/trimesh/resources/schema INFO : root : copying build/lib/trimesh/resources/schema/urdf.xsd -> build/bdist.linux-x86_64/wheel/trimesh/resources/schema INFO : root : copying build/lib/trimesh/resources/units_to_inches.json -> build/bdist.linux-x86_64/wheel/trimesh/resources INFO : root : creating build/bdist.linux-x86_64/wheel/trimesh/resources/templates INFO : root : copying build/lib/trimesh/resources/templates/base.svg -> build/bdist.linux-x86_64/wheel/trimesh/resources/templates INFO : root : copying build/lib/trimesh/resources/templates/blender_boolean.py.tmpl -> build/bdist.linux-x86_64/wheel/trimesh/resources/templates INFO : root : copying build/lib/trimesh/resources/templates/dxf.json -> build/bdist.linux-x86_64/wheel/trimesh/resources/templates INFO : root : copying build/lib/trimesh/resources/templates/path.svg -> build/bdist.linux-x86_64/wheel/trimesh/resources/templates INFO : root : copying build/lib/trimesh/resources/templates/ply.json -> build/bdist.linux-x86_64/wheel/trimesh/resources/templates INFO : root : copying build/lib/trimesh/resources/templates/viewer.zip -> build/bdist.linux-x86_64/wheel/trimesh/resources/templates INFO : root : copying build/lib/trimesh/resources/__init__.py -> build/bdist.linux-x86_64/wheel/trimesh/resources INFO : root : creating build/bdist.linux-x86_64/wheel/trimesh/exchange INFO : root : copying build/lib/trimesh/exchange/__init__.py -> build/bdist.linux-x86_64/wheel/trimesh/exchange INFO : root : copying build/lib/trimesh/exchange/binvox.py -> build/bdist.linux-x86_64/wheel/trimesh/exchange INFO : root : copying build/lib/trimesh/exchange/dae.py -> build/bdist.linux-x86_64/wheel/trimesh/exchange INFO : root : copying build/lib/trimesh/exchange/export.py -> build/bdist.linux-x86_64/wheel/trimesh/exchange INFO : root : copying build/lib/trimesh/exchange/gltf.py -> build/bdist.linux-x86_64/wheel/trimesh/exchange INFO : root : copying build/lib/trimesh/exchange/load.py -> build/bdist.linux-x86_64/wheel/trimesh/exchange INFO : root : copying build/lib/trimesh/exchange/misc.py -> build/bdist.linux-x86_64/wheel/trimesh/exchange INFO : root : copying build/lib/trimesh/exchange/obj.py -> build/bdist.linux-x86_64/wheel/trimesh/exchange INFO : root : copying build/lib/trimesh/exchange/off.py -> build/bdist.linux-x86_64/wheel/trimesh/exchange INFO : root : copying build/lib/trimesh/exchange/openctm.py -> build/bdist.linux-x86_64/wheel/trimesh/exchange INFO : root : copying build/lib/trimesh/exchange/ply.py -> build/bdist.linux-x86_64/wheel/trimesh/exchange INFO : root : copying build/lib/trimesh/exchange/stl.py -> build/bdist.linux-x86_64/wheel/trimesh/exchange INFO : root : copying build/lib/trimesh/exchange/threedxml.py -> build/bdist.linux-x86_64/wheel/trimesh/exchange INFO : root : copying build/lib/trimesh/exchange/threemf.py -> build/bdist.linux-x86_64/wheel/trimesh/exchange INFO : root : copying build/lib/trimesh/exchange/urdf.py -> build/bdist.linux-x86_64/wheel/trimesh/exchange INFO : root : copying build/lib/trimesh/exchange/xaml.py -> build/bdist.linux-x86_64/wheel/trimesh/exchange INFO : root : copying build/lib/trimesh/exchange/xyz.py -> build/bdist.linux-x86_64/wheel/trimesh/exchange INFO : root : creating build/bdist.linux-x86_64/wheel/trimesh/viewer INFO : root : copying build/lib/trimesh/viewer/__init__.py -> build/bdist.linux-x86_64/wheel/trimesh/viewer INFO : root : copying build/lib/trimesh/viewer/notebook.py -> build/bdist.linux-x86_64/wheel/trimesh/viewer INFO : root : copying build/lib/trimesh/viewer/trackball.py -> build/bdist.linux-x86_64/wheel/trimesh/viewer INFO : root : copying build/lib/trimesh/viewer/widget.py -> build/bdist.linux-x86_64/wheel/trimesh/viewer INFO : root : copying build/lib/trimesh/viewer/windowed.py -> build/bdist.linux-x86_64/wheel/trimesh/viewer INFO : root : creating build/bdist.linux-x86_64/wheel/trimesh/visual INFO : root : copying build/lib/trimesh/visual/__init__.py -> build/bdist.linux-x86_64/wheel/trimesh/visual INFO : root : copying build/lib/trimesh/visual/base.py -> build/bdist.linux-x86_64/wheel/trimesh/visual INFO : root : copying build/lib/trimesh/visual/color.py -> build/bdist.linux-x86_64/wheel/trimesh/visual INFO : root : copying build/lib/trimesh/visual/material.py -> build/bdist.linux-x86_64/wheel/trimesh/visual INFO : root : copying build/lib/trimesh/visual/objects.py -> build/bdist.linux-x86_64/wheel/trimesh/visual INFO : root : copying build/lib/trimesh/visual/texture.py -> build/bdist.linux-x86_64/wheel/trimesh/visual INFO : root : creating build/bdist.linux-x86_64/wheel/trimesh/voxel INFO : root : copying build/lib/trimesh/voxel/__init__.py -> build/bdist.linux-x86_64/wheel/trimesh/voxel INFO : root : copying build/lib/trimesh/voxel/base.py -> build/bdist.linux-x86_64/wheel/trimesh/voxel INFO : root : copying build/lib/trimesh/voxel/creation.py -> build/bdist.linux-x86_64/wheel/trimesh/voxel INFO : root : copying build/lib/trimesh/voxel/encoding.py -> build/bdist.linux-x86_64/wheel/trimesh/voxel INFO : root : copying build/lib/trimesh/voxel/morphology.py -> build/bdist.linux-x86_64/wheel/trimesh/voxel INFO : root : copying build/lib/trimesh/voxel/ops.py -> build/bdist.linux-x86_64/wheel/trimesh/voxel INFO : root : copying build/lib/trimesh/voxel/runlength.py -> build/bdist.linux-x86_64/wheel/trimesh/voxel INFO : root : copying build/lib/trimesh/voxel/transforms.py -> build/bdist.linux-x86_64/wheel/trimesh/voxel INFO : root : creating build/bdist.linux-x86_64/wheel/trimesh/scene INFO : root : copying build/lib/trimesh/scene/__init__.py -> build/bdist.linux-x86_64/wheel/trimesh/scene INFO : root : copying build/lib/trimesh/scene/cameras.py -> build/bdist.linux-x86_64/wheel/trimesh/scene INFO : root : copying build/lib/trimesh/scene/lighting.py -> build/bdist.linux-x86_64/wheel/trimesh/scene INFO : root : copying build/lib/trimesh/scene/scene.py -> build/bdist.linux-x86_64/wheel/trimesh/scene INFO : root : copying build/lib/trimesh/scene/transforms.py -> build/bdist.linux-x86_64/wheel/trimesh/scene INFO : root : creating build/bdist.linux-x86_64/wheel/trimesh/path INFO : root : creating build/bdist.linux-x86_64/wheel/trimesh/path/exchange INFO : root : copying build/lib/trimesh/path/exchange/__init__.py -> build/bdist.linux-x86_64/wheel/trimesh/path/exchange INFO : root : copying build/lib/trimesh/path/exchange/dxf.py -> build/bdist.linux-x86_64/wheel/trimesh/path/exchange INFO : root : copying build/lib/trimesh/path/exchange/export.py -> build/bdist.linux-x86_64/wheel/trimesh/path/exchange INFO : root : copying build/lib/trimesh/path/exchange/load.py -> build/bdist.linux-x86_64/wheel/trimesh/path/exchange INFO : root : copying build/lib/trimesh/path/exchange/misc.py -> build/bdist.linux-x86_64/wheel/trimesh/path/exchange INFO : root : copying build/lib/trimesh/path/exchange/svg_io.py -> build/bdist.linux-x86_64/wheel/trimesh/path/exchange INFO : root : copying build/lib/trimesh/path/__init__.py -> build/bdist.linux-x86_64/wheel/trimesh/path INFO : root : copying build/lib/trimesh/path/arc.py -> build/bdist.linux-x86_64/wheel/trimesh/path INFO : root : copying build/lib/trimesh/path/creation.py -> build/bdist.linux-x86_64/wheel/trimesh/path INFO : root : copying build/lib/trimesh/path/curve.py -> build/bdist.linux-x86_64/wheel/trimesh/path INFO : root : copying build/lib/trimesh/path/entities.py -> build/bdist.linux-x86_64/wheel/trimesh/path INFO : root : copying build/lib/trimesh/path/intersections.py -> build/bdist.linux-x86_64/wheel/trimesh/path INFO : root : copying build/lib/trimesh/path/packing.py -> build/bdist.linux-x86_64/wheel/trimesh/path INFO : root : copying build/lib/trimesh/path/path.py -> build/bdist.linux-x86_64/wheel/trimesh/path INFO : root : copying build/lib/trimesh/path/polygons.py -> build/bdist.linux-x86_64/wheel/trimesh/path INFO : root : copying build/lib/trimesh/path/raster.py -> build/bdist.linux-x86_64/wheel/trimesh/path INFO : root : copying build/lib/trimesh/path/repair.py -> build/bdist.linux-x86_64/wheel/trimesh/path INFO : root : copying build/lib/trimesh/path/segments.py -> build/bdist.linux-x86_64/wheel/trimesh/path INFO : root : copying build/lib/trimesh/path/simplify.py -> build/bdist.linux-x86_64/wheel/trimesh/path INFO : root : copying build/lib/trimesh/path/traversal.py -> build/bdist.linux-x86_64/wheel/trimesh/path INFO : root : copying build/lib/trimesh/path/util.py -> build/bdist.linux-x86_64/wheel/trimesh/path INFO : root : creating build/bdist.linux-x86_64/wheel/trimesh/ray INFO : root : copying build/lib/trimesh/ray/__init__.py -> build/bdist.linux-x86_64/wheel/trimesh/ray INFO : root : copying build/lib/trimesh/ray/ray_pyembree.py -> build/bdist.linux-x86_64/wheel/trimesh/ray INFO : root : copying build/lib/trimesh/ray/ray_triangle.py -> build/bdist.linux-x86_64/wheel/trimesh/ray INFO : root : copying build/lib/trimesh/ray/ray_util.py -> build/bdist.linux-x86_64/wheel/trimesh/ray INFO : root : copying build/lib/trimesh/__init__.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/base.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/boolean.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/bounds.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/caching.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/collision.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/comparison.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/constants.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/convex.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/creation.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/curvature.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/decomposition.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/exceptions.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/geometry.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/graph.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/grouping.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/inertia.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/integrate.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/intersections.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/interval.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/nsphere.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/parent.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/permutate.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/points.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/poses.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/primitives.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/proximity.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/registration.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/remesh.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/rendering.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/repair.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/resolvers.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/sample.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/schemas.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/smoothing.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/transformations.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/triangles.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/units.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/util.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : copying build/lib/trimesh/version.py -> build/bdist.linux-x86_64/wheel/trimesh INFO : root : running install_egg_info INFO : root : running egg_info INFO : root : creating trimesh.egg-info INFO : root : writing trimesh.egg-info/PKG-INFO INFO : root : writing dependency_links to trimesh.egg-info/dependency_links.txt INFO : root : writing requirements to trimesh.egg-info/requires.txt INFO : root : writing top-level names to trimesh.egg-info/top_level.txt INFO : root : writing manifest file 'trimesh.egg-info/SOURCES.txt' INFO : root : reading manifest file 'trimesh.egg-info/SOURCES.txt' INFO : root : reading manifest template 'MANIFEST.in' WARNING : root : warning: no files found matching 'trimesh/resources' INFO : root : adding license file 'LICENSE.md' INFO : root : writing manifest file 'trimesh.egg-info/SOURCES.txt' INFO : root : Copying trimesh.egg-info to build/bdist.linux-x86_64/wheel/trimesh-3.22.0-py3.11.egg-info INFO : root : running install_scripts INFO : wheel : creating build/bdist.linux-x86_64/wheel/trimesh-3.22.0.dist-info/WHEEL INFO : wheel : creating '/usr/src/RPM/BUILD/trimesh-3.22.0/dist/.tmp-t80acx87/trimesh-3.22.0-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it INFO : wheel : adding 'trimesh/__init__.py' INFO : wheel : adding 'trimesh/base.py' INFO : wheel : adding 'trimesh/boolean.py' INFO : wheel : adding 'trimesh/bounds.py' INFO : wheel : adding 'trimesh/caching.py' INFO : wheel : adding 'trimesh/collision.py' INFO : wheel : adding 'trimesh/comparison.py' INFO : wheel : adding 'trimesh/constants.py' INFO : wheel : adding 'trimesh/convex.py' INFO : wheel : adding 'trimesh/creation.py' INFO : wheel : adding 'trimesh/curvature.py' INFO : wheel : adding 'trimesh/decomposition.py' INFO : wheel : adding 'trimesh/exceptions.py' INFO : wheel : adding 'trimesh/geometry.py' INFO : wheel : adding 'trimesh/graph.py' INFO : wheel : adding 'trimesh/grouping.py' INFO : wheel : adding 'trimesh/inertia.py' INFO : wheel : adding 'trimesh/integrate.py' INFO : wheel : adding 'trimesh/intersections.py' INFO : wheel : adding 'trimesh/interval.py' INFO : wheel : adding 'trimesh/nsphere.py' INFO : wheel : adding 'trimesh/parent.py' INFO : wheel : adding 'trimesh/permutate.py' INFO : wheel : adding 'trimesh/points.py' INFO : wheel : adding 'trimesh/poses.py' INFO : wheel : adding 'trimesh/primitives.py' INFO : wheel : adding 'trimesh/proximity.py' INFO : wheel : adding 'trimesh/registration.py' INFO : wheel : adding 'trimesh/remesh.py' INFO : wheel : adding 'trimesh/rendering.py' INFO : wheel : adding 'trimesh/repair.py' INFO : wheel : adding 'trimesh/resolvers.py' INFO : wheel : adding 'trimesh/sample.py' INFO : wheel : adding 'trimesh/schemas.py' INFO : wheel : adding 'trimesh/smoothing.py' INFO : wheel : adding 'trimesh/transformations.py' INFO : wheel : adding 'trimesh/triangles.py' INFO : wheel : adding 'trimesh/units.py' INFO : wheel : adding 'trimesh/util.py' INFO : wheel : adding 'trimesh/version.py' INFO : wheel : adding 'trimesh/exchange/__init__.py' INFO : wheel : adding 'trimesh/exchange/binvox.py' INFO : wheel : adding 'trimesh/exchange/dae.py' INFO : wheel : adding 'trimesh/exchange/export.py' INFO : wheel : adding 'trimesh/exchange/gltf.py' INFO : wheel : adding 'trimesh/exchange/load.py' INFO : wheel : adding 'trimesh/exchange/misc.py' INFO : wheel : adding 'trimesh/exchange/obj.py' INFO : wheel : adding 'trimesh/exchange/off.py' INFO : wheel : adding 'trimesh/exchange/openctm.py' INFO : wheel : adding 'trimesh/exchange/ply.py' INFO : wheel : adding 'trimesh/exchange/stl.py' INFO : wheel : adding 'trimesh/exchange/threedxml.py' INFO : wheel : adding 'trimesh/exchange/threemf.py' INFO : wheel : adding 'trimesh/exchange/urdf.py' INFO : wheel : adding 'trimesh/exchange/xaml.py' INFO : wheel : adding 'trimesh/exchange/xyz.py' INFO : wheel : adding 'trimesh/interfaces/__init__.py' INFO : wheel : adding 'trimesh/interfaces/blender.py' INFO : wheel : adding 'trimesh/interfaces/generic.py' INFO : wheel : adding 'trimesh/interfaces/gmsh.py' INFO : wheel : adding 'trimesh/interfaces/scad.py' INFO : wheel : adding 'trimesh/interfaces/vhacd.py' INFO : wheel : adding 'trimesh/path/__init__.py' INFO : wheel : adding 'trimesh/path/arc.py' INFO : wheel : adding 'trimesh/path/creation.py' INFO : wheel : adding 'trimesh/path/curve.py' INFO : wheel : adding 'trimesh/path/entities.py' INFO : wheel : adding 'trimesh/path/intersections.py' INFO : wheel : adding 'trimesh/path/packing.py' INFO : wheel : adding 'trimesh/path/path.py' INFO : wheel : adding 'trimesh/path/polygons.py' INFO : wheel : adding 'trimesh/path/raster.py' INFO : wheel : adding 'trimesh/path/repair.py' INFO : wheel : adding 'trimesh/path/segments.py' INFO : wheel : adding 'trimesh/path/simplify.py' INFO : wheel : adding 'trimesh/path/traversal.py' INFO : wheel : adding 'trimesh/path/util.py' INFO : wheel : adding 'trimesh/path/exchange/__init__.py' INFO : wheel : adding 'trimesh/path/exchange/dxf.py' INFO : wheel : adding 'trimesh/path/exchange/export.py' INFO : wheel : adding 'trimesh/path/exchange/load.py' INFO : wheel : adding 'trimesh/path/exchange/misc.py' INFO : wheel : adding 'trimesh/path/exchange/svg_io.py' INFO : wheel : adding 'trimesh/ray/__init__.py' INFO : wheel : adding 'trimesh/ray/ray_pyembree.py' INFO : wheel : adding 'trimesh/ray/ray_triangle.py' INFO : wheel : adding 'trimesh/ray/ray_util.py' INFO : wheel : adding 'trimesh/resources/__init__.py' INFO : wheel : adding 'trimesh/resources/units_to_inches.json' INFO : wheel : adding 'trimesh/resources/schema/README.md' INFO : wheel : adding 'trimesh/resources/schema/gltf2.schema.zip' INFO : wheel : adding 'trimesh/resources/schema/urdf.xsd' INFO : wheel : adding 'trimesh/resources/schema/primitive/box.schema.json' INFO : wheel : adding 'trimesh/resources/schema/primitive/capsule.schema.json' INFO : wheel : adding 'trimesh/resources/schema/primitive/cylinder.schema.json' INFO : wheel : adding 'trimesh/resources/schema/primitive/extrusion.schema.json' INFO : wheel : adding 'trimesh/resources/schema/primitive/primitive.schema.json' INFO : wheel : adding 'trimesh/resources/schema/primitive/scenegraph.schema.json' INFO : wheel : adding 'trimesh/resources/schema/primitive/sphere.schema.json' INFO : wheel : adding 'trimesh/resources/schema/primitive/transform.schema.json' INFO : wheel : adding 'trimesh/resources/schema/primitive/trimesh.schema.json' INFO : wheel : adding 'trimesh/resources/schema/primitive/wkt.polygon.schema.json' INFO : wheel : adding 'trimesh/resources/templates/base.svg' INFO : wheel : adding 'trimesh/resources/templates/blender_boolean.py.tmpl' INFO : wheel : adding 'trimesh/resources/templates/dxf.json' INFO : wheel : adding 'trimesh/resources/templates/path.svg' INFO : wheel : adding 'trimesh/resources/templates/ply.json' INFO : wheel : adding 'trimesh/resources/templates/viewer.zip' INFO : wheel : adding 'trimesh/scene/__init__.py' INFO : wheel : adding 'trimesh/scene/cameras.py' INFO : wheel : adding 'trimesh/scene/lighting.py' INFO : wheel : adding 'trimesh/scene/scene.py' INFO : wheel : adding 'trimesh/scene/transforms.py' INFO : wheel : adding 'trimesh/viewer/__init__.py' INFO : wheel : adding 'trimesh/viewer/notebook.py' INFO : wheel : adding 'trimesh/viewer/trackball.py' INFO : wheel : adding 'trimesh/viewer/widget.py' INFO : wheel : adding 'trimesh/viewer/windowed.py' INFO : wheel : adding 'trimesh/visual/__init__.py' INFO : wheel : adding 'trimesh/visual/base.py' INFO : wheel : adding 'trimesh/visual/color.py' INFO : wheel : adding 'trimesh/visual/material.py' INFO : wheel : adding 'trimesh/visual/objects.py' INFO : wheel : adding 'trimesh/visual/texture.py' INFO : wheel : adding 'trimesh/voxel/__init__.py' INFO : wheel : adding 'trimesh/voxel/base.py' INFO : wheel : adding 'trimesh/voxel/creation.py' INFO : wheel : adding 'trimesh/voxel/encoding.py' INFO : wheel : adding 'trimesh/voxel/morphology.py' INFO : wheel : adding 'trimesh/voxel/ops.py' INFO : wheel : adding 'trimesh/voxel/runlength.py' INFO : wheel : adding 'trimesh/voxel/transforms.py' INFO : wheel : adding 'trimesh-3.22.0.dist-info/LICENSE.md' INFO : wheel : adding 'trimesh-3.22.0.dist-info/METADATA' INFO : wheel : adding 'trimesh-3.22.0.dist-info/WHEEL' INFO : wheel : adding 'trimesh-3.22.0.dist-info/top_level.txt' INFO : wheel : adding 'trimesh-3.22.0.dist-info/RECORD' INFO : wheel : removing build/bdist.linux-x86_64/wheel INFO : pyproject_installer.build_cmd._build : Built wheel: trimesh-3.22.0-py3-none-any.whl + exit 0 Executing(%install): /bin/sh -e /usr/src/tmp/rpm-tmp.91262 + umask 022 + /bin/mkdir -p /usr/src/RPM/BUILD + cd /usr/src/RPM/BUILD + /bin/chmod -Rf u+rwX -- /usr/src/tmp/python3-module-trimesh-buildroot + : + /bin/rm -rf -- /usr/src/tmp/python3-module-trimesh-buildroot + PATH=/usr/libexec/rpm-build:/usr/src/bin:/bin:/usr/bin:/usr/X11R6/bin:/usr/games + cd trimesh-3.22.0 + /usr/bin/python3 -m pyproject_installer -v install --destdir=/usr/src/tmp/python3-module-trimesh-buildroot INFO : pyproject_installer.install_cmd._install : Installing wheel INFO : pyproject_installer.install_cmd._install : Wheel directory: /usr/src/RPM/BUILD/trimesh-3.22.0/dist INFO : pyproject_installer.install_cmd._install : Wheel filename: trimesh-3.22.0-py3-none-any.whl INFO : pyproject_installer.install_cmd._install : Destination: /usr/src/tmp/python3-module-trimesh-buildroot DEBUG : pyproject_installer.lib.wheel : Parsing wheel filename DEBUG : pyproject_installer.lib.wheel : Validating wheel file DEBUG : pyproject_installer.lib.wheel : Validating wheel spec version DEBUG : pyproject_installer.lib.wheel : Parsing wheel spec metadata DEBUG : pyproject_installer.lib.wheel : Validating RECORD INFO : pyproject_installer.install_cmd._install : Wheel installation root: /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages INFO : pyproject_installer.install_cmd._install : Extracting wheel DEBUG : pyproject_installer.install_cmd._install : Filtering out not allowed file: trimesh-3.22.0.dist-info/LICENSE.md DEBUG : pyproject_installer.install_cmd._install : Filtering out not allowed file: trimesh-3.22.0.dist-info/WHEEL DEBUG : pyproject_installer.install_cmd._install : Filtering out not allowed file: trimesh-3.22.0.dist-info/top_level.txt DEBUG : pyproject_installer.install_cmd._install : Filtering out not allowed file: trimesh-3.22.0.dist-info/RECORD INFO : pyproject_installer.install_cmd._install : Wheel was installed + /usr/lib/rpm/brp-alt Cleaning files in /usr/src/tmp/python3-module-trimesh-buildroot (auto) Verifying and fixing files in /usr/src/tmp/python3-module-trimesh-buildroot (binconfig,pkgconfig,libtool,desktop,gnuconfig) Checking contents of files in /usr/src/tmp/python3-module-trimesh-buildroot/ (default) Compressing files in /usr/src/tmp/python3-module-trimesh-buildroot (auto) Adjusting library links in /usr/src/tmp/python3-module-trimesh-buildroot ./usr/lib: (from :0) Verifying ELF objects in /usr/src/tmp/python3-module-trimesh-buildroot (arch=normal,fhs=normal,lfs=relaxed,lint=relaxed,rpath=normal,stack=normal,textrel=normal,unresolved=normal) Bytecompiling python3 modules in /usr/src/tmp/python3-module-trimesh-buildroot using /usr/bin/python3 compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/binvox.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/dae.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/export.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/gltf.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/load.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/misc.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/obj.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/off.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/openctm.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/ply.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/stl.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/threedxml.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/threemf.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/urdf.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/xaml.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/xyz.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/interfaces/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/interfaces/blender.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/interfaces/generic.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/interfaces/gmsh.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/interfaces/scad.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/interfaces/vhacd.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/exchange/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/exchange/dxf.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/exchange/export.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/exchange/load.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/exchange/misc.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/exchange/svg_io.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/arc.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/creation.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/curve.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/entities.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/intersections.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/packing.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/path.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/polygons.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/raster.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/repair.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/segments.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/simplify.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/traversal.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/util.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/ray/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/ray/ray_pyembree.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/ray/ray_triangle.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/ray/ray_util.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/resources/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/scene/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/scene/cameras.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/scene/lighting.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/scene/scene.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/scene/transforms.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/viewer/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/viewer/notebook.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/viewer/trackball.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/viewer/widget.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/viewer/windowed.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/visual/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/visual/base.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/visual/color.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/visual/material.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/visual/objects.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/visual/texture.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/voxel/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/voxel/base.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/voxel/creation.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/voxel/encoding.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/voxel/morphology.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/voxel/ops.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/voxel/runlength.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/voxel/transforms.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/base.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/boolean.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/bounds.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/caching.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/collision.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/comparison.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/constants.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/convex.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/creation.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/curvature.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/decomposition.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exceptions.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/geometry.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/graph.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/grouping.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/inertia.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/integrate.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/intersections.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/interval.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/nsphere.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/parent.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/permutate.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/points.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/poses.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/primitives.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/proximity.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/registration.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/remesh.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/rendering.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/repair.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/resolvers.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/sample.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/schemas.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/smoothing.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/transformations.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/triangles.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/units.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/util.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/version.py Bytecompiling python3 modules with optimization in /usr/src/tmp/python3-module-trimesh-buildroot using /usr/bin/python3 -O compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/binvox.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/dae.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/export.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/gltf.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/load.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/misc.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/obj.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/off.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/openctm.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/ply.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/stl.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/threedxml.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/threemf.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/urdf.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/xaml.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/xyz.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/interfaces/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/interfaces/blender.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/interfaces/generic.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/interfaces/gmsh.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/interfaces/scad.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/interfaces/vhacd.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/exchange/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/exchange/dxf.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/exchange/export.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/exchange/load.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/exchange/misc.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/exchange/svg_io.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/arc.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/creation.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/curve.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/entities.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/intersections.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/packing.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/path.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/polygons.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/raster.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/repair.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/segments.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/simplify.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/traversal.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/util.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/ray/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/ray/ray_pyembree.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/ray/ray_triangle.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/ray/ray_util.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/resources/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/scene/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/scene/cameras.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/scene/lighting.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/scene/scene.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/scene/transforms.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/viewer/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/viewer/notebook.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/viewer/trackball.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/viewer/widget.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/viewer/windowed.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/visual/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/visual/base.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/visual/color.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/visual/material.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/visual/objects.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/visual/texture.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/voxel/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/voxel/base.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/voxel/creation.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/voxel/encoding.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/voxel/morphology.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/voxel/ops.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/voxel/runlength.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/voxel/transforms.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/base.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/boolean.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/bounds.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/caching.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/collision.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/comparison.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/constants.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/convex.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/creation.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/curvature.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/decomposition.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exceptions.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/geometry.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/graph.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/grouping.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/inertia.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/integrate.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/intersections.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/interval.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/nsphere.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/parent.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/permutate.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/points.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/poses.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/primitives.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/proximity.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/registration.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/remesh.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/rendering.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/repair.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/resolvers.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/sample.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/schemas.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/smoothing.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/transformations.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/triangles.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/units.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/util.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/version.py Bytecompiling python3 modules with optimization-2 in /usr/src/tmp/python3-module-trimesh-buildroot using /usr/bin/python3 -OO compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/binvox.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/dae.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/export.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/gltf.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/load.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/misc.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/obj.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/off.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/openctm.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/ply.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/stl.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/threedxml.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/threemf.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/urdf.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/xaml.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exchange/xyz.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/interfaces/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/interfaces/blender.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/interfaces/generic.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/interfaces/gmsh.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/interfaces/scad.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/interfaces/vhacd.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/exchange/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/exchange/dxf.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/exchange/export.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/exchange/load.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/exchange/misc.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/exchange/svg_io.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/arc.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/creation.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/curve.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/entities.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/intersections.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/packing.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/path.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/polygons.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/raster.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/repair.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/segments.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/simplify.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/traversal.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/path/util.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/ray/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/ray/ray_pyembree.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/ray/ray_triangle.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/ray/ray_util.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/resources/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/scene/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/scene/cameras.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/scene/lighting.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/scene/scene.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/scene/transforms.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/viewer/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/viewer/notebook.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/viewer/trackball.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/viewer/widget.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/viewer/windowed.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/visual/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/visual/base.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/visual/color.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/visual/material.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/visual/objects.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/visual/texture.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/voxel/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/voxel/base.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/voxel/creation.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/voxel/encoding.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/voxel/morphology.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/voxel/ops.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/voxel/runlength.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/voxel/transforms.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/__init__.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/base.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/boolean.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/bounds.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/caching.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/collision.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/comparison.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/constants.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/convex.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/creation.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/curvature.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/decomposition.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/exceptions.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/geometry.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/graph.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/grouping.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/inertia.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/integrate.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/intersections.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/interval.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/nsphere.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/parent.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/permutate.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/points.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/poses.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/primitives.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/proximity.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/registration.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/remesh.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/rendering.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/repair.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/resolvers.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/sample.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/schemas.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/smoothing.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/transformations.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/triangles.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/units.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/util.py compile /usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages/trimesh/version.py Hardlinking identical .pyc and .opt-?.pyc files './usr/lib/python3/site-packages/trimesh/__pycache__/__init__.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/__pycache__/__init__.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/__pycache__/boolean.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/__pycache__/boolean.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/__pycache__/bounds.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/__pycache__/bounds.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/__pycache__/collision.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/__pycache__/collision.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/__pycache__/comparison.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/__pycache__/comparison.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/__pycache__/constants.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/__pycache__/constants.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/__pycache__/convex.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/__pycache__/convex.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/__pycache__/curvature.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/__pycache__/curvature.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/__pycache__/decomposition.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/__pycache__/decomposition.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/__pycache__/exceptions.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/__pycache__/exceptions.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/__pycache__/grouping.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/__pycache__/grouping.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/__pycache__/inertia.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/__pycache__/inertia.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/__pycache__/integrate.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/__pycache__/integrate.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/__pycache__/interval.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/__pycache__/interval.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/__pycache__/nsphere.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/__pycache__/nsphere.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/__pycache__/parent.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/__pycache__/parent.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/__pycache__/permutate.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/__pycache__/permutate.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/__pycache__/poses.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/__pycache__/poses.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/__pycache__/primitives.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/__pycache__/primitives.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/__pycache__/proximity.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/__pycache__/proximity.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/__pycache__/repair.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/__pycache__/repair.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/__pycache__/sample.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/__pycache__/sample.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/__pycache__/schemas.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/__pycache__/schemas.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/__pycache__/smoothing.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/__pycache__/smoothing.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/__pycache__/triangles.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/__pycache__/triangles.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/__pycache__/units.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/__pycache__/units.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/__pycache__/version.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/__pycache__/version.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/__pycache__/version.cpython-311.opt-2.pyc' => './usr/lib/python3/site-packages/trimesh/__pycache__/version.cpython-311.opt-1.pyc' './usr/lib/python3/site-packages/trimesh/exchange/__pycache__/__init__.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/exchange/__pycache__/__init__.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/exchange/__pycache__/dae.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/exchange/__pycache__/dae.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/exchange/__pycache__/export.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/exchange/__pycache__/export.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/exchange/__pycache__/load.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/exchange/__pycache__/load.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/exchange/__pycache__/misc.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/exchange/__pycache__/misc.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/exchange/__pycache__/off.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/exchange/__pycache__/off.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/exchange/__pycache__/openctm.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/exchange/__pycache__/openctm.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/exchange/__pycache__/ply.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/exchange/__pycache__/ply.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/exchange/__pycache__/stl.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/exchange/__pycache__/stl.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/exchange/__pycache__/threedxml.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/exchange/__pycache__/threedxml.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/exchange/__pycache__/threemf.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/exchange/__pycache__/threemf.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/exchange/__pycache__/urdf.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/exchange/__pycache__/urdf.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/exchange/__pycache__/xaml.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/exchange/__pycache__/xaml.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/exchange/__pycache__/xyz.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/exchange/__pycache__/xyz.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/interfaces/__pycache__/__init__.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/interfaces/__pycache__/__init__.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/interfaces/__pycache__/__init__.cpython-311.opt-2.pyc' => './usr/lib/python3/site-packages/trimesh/interfaces/__pycache__/__init__.cpython-311.opt-1.pyc' './usr/lib/python3/site-packages/trimesh/interfaces/__pycache__/blender.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/interfaces/__pycache__/blender.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/interfaces/__pycache__/generic.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/interfaces/__pycache__/generic.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/interfaces/__pycache__/generic.cpython-311.opt-2.pyc' => './usr/lib/python3/site-packages/trimesh/interfaces/__pycache__/generic.cpython-311.opt-1.pyc' './usr/lib/python3/site-packages/trimesh/interfaces/__pycache__/gmsh.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/interfaces/__pycache__/gmsh.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/interfaces/__pycache__/scad.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/interfaces/__pycache__/scad.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/interfaces/__pycache__/vhacd.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/interfaces/__pycache__/vhacd.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/path/__pycache__/__init__.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/path/__pycache__/__init__.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/path/__pycache__/creation.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/path/__pycache__/creation.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/path/__pycache__/intersections.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/path/__pycache__/intersections.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/path/__pycache__/path.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/path/__pycache__/path.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/path/__pycache__/raster.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/path/__pycache__/raster.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/path/__pycache__/repair.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/path/__pycache__/repair.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/path/__pycache__/simplify.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/path/__pycache__/simplify.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/path/__pycache__/util.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/path/__pycache__/util.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/path/exchange/__pycache__/__init__.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/path/exchange/__pycache__/__init__.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/path/exchange/__pycache__/__init__.cpython-311.opt-2.pyc' => './usr/lib/python3/site-packages/trimesh/path/exchange/__pycache__/__init__.cpython-311.opt-1.pyc' './usr/lib/python3/site-packages/trimesh/path/exchange/__pycache__/export.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/path/exchange/__pycache__/export.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/path/exchange/__pycache__/load.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/path/exchange/__pycache__/load.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/path/exchange/__pycache__/misc.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/path/exchange/__pycache__/misc.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/ray/__pycache__/__init__.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/ray/__pycache__/__init__.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/ray/__pycache__/__init__.cpython-311.opt-2.pyc' => './usr/lib/python3/site-packages/trimesh/ray/__pycache__/__init__.cpython-311.opt-1.pyc' './usr/lib/python3/site-packages/trimesh/ray/__pycache__/ray_pyembree.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/ray/__pycache__/ray_pyembree.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/ray/__pycache__/ray_triangle.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/ray/__pycache__/ray_triangle.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/ray/__pycache__/ray_util.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/ray/__pycache__/ray_util.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/resources/__pycache__/__init__.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/resources/__pycache__/__init__.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/scene/__pycache__/__init__.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/scene/__pycache__/__init__.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/scene/__pycache__/__init__.cpython-311.opt-2.pyc' => './usr/lib/python3/site-packages/trimesh/scene/__pycache__/__init__.cpython-311.opt-1.pyc' './usr/lib/python3/site-packages/trimesh/scene/__pycache__/lighting.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/scene/__pycache__/lighting.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/viewer/__pycache__/__init__.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/viewer/__pycache__/__init__.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/viewer/__pycache__/notebook.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/viewer/__pycache__/notebook.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/viewer/__pycache__/trackball.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/viewer/__pycache__/trackball.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/viewer/__pycache__/widget.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/viewer/__pycache__/widget.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/viewer/__pycache__/windowed.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/viewer/__pycache__/windowed.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/visual/__pycache__/__init__.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/visual/__pycache__/__init__.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/visual/__pycache__/base.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/visual/__pycache__/base.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/visual/__pycache__/objects.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/visual/__pycache__/objects.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/visual/__pycache__/texture.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/visual/__pycache__/texture.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/voxel/__pycache__/__init__.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/voxel/__pycache__/__init__.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/voxel/__pycache__/__init__.cpython-311.opt-2.pyc' => './usr/lib/python3/site-packages/trimesh/voxel/__pycache__/__init__.cpython-311.opt-1.pyc' './usr/lib/python3/site-packages/trimesh/voxel/__pycache__/base.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/voxel/__pycache__/base.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/voxel/__pycache__/creation.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/voxel/__pycache__/creation.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/voxel/__pycache__/morphology.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/voxel/__pycache__/morphology.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/voxel/__pycache__/ops.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/voxel/__pycache__/ops.cpython-311.pyc' './usr/lib/python3/site-packages/trimesh/voxel/__pycache__/transforms.cpython-311.opt-1.pyc' => './usr/lib/python3/site-packages/trimesh/voxel/__pycache__/transforms.cpython-311.pyc' Executing(%check): /bin/sh -e /usr/src/tmp/rpm-tmp.65256 + umask 022 + /bin/mkdir -p /usr/src/RPM/BUILD + cd /usr/src/RPM/BUILD + cd trimesh-3.22.0 + export PYTHONPATH=/usr/src/RPM/BUILD/trimesh-3.22.0/_stub:/usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages + PYTHONPATH=/usr/src/RPM/BUILD/trimesh-3.22.0/_stub:/usr/src/tmp/python3-module-trimesh-buildroot/usr/lib/python3/site-packages + pytest3 -v -k 'not ( DAETest and test_material_round ) and not ( DAETest and test_obj_roundtrip ) and not ( LightTests and test_scene ) and not ( OBJTest and test_multi_nodupe ) and not ( SliceTest and test_slice_onplane )' ============================= test session starts ============================== platform linux -- Python 3.11.4, pytest-7.4.0, pluggy-1.2.0 -- /usr/bin/python3 cachedir: .pytest_cache hypothesis profile 'default' -> database=DirectoryBasedExampleDatabase('/usr/src/RPM/BUILD/trimesh-3.22.0/.hypothesis/examples') rootdir: /usr/src/RPM/BUILD/trimesh-3.22.0 plugins: hypothesis-6.75.3 collecting ... collected 565 items / 5 deselected / 560 selected tests/test_3dxml.py::DXMLTest::test_abaqus PASSED [ 0%] tests/test_3mf.py::MFTest::test_3MF PASSED [ 0%] tests/test_3mf.py::MFTest::test_kwargs PASSED [ 0%] tests/test_3mf.py::MFTest::test_names PASSED [ 0%] tests/test_3mf.py::MFTest::test_roundtrip PASSED [ 0%] tests/test_3mf.py::MFTest::test_units PASSED [ 1%] tests/test_adjacency.py::AdjacencyTest::test_radius PASSED [ 1%] tests/test_align.py::AlignTests::test_align PASSED [ 1%] tests/test_align.py::AlignTests::test_range PASSED [ 1%] tests/test_align.py::AlignTests::test_rigid PASSED [ 1%] tests/test_arc.py::ArcTests::test_center PASSED [ 1%] tests/test_arc.py::ArcTests::test_center_random PASSED [ 2%] tests/test_arc.py::ArcTests::test_multiroot PASSED [ 2%] tests/test_assimp.py::AssimpTest::test_duck PASSED [ 2%] tests/test_base.py::MeshTests::test_none PASSED [ 2%] tests/test_base.py::MeshTests::test_validate PASSED [ 2%] tests/test_base.py::MeshTests::test_validate_inversion PASSED [ 3%] tests/test_base.py::MeshTests::test_vertex_neighbors PASSED [ 3%] tests/test_binvox.py::BinvoxTest::test_load_save_invariance PASSED [ 3%] tests/test_boolean.py::BooleanTest::test_boolean PASSED [ 3%] tests/test_boolean.py::BooleanTest::test_multiple PASSED [ 3%] tests/test_bounds.py::BoundsTest::test_2D PASSED [ 3%] tests/test_bounds.py::BoundsTest::test_bounding_egg PASSED [ 4%] tests/test_bounds.py::BoundsTest::test_bounds_tree PASSED [ 4%] tests/test_bounds.py::BoundsTest::test_cylinder PASSED [ 4%] tests/test_bounds.py::BoundsTest::test_obb_coplanar_points PASSED [ 4%] tests/test_bounds.py::BoundsTest::test_obb_corpus PASSED [ 4%] tests/test_bounds.py::BoundsTest::test_obb_mesh PASSED [ 5%] tests/test_bounds.py::BoundsTest::test_obb_order PASSED [ 5%] tests/test_bounds.py::BoundsTest::test_obb_points PASSED [ 5%] tests/test_bounds.py::BoundsTest::test_random_cylinder PASSED [ 5%] tests/test_cache.py::CacheTest::test_contiguous PASSED [ 5%] tests/test_cache.py::CacheTest::test_method_combinations PASSED [ 5%] tests/test_cache.py::CacheTest::test_mutable PASSED [ 6%] tests/test_cache.py::CacheTest::test_scalar PASSED [ 6%] tests/test_cache.py::CacheTest::test_simple_collision PASSED [ 6%] tests/test_cache.py::CacheTest::test_track PASSED [ 6%] tests/test_cache.py::CacheTest::test_transform PASSED [ 6%] tests/test_camera.py::CameraTests::test_K PASSED [ 6%] tests/test_camera.py::CameraTests::test_consistency PASSED [ 7%] tests/test_camera.py::CameraTests::test_focal_updates_on_resolution_change PASSED [ 7%] tests/test_camera.py::CameraTests::test_fov_updates_on_resolution_change PASSED [ 7%] tests/test_camera.py::CameraTests::test_lookat PASSED [ 7%] tests/test_camera.py::CameraTests::test_ray_index PASSED [ 7%] tests/test_collision.py::CollisionTest::test_collision PASSED [ 8%] tests/test_collision.py::CollisionTest::test_distance PASSED [ 8%] tests/test_collision.py::CollisionTest::test_random_spheres PASSED [ 8%] tests/test_collision.py::CollisionTest::test_scene PASSED [ 8%] tests/test_color.py::VisualTest::test_concatenate PASSED [ 8%] tests/test_color.py::VisualTest::test_conversion PASSED [ 8%] tests/test_color.py::VisualTest::test_copy PASSED [ 9%] tests/test_color.py::VisualTest::test_data_model PASSED [ 9%] tests/test_color.py::VisualTest::test_interpolate PASSED [ 9%] tests/test_color.py::VisualTest::test_iterset PASSED [ 9%] tests/test_color.py::VisualTest::test_smooth PASSED [ 9%] tests/test_color.py::VisualTest::test_uv_to_color PASSED [ 10%] tests/test_color.py::VisualTest::test_uv_to_interpolated_color PASSED [ 10%] tests/test_color.py::VisualTest::test_vertex PASSED [ 10%] tests/test_color.py::VisualTest::test_visual PASSED [ 10%] tests/test_convex.py::ConvexTest::test_convex PASSED [ 10%] tests/test_convex.py::ConvexTest::test_primitives PASSED [ 10%] tests/test_convex.py::ConvexTest::test_projections PASSED [ 11%] tests/test_convex.py::ConvexTest::test_truth PASSED [ 11%] tests/test_copy.py::CopyTests::test_copy PASSED [ 11%] tests/test_crash.py::FileTests::test_close PASSED [ 11%] tests/test_creation.py::CreationTest::test_annulus PASSED [ 11%] tests/test_creation.py::CreationTest::test_axis PASSED [ 11%] tests/test_creation.py::CreationTest::test_box PASSED [ 12%] tests/test_creation.py::CreationTest::test_camera_marker PASSED [ 12%] tests/test_creation.py::CreationTest::test_capsule PASSED [ 12%] tests/test_creation.py::CreationTest::test_cone PASSED [ 12%] tests/test_creation.py::CreationTest::test_cylinder PASSED [ 12%] tests/test_creation.py::CreationTest::test_path_sweep PASSED [ 13%] tests/test_creation.py::CreationTest::test_soup PASSED [ 13%] tests/test_creation.py::CreationTest::test_spheres PASSED [ 13%] tests/test_creation.py::CreationTest::test_triangulate PASSED [ 13%] tests/test_creation.py::CreationTest::test_triangulate_plumbing PASSED [ 13%] tests/test_creation.py::CreationTest::test_truncated PASSED [ 13%] tests/test_curvature.py::CurvatureTest::test_gaussian_curvature PASSED [ 14%] tests/test_curvature.py::CurvatureTest::test_mean_curvature PASSED [ 14%] tests/test_curvature.py::CurvatureTest::test_vertex_defect PASSED [ 14%] tests/test_dae.py::DAETest::test_duck PASSED [ 14%] tests/test_dae.py::DAETest::test_export PASSED [ 14%] tests/test_dae.py::DAETest::test_shoulder PASSED [ 15%] tests/test_decomposition.py::DecompositionTest::test_convex_decomposition PASSED [ 15%] tests/test_depr.py::DepTest::test_deprecated PASSED [ 15%] tests/test_dxf.py::DXFTest::test_bulge PASSED [ 15%] tests/test_dxf.py::DXFTest::test_dxf PASSED [ 15%] tests/test_dxf.py::DXFTest::test_insert_block PASSED [ 15%] tests/test_dxf.py::DXFTest::test_spline PASSED [ 16%] tests/test_dxf.py::DXFTest::test_text PASSED [ 16%] tests/test_dxf.py::DXFTest::test_unicode PASSED [ 16%] tests/test_dxf.py::DXFTest::test_versions PASSED [ 16%] tests/test_edges.py::EdgeTest::test_face_unique PASSED [ 16%] tests/test_encoding.py::EncodingTest::test_brle PASSED [ 16%] tests/test_encoding.py::EncodingTest::test_composite PASSED [ 17%] tests/test_encoding.py::EncodingTest::test_dense PASSED [ 17%] tests/test_encoding.py::EncodingTest::test_dense_stripped PASSED [ 17%] tests/test_encoding.py::EncodingTest::test_empty_stripped PASSED [ 17%] tests/test_encoding.py::EncodingTest::test_flat PASSED [ 17%] tests/test_encoding.py::EncodingTest::test_flipped PASSED [ 18%] tests/test_encoding.py::EncodingTest::test_is_empty PASSED [ 18%] tests/test_encoding.py::EncodingTest::test_reshape PASSED [ 18%] tests/test_encoding.py::EncodingTest::test_rle PASSED [ 18%] tests/test_encoding.py::EncodingTest::test_sparse_stripped PASSED [ 18%] tests/test_encoding.py::EncodingTest::test_transpose PASSED [ 18%] tests/test_except.py::ExceptionsTest::test_module PASSED [ 19%] tests/test_export.py::ExportTest::test_buffered_random PASSED [ 19%] tests/test_export.py::ExportTest::test_dict PASSED [ 19%] tests/test_export.py::ExportTest::test_export FAILED [ 19%] tests/test_export.py::ExportTest::test_gltf_path FAILED [ 19%] tests/test_export.py::ExportTest::test_obj PASSED [ 20%] tests/test_export.py::ExportTest::test_obj_order PASSED [ 20%] tests/test_export.py::ExportTest::test_parse_file_args PASSED [ 20%] tests/test_export.py::ExportTest::test_scene FAILED [ 20%] tests/test_extrude.py::ExtrudeTest::test_extrude_degen PASSED [ 20%] tests/test_extrude.py::ExtrudeTest::test_extrusion PASSED [ 20%] tests/test_facets.py::FacetTest::test_empty PASSED [ 21%] tests/test_facets.py::FacetTest::test_facet PASSED [ 21%] tests/test_fill.py::FillTest::test_fill PASSED [ 21%] tests/test_geom.py::GeomTests::test_triangulate PASSED [ 21%] tests/test_gltf.py::GLTFTest::test_alphamode FAILED [ 21%] tests/test_gltf.py::GLTFTest::test_basic FAILED [ 21%] tests/test_gltf.py::GLTFTest::test_buffer_dedupe FAILED [ 22%] tests/test_gltf.py::GLTFTest::test_bulk FAILED [ 22%] tests/test_gltf.py::GLTFTest::test_cesium FAILED [ 22%] tests/test_gltf.py::GLTFTest::test_duck FAILED [ 22%] tests/test_gltf.py::GLTFTest::test_embed_buffer FAILED [ 22%] tests/test_gltf.py::GLTFTest::test_equal_by_default FAILED [ 23%] tests/test_gltf.py::GLTFTest::test_export_custom_attributes FAILED [ 23%] tests/test_gltf.py::GLTFTest::test_export_postprocess FAILED [ 23%] tests/test_gltf.py::GLTFTest::test_extras FAILED [ 23%] tests/test_gltf.py::GLTFTest::test_extras_nodes FAILED [ 23%] tests/test_gltf.py::GLTFTest::test_gltf_by_name FAILED [ 23%] tests/test_gltf.py::GLTFTest::test_gltf_pole FAILED [ 24%] tests/test_gltf.py::GLTFTest::test_interleaved PASSED [ 24%] tests/test_gltf.py::GLTFTest::test_load_empty_nodes PASSED [ 24%] tests/test_gltf.py::GLTFTest::test_material_hash FAILED [ 24%] tests/test_gltf.py::GLTFTest::test_merge_buffers FAILED [ 24%] tests/test_gltf.py::GLTFTest::test_merge_primitives PASSED [ 25%] tests/test_gltf.py::GLTFTest::test_merge_primitives_materials PASSED [ 25%] tests/test_gltf.py::GLTFTest::test_merge_primitives_materials_roundtrip FAILED [ 25%] tests/test_gltf.py::GLTFTest::test_nested_scale PASSED [ 25%] tests/test_gltf.py::GLTFTest::test_node_name FAILED [ 25%] tests/test_gltf.py::GLTFTest::test_optional_camera FAILED [ 25%] tests/test_gltf.py::GLTFTest::test_points FAILED [ 26%] tests/test_gltf.py::GLTFTest::test_primitive_geometry_meta PASSED [ 26%] tests/test_gltf.py::GLTFTest::test_read_scene_extras PASSED [ 26%] tests/test_gltf.py::GLTFTest::test_same_name PASSED [ 26%] tests/test_gltf.py::GLTFTest::test_schema PASSED [ 26%] tests/test_gltf.py::GLTFTest::test_specular_glossiness PASSED [ 26%] tests/test_gltf.py::GLTFTest::test_strips PASSED [ 27%] tests/test_gltf.py::GLTFTest::test_tex_export FAILED [ 27%] tests/test_gltf.py::GLTFTest::test_units FAILED [ 27%] tests/test_gltf.py::GLTFTest::test_vertex_attrib FAILED [ 27%] tests/test_gltf.py::GLTFTest::test_vertex_colors FAILED [ 27%] tests/test_gltf.py::GLTFTest::test_write_dir FAILED [ 28%] tests/test_gmsh.py::GMSHTest::test_generate PASSED [ 28%] tests/test_graph.py::GraphTest::test_adjacency PASSED [ 28%] tests/test_graph.py::GraphTest::test_components PASSED [ 28%] tests/test_graph.py::GraphTest::test_engine_time PASSED [ 28%] tests/test_graph.py::GraphTest::test_engines PASSED [ 28%] tests/test_graph.py::GraphTest::test_smoothed PASSED [ 29%] tests/test_graph.py::GraphTest::test_soup PASSED [ 29%] tests/test_graph.py::GraphTest::test_traversals PASSED [ 29%] tests/test_graph.py::GraphTest::test_vertex_adjacency_graph PASSED [ 29%] tests/test_graph.py::GraphTest::test_watertight PASSED [ 29%] tests/test_grouping.py::GroupTests::test_block_wrap PASSED [ 30%] tests/test_grouping.py::GroupTests::test_blocks PASSED [ 30%] tests/test_grouping.py::GroupTests::test_boolean_rows PASSED [ 30%] tests/test_grouping.py::GroupTests::test_broken PASSED [ 30%] tests/test_grouping.py::GroupTests::test_cluster PASSED [ 30%] tests/test_grouping.py::GroupTests::test_group_rows PASSED [ 30%] tests/test_grouping.py::GroupTests::test_group_vector PASSED [ 31%] tests/test_grouping.py::GroupTests::test_runs PASSED [ 31%] tests/test_grouping.py::GroupTests::test_unique_float PASSED [ 31%] tests/test_grouping.py::GroupTests::test_unique_ordered PASSED [ 31%] tests/test_grouping.py::GroupTests::test_unique_ordered_rows PASSED [ 31%] tests/test_grouping.py::GroupTests::test_unique_rows PASSED [ 31%] tests/test_html.py::ViewTest::test_JSHTML FAILED [ 32%] tests/test_html.py::ViewTest::test_inNB PASSED [ 32%] tests/test_identifier.py::IdentifierTest::test_duplicates PASSED [ 32%] tests/test_identifier.py::IdentifierTest::test_identifier PASSED [ 32%] tests/test_identifier.py::IdentifierTest::test_reflection PASSED [ 32%] tests/test_identifier.py::IdentifierTest::test_scene_id PASSED [ 33%] tests/test_inertia.py::InertiaTest::test_cube_with_tetras PASSED [ 33%] tests/test_inertia.py::InertiaTest::test_frame_inertia_box PASSED [ 33%] tests/test_inertia.py::InertiaTest::test_inertia PASSED [ 33%] tests/test_inertia.py::InertiaTest::test_primitives PASSED [ 33%] tests/test_inertia.py::InertiaTest::test_scene PASSED [ 33%] tests/test_inertia.py::InertiaTest::test_tetrahedron PASSED [ 34%] tests/test_inertia.py::MassTests::test_mass PASSED [ 34%] tests/test_integralmeancurvature.py::IntegralMeanCurvatureTest::test_IMCbox PASSED [ 34%] tests/test_integralmeancurvature.py::IntegralMeanCurvatureTest::test_IMCcapsule PASSED [ 34%] tests/test_integralmeancurvature.py::IntegralMeanCurvatureTest::test_IMCsphere PASSED [ 34%] tests/test_integrate.py::IntegrateTest::test_integrate PASSED [ 35%] tests/test_interval.py::IntervalTest::test_intersection PASSED [ 35%] tests/test_light.py::LightTests::test_basic PASSED [ 35%] tests/test_loaded.py::LoaderTest::test_fileobj PASSED [ 35%] tests/test_loaded.py::LoaderTest::test_meshio PASSED [ 35%] tests/test_loaded.py::LoaderTest::test_remote PASSED [ 35%] tests/test_loaded.py::LoaderTest::test_stl PASSED [ 36%] tests/test_medial.py::MedialTests::test_medial PASSED [ 36%] tests/test_merge.py::MargeTest::test_cube PASSED [ 36%] tests/test_mesh.py::MeshTests::test_meshes PASSED [ 36%] tests/test_meta.py::MetaTest::test_glb FAILED [ 36%] tests/test_meta.py::MetaTest::test_svg PASSED [ 36%] tests/test_minimal.py::MinimalTest::test_load PASSED [ 37%] tests/test_minimal.py::MinimalTest::test_load_path FAILED [ 37%] tests/test_minimal.py::MinimalTest::test_load_wrap PASSED [ 37%] tests/test_minimal.py::MinimalTest::test_path_exc PASSED [ 37%] tests/test_mutate.py::MutateTests::test_not_mutated_bunny PASSED [ 37%] tests/test_mutate.py::MutateTests::test_not_mutated_cube PASSED [ 38%] tests/test_mutate.py::MutateTests::test_not_mutated_teapot PASSED [ 38%] tests/test_mutate.py::MutateTests::test_not_mutated_torus PASSED [ 38%] tests/test_normals.py::NormalsTest::test_face_normals PASSED [ 38%] tests/test_normals.py::NormalsTest::test_merge PASSED [ 38%] tests/test_normals.py::NormalsTest::test_vertex_normal PASSED [ 38%] tests/test_normals.py::NormalsTest::test_weighted_vertex_normals PASSED [ 39%] tests/test_nsphere.py::NSphereTest::test_isnsphere PASSED [ 39%] tests/test_nsphere.py::NSphereTest::test_minball PASSED [ 39%] tests/test_obj.py::OBJTest::test_backslash_continuation_character PASSED [ 39%] tests/test_obj.py::OBJTest::test_chair PASSED [ 39%] tests/test_obj.py::OBJTest::test_chunk_parsing_with_no_faces_but_with_f_in_chunk PASSED [ 40%] tests/test_obj.py::OBJTest::test_compound_scene_export PASSED [ 40%] tests/test_obj.py::OBJTest::test_edge_cases PASSED [ 40%] tests/test_obj.py::OBJTest::test_empty_or_pointcloud PASSED [ 40%] tests/test_obj.py::OBJTest::test_export_path PASSED [ 40%] tests/test_obj.py::OBJTest::test_face_parsing_in_group_names PASSED [ 40%] tests/test_obj.py::OBJTest::test_face_parsing_in_group_names_with_object_tag PASSED [ 41%] tests/test_obj.py::OBJTest::test_faces_not_enough_indices PASSED [ 41%] tests/test_obj.py::OBJTest::test_mtl PASSED [ 41%] tests/test_obj.py::OBJTest::test_mtl_color_roundtrip PASSED [ 41%] tests/test_obj.py::OBJTest::test_no_img PASSED [ 41%] tests/test_obj.py::OBJTest::test_no_uv PASSED [ 41%] tests/test_obj.py::OBJTest::test_no_uv_but_mtl PASSED [ 42%] tests/test_obj.py::OBJTest::test_obj_compressed PASSED [ 42%] tests/test_obj.py::OBJTest::test_obj_groups PASSED [ 42%] tests/test_obj.py::OBJTest::test_obj_multiobj PASSED [ 42%] tests/test_obj.py::OBJTest::test_obj_negative_indices PASSED [ 42%] tests/test_obj.py::OBJTest::test_obj_quad PASSED [ 43%] tests/test_obj.py::OBJTest::test_obj_simple_order PASSED [ 43%] tests/test_obj.py::OBJTest::test_obj_split_attributes PASSED [ 43%] tests/test_obj.py::OBJTest::test_order_tex PASSED [ 43%] tests/test_obj.py::OBJTest::test_polygon_faces PASSED [ 43%] tests/test_obj.py::OBJTest::test_rabbit PASSED [ 43%] tests/test_obj.py::OBJTest::test_scene PASSED [ 44%] tests/test_obj.py::OBJTest::test_scene_export_material_name PASSED [ 44%] tests/test_obj.py::OBJTest::test_single_vn PASSED [ 44%] tests/test_obj.py::OBJTest::test_trailing PASSED [ 44%] tests/test_obj.py::OBJTest::test_vertex_color PASSED [ 44%] tests/test_off.py::OFFTests::test_comment PASSED [ 45%] tests/test_off.py::OFFTests::test_corpus PASSED [ 45%] tests/test_off.py::OFFTests::test_whitespace PASSED [ 45%] tests/test_operators.py::OpTest::test_add PASSED [ 45%] tests/test_packing.py::PackingTest::test_3D PASSED [ 45%] tests/test_packing.py::PackingTest::test_image PASSED [ 45%] tests/test_packing.py::PackingTest::test_meshes PASSED [ 46%] tests/test_packing.py::PackingTest::test_obb PASSED [ 46%] tests/test_packing.py::PackingTest::test_paths PASSED [ 46%] tests/test_packing.py::PackingTest::test_transform PASSED [ 46%] tests/test_path_creation.py::CreationTests::test_circle PASSED [ 46%] tests/test_path_creation.py::CreationTests::test_circle_pattern PASSED [ 46%] tests/test_path_creation.py::CreationTests::test_grid PASSED [ 47%] tests/test_path_creation.py::CreationTests::test_rect PASSED [ 47%] tests/test_pathlib.py::PathTest::test_full_filetype PASSED [ 47%] tests/test_pathlib.py::PathTest::test_pathlib PASSED [ 47%] tests/test_paths.py::VectorTests::test_color PASSED [ 47%] tests/test_paths.py::VectorTests::test_discrete PASSED [ 48%] tests/test_paths.py::VectorTests::test_empty PASSED [ 48%] tests/test_paths.py::VectorTests::test_poly PASSED [ 48%] tests/test_paths.py::VectorTests::test_text PASSED [ 48%] tests/test_paths.py::SplitTest::test_split PASSED [ 48%] tests/test_paths.py::SectionTest::test_section PASSED [ 48%] tests/test_pbr.py::PBRTest::test_storage PASSED [ 49%] tests/test_permutate.py::PermutateTest::test_base PASSED [ 49%] tests/test_permutate.py::PermutateTest::test_permutate PASSED [ 49%] tests/test_permutate.py::PermutateTest::test_tesselation PASSED [ 49%] tests/test_ply.py::PlyTest::test_ascii_color PASSED [ 49%] tests/test_ply.py::PlyTest::test_blender_uv PASSED [ 50%] tests/test_ply.py::PlyTest::test_cases PASSED [ 50%] tests/test_ply.py::PlyTest::test_empty_or_pointcloud PASSED [ 50%] tests/test_ply.py::PlyTest::test_face_attributes PASSED [ 50%] tests/test_ply.py::PlyTest::test_fix_texture PASSED [ 50%] tests/test_ply.py::PlyTest::test_list_properties PASSED [ 50%] tests/test_ply.py::PlyTest::test_metadata PASSED [ 51%] tests/test_ply.py::PlyTest::test_ply PASSED [ 51%] tests/test_ply.py::PlyTest::test_ply_dtype PASSED [ 51%] tests/test_ply.py::PlyTest::test_points PASSED [ 51%] tests/test_ply.py::PlyTest::test_texturefile PASSED [ 51%] tests/test_ply.py::PlyTest::test_uv_export PASSED [ 51%] tests/test_ply.py::PlyTest::test_vertex_attributes PASSED [ 52%] tests/test_points.py::PointsTest::test_add_operator PASSED [ 52%] tests/test_points.py::PointsTest::test_empty PASSED [ 52%] tests/test_points.py::PointsTest::test_glb FAILED [ 52%] tests/test_points.py::PointsTest::test_kmeans PASSED [ 52%] tests/test_points.py::PointsTest::test_obb PASSED [ 53%] tests/test_points.py::PointsTest::test_plane PASSED [ 53%] tests/test_points.py::PointsTest::test_ply PASSED [ 53%] tests/test_points.py::PointsTest::test_pointcloud PASSED [ 53%] tests/test_points.py::PointsTest::test_radial_sort PASSED [ 53%] tests/test_points.py::PointsTest::test_remove_close PASSED [ 53%] tests/test_points.py::PointsTest::test_tsp PASSED [ 54%] tests/test_points.py::PointsTest::test_vertex_only PASSED [ 54%] tests/test_points.py::PointsTest::test_xyz PASSED [ 54%] tests/test_polygons.py::PolygonTests::test_edges PASSED [ 54%] tests/test_polygons.py::PolygonTests::test_native_centroid PASSED [ 54%] tests/test_polygons.py::PolygonTests::test_project PASSED [ 55%] tests/test_polygons.py::PolygonTests::test_project_backface PASSED [ 55%] tests/test_polygons.py::PolygonTests::test_project_multi PASSED [ 55%] tests/test_polygons.py::PolygonTests::test_random_polygon PASSED [ 55%] tests/test_polygons.py::PolygonTests::test_sample PASSED [ 55%] tests/test_polygons.py::PolygonTests::test_second_moment PASSED [ 55%] tests/test_poses.py::PosesTest::test_multiple PASSED [ 56%] tests/test_poses.py::PosesTest::test_nonsampling_poses PASSED [ 56%] tests/test_poses.py::PosesTest::test_round PASSED [ 56%] tests/test_primitives.py::PrimitiveTest::test_box PASSED [ 56%] tests/test_primitives.py::PrimitiveTest::test_cyl_buffer PASSED [ 56%] tests/test_primitives.py::PrimitiveTest::test_mesh_schema FAILED [ 56%] tests/test_primitives.py::PrimitiveTest::test_primitives FAILED [ 57%] tests/test_primitives.py::PrimitiveTest::test_sample PASSED [ 57%] tests/test_primitives.py::PrimitiveTest::test_scaling PASSED [ 57%] tests/test_primitives.py::PrimitiveTest::test_sphere_center PASSED [ 57%] tests/test_primitives.py::PrimitiveTest::test_transform_attribute PASSED [ 57%] tests/test_proximity.py::NearestTest::test_acute_edge_case PASSED [ 58%] tests/test_proximity.py::NearestTest::test_candidates PASSED [ 58%] tests/test_proximity.py::NearestTest::test_coplanar_signed_distance PASSED [ 58%] tests/test_proximity.py::NearestTest::test_edge_case PASSED [ 58%] tests/test_proximity.py::NearestTest::test_helper PASSED [ 58%] tests/test_proximity.py::NearestTest::test_naive PASSED [ 58%] tests/test_proximity.py::NearestTest::test_nearest_naive PASSED [ 59%] tests/test_proximity.py::NearestTest::test_noncoplanar_signed_distance PASSED [ 59%] tests/test_proximity.py::NearestTest::test_returns_correct_point_in_ambiguous_cases PASSED [ 59%] tests/test_proximity.py::NearestTest::test_unreferenced_vertex PASSED [ 59%] tests/test_raster.py::RasterTest::test_nested PASSED [ 59%] tests/test_raster.py::RasterTest::test_rasterize PASSED [ 60%] tests/test_ray.py::RayTests::test_box PASSED [ 60%] tests/test_ray.py::RayTests::test_contain_single PASSED [ 60%] tests/test_ray.py::RayTests::test_contains PASSED [ 60%] tests/test_ray.py::RayTests::test_empty PASSED [ 60%] tests/test_ray.py::RayTests::test_multiple_hits PASSED [ 60%] tests/test_ray.py::RayTests::test_on_edge PASSED [ 61%] tests/test_ray.py::RayTests::test_on_vertex PASSED [ 61%] tests/test_ray.py::RayTests::test_rays PASSED [ 61%] tests/test_ray.py::RayTests::test_rps PASSED [ 61%] tests/test_registration.py::RegistrationTest::test_icp_mesh PASSED [ 61%] tests/test_registration.py::RegistrationTest::test_icp_points PASSED [ 61%] tests/test_registration.py::RegistrationTest::test_mesh PASSED [ 62%] tests/test_registration.py::RegistrationTest::test_nricp PASSED [ 62%] tests/test_registration.py::RegistrationTest::test_procrustes PASSED [ 62%] tests/test_registration.py::RegistrationTest::test_query_from_mesh PASSED [ 62%] tests/test_registration.py::RegistrationTest::test_query_from_points PASSED [ 62%] tests/test_remesh.py::SubDivideTest::test_idx_simple PASSED [ 63%] tests/test_remesh.py::SubDivideTest::test_loop PASSED [ 63%] tests/test_remesh.py::SubDivideTest::test_loop_bound PASSED [ 63%] tests/test_remesh.py::SubDivideTest::test_loop_correct PASSED [ 63%] tests/test_remesh.py::SubDivideTest::test_loop_multi_simple PASSED [ 63%] tests/test_remesh.py::SubDivideTest::test_loop_multibody PASSED [ 63%] tests/test_remesh.py::SubDivideTest::test_max_iter PASSED [ 64%] tests/test_remesh.py::SubDivideTest::test_sub PASSED [ 64%] tests/test_remesh.py::SubDivideTest::test_subdivide PASSED [ 64%] tests/test_remesh.py::SubDivideTest::test_uv PASSED [ 64%] tests/test_render.py::RenderTest::test_args PASSED [ 64%] tests/test_repair.py::RepairTests::test_fan PASSED [ 65%] tests/test_repair.py::RepairTests::test_fill_holes PASSED [ 65%] tests/test_repair.py::RepairTests::test_fix_normals PASSED [ 65%] tests/test_repair.py::RepairTests::test_flip PASSED [ 65%] tests/test_repair.py::RepairTests::test_inversion PASSED [ 65%] tests/test_repair.py::RepairTests::test_multi PASSED [ 65%] tests/test_repair.py::RepairTests::test_winding PASSED [ 66%] tests/test_repr.py::ReprTest::test_repr PASSED [ 66%] tests/test_resolvers.py::ResolverTest::test_filepath_namespace PASSED [ 66%] tests/test_resolvers.py::ResolverTest::test_items PASSED [ 66%] tests/test_resolvers.py::ResolverTest::test_web_namespace PASSED [ 66%] tests/test_runlength.py::RleTest::test_brle_decode_encode PASSED [ 66%] tests/test_runlength.py::RleTest::test_brle_encode_decode PASSED [ 67%] tests/test_runlength.py::RleTest::test_brle_length PASSED [ 67%] tests/test_runlength.py::RleTest::test_brle_logical_not PASSED [ 67%] tests/test_runlength.py::RleTest::test_brle_mask PASSED [ 67%] tests/test_runlength.py::RleTest::test_brle_split_merge PASSED [ 67%] tests/test_runlength.py::RleTest::test_brle_strip PASSED [ 68%] tests/test_runlength.py::RleTest::test_brle_to_dense PASSED [ 68%] tests/test_runlength.py::RleTest::test_brle_to_rle PASSED [ 68%] tests/test_runlength.py::RleTest::test_dense_to_brle PASSED [ 68%] tests/test_runlength.py::RleTest::test_merge_brle_lengths PASSED [ 68%] tests/test_runlength.py::RleTest::test_merge_rle_lengths PASSED [ 68%] tests/test_runlength.py::RleTest::test_rle_decode_encode PASSED [ 69%] tests/test_runlength.py::RleTest::test_rle_encode_decode PASSED [ 69%] tests/test_runlength.py::RleTest::test_rle_length PASSED [ 69%] tests/test_runlength.py::RleTest::test_rle_mask PASSED [ 69%] tests/test_runlength.py::RleTest::test_rle_strip PASSED [ 69%] tests/test_runlength.py::RleTest::test_rle_to_brle PASSED [ 70%] tests/test_runlength.py::RleTest::test_rle_to_dense PASSED [ 70%] tests/test_runlength.py::RleTest::test_split_long_brle_lengths PASSED [ 70%] tests/test_runlength.py::RleTest::test_split_long_rle_lengths PASSED [ 70%] tests/test_sample.py::SampleTest::test_color PASSED [ 70%] tests/test_sample.py::SampleTest::test_deterministic_sample PASSED [ 70%] tests/test_sample.py::SampleTest::test_sample PASSED [ 71%] tests/test_sample.py::SampleTest::test_sample_volume PASSED [ 71%] tests/test_sample.py::SampleTest::test_weights PASSED [ 71%] tests/test_scene.py::SceneTests::test_3DXML PASSED [ 71%] tests/test_scene.py::SceneTests::test_add_concat PASSED [ 71%] tests/test_scene.py::SceneTests::test_add_geometry PASSED [ 71%] tests/test_scene.py::SceneTests::test_append_scenes PASSED [ 72%] tests/test_scene.py::SceneTests::test_concatenate_mixed PASSED [ 72%] tests/test_scene.py::SceneTests::test_dedupe PASSED [ 72%] tests/test_scene.py::SceneTests::test_delete PASSED [ 72%] tests/test_scene.py::SceneTests::test_doubling PASSED [ 72%] tests/test_scene.py::SceneTests::test_dupe PASSED [ 73%] tests/test_scene.py::SceneTests::test_empty PASSED [ 73%] tests/test_scene.py::SceneTests::test_empty_scene PASSED [ 73%] tests/test_scene.py::SceneTests::test_exact_bounds PASSED [ 73%] tests/test_scene.py::SceneTests::test_export_concat PASSED [ 73%] tests/test_scene.py::SceneTests::test_material_group PASSED [ 73%] tests/test_scene.py::SceneTests::test_scaling PASSED [ 74%] tests/test_scene.py::SceneTests::test_scaling_3D PASSED [ 74%] tests/test_scene.py::SceneTests::test_scaling_3D_mixed PASSED [ 74%] tests/test_scene.py::SceneTests::test_scene FAILED [ 74%] tests/test_scene.py::SceneTests::test_scene_concat PASSED [ 74%] tests/test_scene.py::SceneTests::test_strip PASSED [ 75%] tests/test_scene.py::SceneTests::test_transform PASSED [ 75%] tests/test_scene.py::SceneTests::test_tri PASSED [ 75%] tests/test_scene.py::SceneTests::test_zipped PASSED [ 75%] tests/test_scenegraph.py::GraphTests::test_cache PASSED [ 75%] tests/test_scenegraph.py::GraphTests::test_forest PASSED [ 75%] tests/test_scenegraph.py::GraphTests::test_kwargs PASSED [ 76%] tests/test_scenegraph.py::GraphTests::test_nodes PASSED [ 76%] tests/test_scenegraph.py::GraphTests::test_remove_node PASSED [ 76%] tests/test_scenegraph.py::GraphTests::test_reverse PASSED [ 76%] tests/test_scenegraph.py::GraphTests::test_scaling_order PASSED [ 76%] tests/test_scenegraph.py::GraphTests::test_scene_transform PASSED [ 76%] tests/test_scenegraph.py::GraphTests::test_shortest_path PASSED [ 77%] tests/test_scenegraph.py::GraphTests::test_subscene PASSED [ 77%] tests/test_scenegraph.py::GraphTests::test_successors PASSED [ 77%] tests/test_scenegraph.py::GraphTests::test_translation_cache PASSED [ 77%] tests/test_scenegraph.py::GraphTests::test_translation_origin PASSED [ 77%] tests/test_section.py::SectionTest::test_multi_index PASSED [ 78%] tests/test_section.py::SectionTest::test_section PASSED [ 78%] tests/test_section.py::PlaneLine::test_planes PASSED [ 78%] tests/test_section.py::SliceTest::test_cap PASSED [ 78%] tests/test_section.py::SliceTest::test_cap_coplanar PASSED [ 78%] tests/test_section.py::SliceTest::test_cap_nohit PASSED [ 78%] tests/test_section.py::SliceTest::test_slice PASSED [ 79%] tests/test_section.py::SliceTest::test_slice_exit PASSED [ 79%] tests/test_section.py::SliceTest::test_slice_submesh PASSED [ 79%] tests/test_segments.py::SegmentsTest::test_colinear PASSED [ 79%] tests/test_segments.py::SegmentsTest::test_extrude PASSED [ 79%] tests/test_segments.py::SegmentsTest::test_param PASSED [ 80%] tests/test_segments.py::SegmentsTest::test_resample PASSED [ 80%] tests/test_segments.py::SegmentsTest::test_svg PASSED [ 80%] tests/test_simplify.py::SimplifyTest::test_merge_colinear PASSED [ 80%] tests/test_simplify.py::SimplifyTest::test_simplify PASSED [ 80%] tests/test_simplify.py::SimplifyTest::test_spline PASSED [ 80%] tests/test_smooth.py::SmoothTest::test_smooth PASSED [ 81%] tests/test_smoothing.py::SmoothTest::test_smooth PASSED [ 81%] tests/test_splines.py::SplineTests::test_bezier_example PASSED [ 81%] tests/test_stl.py::STLTests::test_ascii_keyword PASSED [ 81%] tests/test_stl.py::STLTests::test_ascii_multibody PASSED [ 81%] tests/test_stl.py::STLTests::test_attrib PASSED [ 81%] tests/test_stl.py::STLTests::test_empty PASSED [ 82%] tests/test_stl.py::STLTests::test_header PASSED [ 82%] tests/test_stl.py::STLTests::test_vertex_order PASSED [ 82%] tests/test_svg.py::ExportTest::test_layer PASSED [ 82%] tests/test_svg.py::ExportTest::test_roundtrip PASSED [ 82%] tests/test_svg.py::ExportTest::test_svg PASSED [ 83%] tests/test_svg.py::ExportTest::test_trans PASSED [ 83%] tests/test_texture.py::TextureTest::test_bad_uv PASSED [ 83%] tests/test_texture.py::TextureTest::test_concatenate PASSED [ 83%] tests/test_texture.py::TextureTest::test_concatentate_multi PASSED [ 83%] tests/test_texture.py::TextureTest::test_fuze PASSED [ 83%] tests/test_texture.py::TextureTest::test_order_kwarg PASSED [ 84%] tests/test_texture.py::TextureTest::test_pbr_export PASSED [ 84%] tests/test_texture.py::TextureTest::test_to_tex PASSED [ 84%] tests/test_texture.py::TextureTest::test_upsize PASSED [ 84%] tests/test_texture.py::TextureTest::test_uv_none PASSED [ 84%] tests/test_texture.py::TextureTest::test_uv_to_color PASSED [ 85%] tests/test_thickness.py::ThicknessTest::test_known PASSED [ 85%] tests/test_thickness.py::ThicknessTest::test_ray_reach PASSED [ 85%] tests/test_thickness.py::ThicknessTest::test_ray_thickness PASSED [ 85%] tests/test_thickness.py::ThicknessTest::test_sphere_reach PASSED [ 85%] tests/test_thickness.py::ThicknessTest::test_sphere_thickness PASSED [ 85%] tests/test_trackball.py::TrackballTest::test_drag_pan PASSED [ 86%] tests/test_trackball.py::TrackballTest::test_drag_roll PASSED [ 86%] tests/test_trackball.py::TrackballTest::test_drag_rotate PASSED [ 86%] tests/test_trackball.py::TrackballTest::test_drag_zoom PASSED [ 86%] tests/test_trackball.py::TrackballTest::test_resize PASSED [ 86%] tests/test_trackball.py::TrackballTest::test_rotate PASSED [ 86%] tests/test_trackball.py::TrackballTest::test_scroll PASSED [ 87%] tests/test_transformations.py::TransformTest::test_around PASSED [ 87%] tests/test_transformations.py::TransformTest::test_doctest PASSED [ 87%] tests/test_transformations.py::TransformTest::test_downstream PASSED [ 87%] tests/test_transformations.py::TransformTest::test_quat PASSED [ 87%] tests/test_transformations.py::TransformTest::test_rotation PASSED [ 88%] tests/test_transformations.py::TransformTest::test_tiny PASSED [ 88%] tests/test_triangles.py::TrianglesTest::test_angles PASSED [ 88%] tests/test_triangles.py::TrianglesTest::test_barycentric PASSED [ 88%] tests/test_triangles.py::TrianglesTest::test_closest PASSED [ 88%] tests/test_triangles.py::TrianglesTest::test_closest_obtuse PASSED [ 88%] tests/test_triangles.py::TrianglesTest::test_degenerate PASSED [ 89%] tests/test_units.py::UnitsTest::test_conversion PASSED [ 89%] tests/test_units.py::UnitsTest::test_path PASSED [ 89%] tests/test_units.py::UnitsTest::test_units PASSED [ 89%] tests/test_unwrap.py::UnwrapTest::test_image PASSED [ 89%] tests/test_upstream.py::UpstreamTests::test_shapely PASSED [ 90%] tests/test_urdf.py::URDFTest::test_export PASSED [ 90%] tests/test_util.py::VectorTests::test_align PASSED [ 90%] tests/test_util.py::VectorTests::test_unitize_multi PASSED [ 90%] tests/test_util.py::UtilTests::test_bounds_tree PASSED [ 90%] tests/test_util.py::UtilTests::test_concat PASSED [ 90%] tests/test_util.py::UtilTests::test_has_module PASSED [ 91%] tests/test_util.py::UtilTests::test_pairwise PASSED [ 91%] tests/test_util.py::UtilTests::test_stack PASSED [ 91%] tests/test_util.py::UtilTests::test_strips PASSED [ 91%] tests/test_util.py::UtilTests::test_unique_id PASSED [ 91%] tests/test_util.py::UtilTests::test_unique_name PASSED [ 91%] tests/test_util.py::ContainsTest::test_inside PASSED [ 92%] tests/test_util.py::IOWrapTests::test_io_wrap PASSED [ 92%] tests/test_util.py::CompressTests::test_compress PASSED [ 92%] tests/test_util.py::UniqueTests::test_unique PASSED [ 92%] tests/test_util.py::CommentTests::test_comment PASSED [ 92%] tests/test_util.py::ArrayToString::test_converts_an_unstructured_1d_array PASSED [ 93%] tests/test_util.py::ArrayToString::test_converts_an_unstructured_float_array PASSED [ 93%] tests/test_util.py::ArrayToString::test_converts_an_unstructured_int_array PASSED [ 93%] tests/test_util.py::ArrayToString::test_raises_if_array_is_not_flat PASSED [ 93%] tests/test_util.py::ArrayToString::test_raises_if_array_is_structured PASSED [ 93%] tests/test_util.py::ArrayToString::test_supports_repeat_format PASSED [ 93%] tests/test_util.py::ArrayToString::test_supports_uints PASSED [ 94%] tests/test_util.py::ArrayToString::test_uses_the_specified_column_delimiter PASSED [ 94%] tests/test_util.py::ArrayToString::test_uses_the_specified_row_delimiter PASSED [ 94%] tests/test_util.py::ArrayToString::test_uses_the_specified_value_format PASSED [ 94%] tests/test_util.py::StructuredArrayToString::test_converts_a_structured_array_with_1d_elements PASSED [ 94%] tests/test_util.py::StructuredArrayToString::test_converts_a_structured_array_with_2d_elements PASSED [ 95%] tests/test_util.py::StructuredArrayToString::test_raises_if_array_is_not_flat PASSED [ 95%] tests/test_util.py::StructuredArrayToString::test_raises_if_array_is_unstructured PASSED [ 95%] tests/test_util.py::StructuredArrayToString::test_raises_if_value_format_specifies_repeats PASSED [ 95%] tests/test_util.py::StructuredArrayToString::test_supports_uints PASSED [ 95%] tests/test_util.py::StructuredArrayToString::test_uses_the_specified_column_delimiter PASSED [ 95%] tests/test_util.py::StructuredArrayToString::test_uses_the_specified_row_delimiter PASSED [ 96%] tests/test_util.py::StructuredArrayToString::test_uses_the_specified_value_format PASSED [ 96%] tests/test_vector.py::SphericalTests::test_spherical PASSED [ 96%] tests/test_vector.py::HemisphereTests::test_hemisphere PASSED [ 96%] tests/test_vertices.py::VerticesTest::test_vertex_faces PASSED [ 96%] tests/test_vhacd.py::VHACDTest::test_vhacd PASSED [ 96%] tests/test_viewer.py::ViewerTest::test_viewer PASSED [ 97%] tests/test_visual.py::VisualTest::test_face_subset_color_visuals PASSED [ 97%] tests/test_visual.py::VisualTest::test_face_subset_texture_visuals PASSED [ 97%] tests/test_voxel.py::VoxelGridTest::test_as_boxes PASSED [ 97%] tests/test_voxel.py::VoxelGridTest::test_binvox_with_dimension PASSED [ 97%] tests/test_voxel.py::VoxelGridTest::test_fill PASSED [ 98%] tests/test_voxel.py::VoxelGridTest::test_hollow PASSED [ 98%] tests/test_voxel.py::VoxelGridTest::test_is_filled PASSED [ 98%] tests/test_voxel.py::VoxelGridTest::test_local PASSED [ 98%] tests/test_voxel.py::VoxelGridTest::test_marching PASSED [ 98%] tests/test_voxel.py::VoxelGridTest::test_marching_points PASSED [ 98%] tests/test_voxel.py::VoxelGridTest::test_points_to_from_indices PASSED [ 99%] tests/test_voxel.py::VoxelGridTest::test_roundtrip PASSED [ 99%] tests/test_voxel.py::VoxelGridTest::test_strip PASSED [ 99%] tests/test_voxel.py::VoxelGridTest::test_vox_sphere PASSED [ 99%] tests/test_voxel.py::VoxelGridTest::test_voxel PASSED [ 99%] tests/test_voxel.py::VoxelGridTest::test_voxel_rle PASSED [100%] =================================== FAILURES =================================== ____________________________ ExportTest.test_export ____________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_export(self): from trimesh.exceptions import ExceptionWrapper export_types = set(k for k, v in g.trimesh.exchange.export._mesh_exporters.items() if not isinstance(v, ExceptionWrapper)) meshes = list(g.get_meshes(8)) # make sure we've got something with texture meshes.append(g.get_mesh('fuze.obj')) for mesh in meshes: # disregard texture mesh.merge_vertices(merge_tex=True, merge_norm=True) for file_type in export_types: # skip pointcloud format if file_type in ['xyz', 'gltf']: # a pointcloud format continue # run the export > export = mesh.export(file_type=file_type) tests/test_export.py:32: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/base.py:2803: in export return export_mesh( trimesh/exchange/export.py:87: in export_mesh export = _mesh_exporters[file_type](mesh, **kwargs) trimesh/exchange/gltf.py:255: in export_glb validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError ------------------------------ Captured log call ------------------------------- WARNING trimesh:generic.py:394 2D has no loader, not running test on! WARNING trimesh:generic.py:394 BREP has no loader, not running test on! WARNING trimesh:generic.py:394 TestScene.bin has no loader, not running test on! WARNING trimesh:generic.py:394 blue_cube.dae has no loader, not running test on! __________________________ ExportTest.test_gltf_path ___________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_gltf_path(self): """ Check to make sure GLTF exports of Path2D and Path3D objects don't immediately crash. """ path2D = g.get_mesh('2D/wrench.dxf') path3D = path2D.to_3D() > a = g.trimesh.Scene(path2D).export(file_type='glb') tests/test_export.py:251: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/scene/scene.py:941: in export return export.export_scene( trimesh/exchange/export.py:262: in export_scene data = export_glb(scene, **kwargs) trimesh/exchange/gltf.py:255: in export_glb validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError ____________________________ ExportTest.test_scene _____________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_scene(self): # get a multi- mesh scene with a transform tree source = g.get_mesh('cycloidal.3DXML') # add a transform to zero scene before exporting source.rezero() # export the file as a binary GLTF file, GLB > export = source.export(file_type='glb') tests/test_export.py:234: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/scene/scene.py:941: in export return export.export_scene( trimesh/exchange/export.py:262: in export_scene data = export_glb(scene, **kwargs) trimesh/exchange/gltf.py:255: in export_glb validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError ___________________________ GLTFTest.test_alphamode ____________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_alphamode(self): # A GLTF with combinations of AlphaMode and AlphaCutoff s = g.get_mesh('AlphaBlendModeTest.glb') # should be 5 test geometries assert len([geom for geom in s.geometry if geom.startswith('Test')]) == 5 assert s.geometry['TestCutoffDefaultMesh'].visual.material.alphaMode == 'MASK' assert s.geometry['TestCutoff25Mesh'].visual.material.alphaMode == 'MASK' assert s.geometry['TestCutoff25Mesh'].visual.material.alphaCutoff == 0.25 assert s.geometry['TestCutoff75Mesh'].visual.material.alphaMode == 'MASK' assert s.geometry['TestCutoff75Mesh'].visual.material.alphaCutoff == 0.75 assert s.geometry['TestBlendMesh'].visual.material.alphaMode == 'BLEND' # defaults OPAQUE assert s.geometry['TestOpaqueMesh'].visual.material.alphaMode is None > export = s.export(file_type='glb') tests/test_gltf.py:169: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/scene/scene.py:941: in export return export.export_scene( trimesh/exchange/export.py:262: in export_scene data = export_glb(scene, **kwargs) trimesh/exchange/gltf.py:255: in export_glb validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError _____________________________ GLTFTest.test_basic ______________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_basic(self): # split a multibody mesh into a scene scene = g.trimesh.scene.split_scene( g.get_mesh('cycloidal.ply')) # should be 117 geometries assert len(scene.geometry) >= 117 # a dict with {file name: str} > export = scene.export(file_type='gltf') tests/test_gltf.py:243: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/scene/scene.py:941: in export return export.export_scene( trimesh/exchange/export.py:260: in export_scene data = export_gltf(scene, **kwargs) trimesh/exchange/gltf.py:163: in export_gltf validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError _________________________ GLTFTest.test_buffer_dedupe __________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_buffer_dedupe(self): scene = g.trimesh.Scene() box_1 = g.trimesh.creation.box() box_2 = g.trimesh.creation.box() box_3 = g.trimesh.creation.box() box_3.visual.face_colors = [0, 255, 0, 255] tm = g.trimesh.transformations.translation_matrix scene.add_geometry( box_1, 'box_1', transform=tm((1, 1, 1))) scene.add_geometry( box_2, 'box_2', transform=tm((-1, -1, -1))) scene.add_geometry( box_3, 'box_3', transform=tm((-1, 20, -1))) > a = g.json.loads(scene.export( file_type='gltf')['model.gltf'].decode('utf-8')) tests/test_gltf.py:119: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/scene/scene.py:941: in export return export.export_scene( trimesh/exchange/export.py:260: in export_scene data = export_gltf(scene, **kwargs) trimesh/exchange/gltf.py:163: in export_gltf validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError ______________________________ GLTFTest.test_bulk ______________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_bulk(self): # Try exporting every loadable model to GLTF and checking # the generated header against the schema. # strict mode runs a schema header validation assert g.trimesh.tol.strict # check mesh, path, pointcloud exports for root in [g.dir_models, g.os.path.join(g.dir_models, '2D')]: for fn in g.os.listdir(root): path_in = g.os.path.join(root, fn) try: geom = g.trimesh.load(path_in) if isinstance(geom, g.trimesh.path.path.Path): geom = g.trimesh.Scene(geom) except BaseException as E: g.log.debug(E) continue # voxels don't have an export to gltf mode if isinstance(geom, g.trimesh.voxel.VoxelGrid): try: geom.export(file_type='glb') except ValueError: # should have raised so all good continue raise ValueError( 'voxel was allowed to export wrong GLB!') if hasattr(geom, 'vertices') and len(geom.vertices) == 0: continue if hasattr(geom, 'geometry') and len(geom.geometry) == 0: continue g.log.info('Testing: {}'.format(fn)) # check a roundtrip which will validate on export # and crash on reload if we've done anything screwey # unitize normals will unitize any normals to comply with # the validator although there are probably reasons you'd # want to roundtrip non-unit normals for things, stuff, and # activities > export = geom.export(file_type='glb', unitize_normals=True) tests/test_gltf.py:856: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/base.py:2803: in export return export_mesh( trimesh/exchange/export.py:87: in export_mesh export = _mesh_exporters[file_type](mesh, **kwargs) trimesh/exchange/gltf.py:255: in export_glb validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError _____________________________ GLTFTest.test_cesium _____________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_cesium(self): # A GLTF with a multi- primitive mesh s = g.get_mesh('CesiumMilkTruck.glb') # should be one Trimesh object per GLTF "primitive" assert len(s.geometry) == 4 # every geometry displayed once, except wheels twice assert len(s.graph.nodes_geometry) == 5 # make sure export doesn't crash > export = s.export(file_type='glb') tests/test_gltf.py:145: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/scene/scene.py:941: in export return export.export_scene( trimesh/exchange/export.py:262: in export_scene data = export_glb(scene, **kwargs) trimesh/exchange/gltf.py:255: in export_glb validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError ______________________________ GLTFTest.test_duck ______________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_duck(self): scene = g.get_mesh('Duck.glb', process=False) # should have one mesh assert len(scene.geometry) == 1 # get the mesh geom = next(iter(scene.geometry.values())) # vertex normals should have been loaded assert 'vertex_normals' in geom._cache.cache # should not be watertight assert not geom.is_volume # make sure export doesn't crash > export = scene.export(file_type='glb') tests/test_gltf.py:80: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/scene/scene.py:941: in export return export.export_scene( trimesh/exchange/export.py:262: in export_scene data = export_glb(scene, **kwargs) trimesh/exchange/gltf.py:255: in export_glb validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError __________________________ GLTFTest.test_embed_buffer __________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_embed_buffer(self): scene = g.trimesh.Scene({ 'thing': g.trimesh.primitives.Sphere(), 'other': g.trimesh.creation.capsule()}) with g.trimesh.util.TemporaryDirectory() as D: path = g.os.path.join(D, 'hi.gltf') > scene.export(path) tests/test_gltf.py:932: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/scene/scene.py:941: in export return export.export_scene( trimesh/exchange/export.py:260: in export_scene data = export_gltf(scene, **kwargs) trimesh/exchange/gltf.py:163: in export_gltf validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError ________________________ GLTFTest.test_equal_by_default ________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_equal_by_default(self): # all things being equal we shouldn't be moving things # for the usual load-export loop s = g.get_mesh('fuze.obj') # export as GLB then re-load > export = s.export(file_type='glb', unitize_normals=True) tests/test_gltf.py:892: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/base.py:2803: in export return export_mesh( trimesh/exchange/export.py:87: in export_mesh export = _mesh_exporters[file_type](mesh, **kwargs) trimesh/exchange/gltf.py:255: in export_glb validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError ____________________ GLTFTest.test_export_custom_attributes ____________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_export_custom_attributes(self): # Write and read custom vertex attributes to gltf sphere = g.trimesh.primitives.Sphere() v_count, _ = sphere.vertices.shape sphere.vertex_attributes[ '_CustomFloat32Scalar'] = g.np.random.rand( v_count, 1).astype(g.np.float32) sphere.vertex_attributes[ '_CustomFloat32Vec3'] = g.np.random.rand( v_count, 3).astype(g.np.float32) sphere.vertex_attributes[ '_CustomFloat32Mat4'] = g.np.random.rand( v_count, 4, 4).astype(g.np.float32) # export as GLB bytes > export = sphere.export(file_type='glb') tests/test_gltf.py:508: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/base.py:2803: in export return export_mesh( trimesh/exchange/export.py:87: in export_mesh export = _mesh_exporters[file_type](mesh, **kwargs) trimesh/exchange/gltf.py:255: in export_glb validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError _______________________ GLTFTest.test_export_postprocess _______________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_export_postprocess(self): scene = g.trimesh.Scene() sphere = g.trimesh.primitives.Sphere() sphere.visual.material = g.trimesh.visual.material.PBRMaterial( name='unlit_test') scene.add_geometry(sphere) def add_unlit(gltf_tree): for material_dict in gltf_tree['materials']: if 'unlit' in material_dict.get('name', '').lower(): material_dict["extensions"] = { "KHR_materials_unlit": {} } gltf_tree["extensionsUsed"] = ["KHR_materials_unlit"] > gltf_1 = g.trimesh.exchange.gltf.export_gltf(scene) tests/test_gltf.py:761: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/exchange/gltf.py:163: in export_gltf validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError _____________________________ GLTFTest.test_extras _____________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_extras(self): # if GLTF extras are defined, make sure they survive a round trip s = g.get_mesh('cycloidal.3DXML') scene_extensions = {'mesh_ext': {'ext_data': 1.23}} # some dummy data dummy = { 'who': 'likes cheese', 'potatoes': 25, 'gtlf_extensions': scene_extensions} # export as GLB with extras passed to the exporter then re-load s.metadata = dummy > export = s.export(file_type='glb') tests/test_gltf.py:560: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/scene/scene.py:941: in export return export.export_scene( trimesh/exchange/export.py:262: in export_scene data = export_glb(scene, **kwargs) trimesh/exchange/gltf.py:255: in export_glb validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError __________________________ GLTFTest.test_extras_nodes __________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_extras_nodes(self): mesh_extensions = {'mesh_ext': {'ext_data': 1.23}} test_metadata = { 'test_str': 'test_value', 'test_int': 1, 'test_float': 0.123456789, 'test_bool': True, 'test_array': [1, 2, 3], 'test_dict': {'a': 1, 'b': 2}, 'gltf_extensions': mesh_extensions } sphere1 = g.trimesh.primitives.Sphere(radius=1.0) sphere1.metadata.update(test_metadata) sphere2 = g.trimesh.primitives.Sphere(radius=2.0) sphere2.metadata.update(test_metadata) tf1 = g.trimesh.transformations.translation_matrix([0, 0, -2]) tf2 = g.trimesh.transformations.translation_matrix([5, 5, 5]) s = g.trimesh.scene.Scene() s.add_geometry( sphere1, node_name="Sphere1", geom_name="Geom Sphere1", transform=tf1, metadata={'field': 'extra_data1'}) node_extensions = {'mesh_ext': {'ext_data': 1.23}} sphere2_metadata = { 'field': 'extra_data2', 'gltf_extensions': node_extensions} s.add_geometry(sphere2, node_name="Sphere2", geom_name="Geom Sphere2", parent_node_name="Sphere1", transform=tf2, metadata=sphere2_metadata) # Test extras appear in the exported model nodes > files = s.export(None, "gltf") tests/test_gltf.py:610: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/scene/scene.py:941: in export return export.export_scene( trimesh/exchange/export.py:260: in export_scene data = export_gltf(scene, **kwargs) trimesh/exchange/gltf.py:163: in export_gltf validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError __________________________ GLTFTest.test_gltf_by_name __________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_gltf_by_name(self): m = g.trimesh.creation.icosphere() with g.TemporaryDirectory() as d: # export the GLTF file by name file_path = g.os.path.join(d, 'hi.gltf') # export the file by path > m.export(file_path) tests/test_gltf.py:916: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/base.py:2803: in export return export_mesh( trimesh/exchange/export.py:87: in export_mesh export = _mesh_exporters[file_type](mesh, **kwargs) trimesh/exchange/gltf.py:163: in export_gltf validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError ___________________________ GLTFTest.test_gltf_pole ____________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_gltf_pole(self): scene = g.get_mesh('simple_pole.glb') # should have multiple primitives assert len(scene.geometry) == 11 > export = scene.export(file_type='glb') tests/test_gltf.py:381: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/scene/scene.py:941: in export return export.export_scene( trimesh/exchange/export.py:262: in export_scene data = export_glb(scene, **kwargs) trimesh/exchange/gltf.py:255: in export_glb validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError _________________________ GLTFTest.test_material_hash __________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_material_hash(self): # load mesh twice independently a = g.get_mesh('fuze.obj') b = g.get_mesh('fuze.obj') # move one of the meshes away from the other a.apply_translation([a.scale, 0, 0]) # materials should not be the same object assert id(a.visual.material) != id(b.visual.material) # despite being loaded separately material hash should match assert hash(a.visual.material) == hash(b.visual.material) # create a scene with two meshes scene = g.trimesh.Scene([a, b]) # get the exported GLTF header of a scene with both meshes > header = g.json.loads(scene.export( file_type='gltf', unitize_normals=True)['model.gltf'].decode('utf-8')) tests/test_gltf.py:406: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/scene/scene.py:941: in export return export.export_scene( trimesh/exchange/export.py:260: in export_scene data = export_gltf(scene, **kwargs) trimesh/exchange/gltf.py:163: in export_gltf validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError _________________________ GLTFTest.test_merge_buffers __________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_merge_buffers(self): # split a multibody mesh into a scene scene = g.trimesh.scene.split_scene( g.get_mesh('cycloidal.ply')) # export a gltf with the merge_buffers option set to true > export = scene.export(file_type='gltf', merge_buffers=True) tests/test_gltf.py:276: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/scene/scene.py:941: in export return export.export_scene( trimesh/exchange/export.py:260: in export_scene data = export_gltf(scene, **kwargs) trimesh/exchange/gltf.py:163: in export_gltf validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError ______________ GLTFTest.test_merge_primitives_materials_roundtrip ______________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_merge_primitives_materials_roundtrip(self): # test to see if gltf loaded with `merge_primitives` # and then exported back # to gltf, produces a valid gltf. a = g.get_mesh('rgb_cube_with_primitives.gltf', merge_primitives=True) > result = a.export(file_type='gltf', merge_buffers=True) tests/test_gltf.py:342: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/scene/scene.py:941: in export return export.export_scene( trimesh/exchange/export.py:260: in export_scene data = export_gltf(scene, **kwargs) trimesh/exchange/gltf.py:163: in export_gltf validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError ___________________________ GLTFTest.test_node_name ____________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_node_name(self): # Test to see if node names generally survive # an export-import cycle. # a scene s = g.get_mesh('cycloidal.3DXML') # export as GLB then re-load > export = s.export(file_type='glb') tests/test_gltf.py:445: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/scene/scene.py:941: in export return export.export_scene( trimesh/exchange/export.py:262: in export_scene data = export_glb(scene, **kwargs) trimesh/exchange/gltf.py:255: in export_glb validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError ________________________ GLTFTest.test_optional_camera _________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_optional_camera(self): gltf_cameras_key = 'cameras' # if there's no camera in the scene, then it shouldn't be added to the # gltf box = g.trimesh.creation.box([1, 1, 1]) scene = g.trimesh.Scene(box) > export = scene.export(file_type='gltf') tests/test_gltf.py:362: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/scene/scene.py:941: in export return export.export_scene( trimesh/exchange/export.py:260: in export_scene data = export_gltf(scene, **kwargs) trimesh/exchange/gltf.py:163: in export_gltf validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError _____________________________ GLTFTest.test_points _____________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_points(self): # test a simple pointcloud export-import cycle points = g.np.arange(30).reshape((-1, 3)) export = g.trimesh.Scene( > g.trimesh.PointCloud(points)).export(file_type='glb') tests/test_gltf.py:808: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/scene/scene.py:941: in export return export.export_scene( trimesh/exchange/export.py:262: in export_scene data = export_glb(scene, **kwargs) trimesh/exchange/gltf.py:255: in export_glb validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError ___________________________ GLTFTest.test_tex_export ___________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_tex_export(self): # load textured PLY mesh = g.get_mesh('fuze.ply') assert hasattr(mesh.visual, 'uv') # make sure export as GLB doesn't crash on scenes > export = mesh.scene().export(file_type='glb', unitize_normals=True) tests/test_gltf.py:129: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/scene/scene.py:941: in export return export.export_scene( trimesh/exchange/export.py:262: in export_scene data = export_glb(scene, **kwargs) trimesh/exchange/gltf.py:255: in export_glb validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError _____________________________ GLTFTest.test_units ______________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_units(self): # Trimesh will store units as a GLTF extra if they # are defined so check that. original = g.get_mesh('pins.glb') # export it as a a GLB file > export = original.export(file_type='glb') tests/test_gltf.py:201: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/scene/scene.py:941: in export return export.export_scene( trimesh/exchange/export.py:262: in export_scene data = export_glb(scene, **kwargs) trimesh/exchange/gltf.py:255: in export_glb validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError _________________________ GLTFTest.test_vertex_attrib __________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_vertex_attrib(self): # test concatenation with texture m = g.get_mesh('fuze.obj') colors = (g.random( (len(m.vertices), 4)) * 255).astype(g.np.uint8) # set the color vertex attribute m.visual.vertex_attributes['color'] = colors > export = m.export(file_type='glb', unitize_normals=True) tests/test_gltf.py:735: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/base.py:2803: in export return export_mesh( trimesh/exchange/export.py:87: in export_mesh export = _mesh_exporters[file_type](mesh, **kwargs) trimesh/exchange/gltf.py:255: in export_glb validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError _________________________ GLTFTest.test_vertex_colors __________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_vertex_colors(self): # get a mesh with face colors m = g.get_mesh('machinist.XAML') # export as GLB then re-import > export = m.export(file_type='glb') tests/test_gltf.py:713: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/base.py:2803: in export return export_mesh( trimesh/exchange/export.py:87: in export_mesh export = _mesh_exporters[file_type](mesh, **kwargs) trimesh/exchange/gltf.py:255: in export_glb validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError ___________________________ GLTFTest.test_write_dir ____________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_write_dir(self): # try loading from a file name # will require a file path resolver original = g.get_mesh('fuze.obj') assert isinstance(original, g.trimesh.Trimesh) s = original.scene() with g.TemporaryDirectory() as d: path = g.os.path.join(d, 'heyy.gltf') > s.export(file_obj=path) tests/test_gltf.py:312: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/scene/scene.py:941: in export return export.export_scene( trimesh/exchange/export.py:260: in export_scene data = export_gltf(scene, **kwargs) trimesh/exchange/gltf.py:163: in export_gltf validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError _____________________________ ViewTest.test_JSHTML _____________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_JSHTML(self): import trimesh.viewer.notebook as js m = g.get_mesh('featuretype.STL') s = m.scene() # a viewable scene > html = js.scene_to_html(s) tests/test_html.py:17: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ trimesh/viewer/notebook.py:38: in scene_to_html data = scene.export(file_type='glb') trimesh/scene/scene.py:941: in export return export.export_scene( trimesh/exchange/export.py:262: in export_scene data = export_glb(scene, **kwargs) trimesh/exchange/gltf.py:255: in export_glb validate(tree) trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError ______________________________ MetaTest.test_glb _______________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_glb(self): # check to see if both `Scene.metadata` and # `Scene.geometry._.metadata` is preserved # create an example scene s = g.trimesh.Scene([ g.trimesh.creation.box().permutate.transform(), g.trimesh.creation.box().permutate.transform(), g.trimesh.creation.box().permutate.transform()]) # add some basic metadata s.metadata['hi'] = True s.metadata['10'] = "it's true!" for m in s.geometry.values(): # create some random metadata for each mesh # note that JSON doesn't support integers as keys # so convert integers to strings for comparison m.metadata.update(g.np.random.randint( 0, 1000, 10).reshape((-1, 2)).astype(str)) # reload the exported scene r = g.trimesh.load(file_obj=g.trimesh.util.wrap_as_stream( > s.export(file_type='glb')), file_type='glb') /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_meta.py:31: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/scene/scene.py:941: in export return export.export_scene( /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/exchange/export.py:262: in export_scene data = export_glb(scene, **kwargs) /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/exchange/gltf.py:255: in export_glb validate(tree) /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError __________________________ MinimalTest.test_load_path __________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_load_path(self): # should be able to load a path and export it as a GLB # try with a Path3D path = trimesh.load_path(np.asarray([(0, 0, 0), (1, 0, 0), (1, 1, 0)])) assert isinstance(path, trimesh.path.Path3D) scene = trimesh.Scene(path) assert len(scene.geometry) == 1 > glb = scene.export(file_type='glb') /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_minimal.py:77: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/scene/scene.py:941: in export return export.export_scene( /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/exchange/export.py:262: in export_scene data = export_glb(scene, **kwargs) /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/exchange/gltf.py:255: in export_glb validate(tree) /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError _____________________________ PointsTest.test_glb ______________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_glb(self): p = g.get_mesh('points_agisoft.xyz') assert isinstance(p, g.trimesh.PointCloud) assert len(p.vertices) > 0 # test exporting a pointcloud to a GLTF # TODO : WE SHOULD IMPLEMENT THE IMPORTER TOO > r = p.export(file_type='gltf') /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_points.py:247: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/points.py:685: in export return export_mesh(self, /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/exchange/export.py:87: in export_mesh export = _mesh_exporters[file_type](mesh, **kwargs) /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/exchange/gltf.py:163: in export_gltf validate(tree) /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError ________________________ PrimitiveTest.test_mesh_schema ________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'https://github.com/mikedh/trimesh/blob/main/trimesh/resources/schema/primitive/trimesh.schema.json', '$schema...hema', 'additionalProperties': False, 'description': 'A 3D triangular mesh in the simplest possible JSON format.', ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_mesh_schema(self): # this schema should define every primitive. schema = g.trimesh.resources.get_schema( 'primitive/trimesh.schema.json') # make sure a mesh passes the schema m = g.trimesh.creation.box() > g.jsonschema.validate(m.to_dict(), schema) /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_primitives.py:163: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'https://github.com/mikedh/trimesh/blob/main/trimesh/resources/schema/primitive/trimesh.schema.json', '$schema...hema', 'additionalProperties': False, 'description': 'A 3D triangular mesh in the simplest possible JSON format.', ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError ________________________ PrimitiveTest.test_primitives _________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'https://github.com/mikedh/trimesh/blob/main/trimesh/resources/schema/primitive/primitive.schema.json', '$sche...ng positive Z by `height` then transformed by the `transform` matrix.', ...}], 'description': 'A geometric primitive.'} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_primitives(self): kind = set([i.__class__.__name__ for i in self.primitives]) # make sure our test data has every primitive kinds = {'Box', 'Capsule', 'Cylinder', 'Sphere'} if has_triangle: kinds.add('Extrusion') assert kind == kinds # this schema should define every primitive. schema = g.trimesh.resources.get_schema( 'primitive/primitive.schema.json') for primitive in self.primitives: # convert to a dict d = primitive.to_dict() # validate the output of the to-dict method > g.jsonschema.validate(d, schema) /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_primitives.py:184: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'https://github.com/mikedh/trimesh/blob/main/trimesh/resources/schema/primitive/primitive.schema.json', '$sche...ng positive Z by `height` then transformed by the `transform` matrix.', ...}], 'description': 'A geometric primitive.'} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError ____________________________ SceneTests.test_scene _____________________________ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: > h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) /usr/lib64/python3.11/urllib/request.py:1348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.11/http/client.py:1286: in request self._send_request(method, url, body, headers, encode_chunked) /usr/lib64/python3.11/http/client.py:1332: in _send_request self.endheaders(body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1281: in endheaders self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib64/python3.11/http/client.py:1041: in _send_output self.send(msg) /usr/lib64/python3.11/http/client.py:979: in send self.connect() /usr/lib64/python3.11/http/client.py:1451: in connect super().connect() /usr/lib64/python3.11/http/client.py:945: in connect self.sock = self._create_connection( /usr/lib64/python3.11/socket.py:827: in create_connection for res in getaddrinfo(host, port, 0, SOCK_STREAM): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ host = 'json-schema.org', port = 443, family = 0 type = , proto = 0, flags = 0 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0): """Resolve host and port into list of address info entries. Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None. port is a string service name such as 'http', a numeric port number or None. By passing None as the value of host and port, you can pass NULL to the underlying C API. The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. """ # We override this function since we want to translate the numeric family # and socket type values to enum constants. addrlist = [] > for res in _socket.getaddrinfo(host, port, family, type, proto, flags): E socket.gaierror: [Errno -3] Temporary failure in name resolution /usr/lib64/python3.11/socket.py:962: gaierror During handling of the above exception, another exception occurred: self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: > resource = registry._retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:336: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/site-packages/jsonschema/validators.py:107: in _warn_for_remote_retrieve with urlopen(uri) as response: /usr/lib64/python3.11/urllib/request.py:216: in urlopen return opener.open(url, data, timeout) /usr/lib64/python3.11/urllib/request.py:519: in open response = self._open(req, data) /usr/lib64/python3.11/urllib/request.py:536: in _open result = self._call_chain(self.handle_open, protocol, protocol + /usr/lib64/python3.11/urllib/request.py:496: in _call_chain result = func(*args) /usr/lib64/python3.11/urllib/request.py:1391: in https_open return self.do_open(http.client.HTTPSConnection, req, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = http_class = req = http_conn_args = {'check_hostname': None, 'context': None} host = 'json-schema.org' h = def do_open(self, http_class, req, **http_conn_args): """Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. """ host = req.host if not host: raise URLError('no host given') # will parse host:port h = http_class(host, timeout=req.timeout, **http_conn_args) h.set_debuglevel(self._debuglevel) headers = dict(req.unredirected_hdrs) headers.update({k: v for k, v in req.headers.items() if k not in headers}) # TODO(jhylton): Should this be redesigned to handle # persistent connections? # We want to make an HTTP/1.1 request, but the addinfourl # class isn't prepared to deal with a persistent connection. # It will try to read all remaining data from the socket, # which will block while the server waits for the next request. # So make sure the connection gets closed after the (only) # request. headers["Connection"] = "close" headers = {name.title(): val for name, val in headers.items()} if req._tunnel_host: tunnel_headers = {} proxy_auth_hdr = "Proxy-Authorization" if proxy_auth_hdr in headers: tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr] # Proxy-Authorization should not be sent to origin # server. del headers[proxy_auth_hdr] h.set_tunnel(req._tunnel_host, headers=tunnel_headers) try: try: h.request(req.get_method(), req.selector, req.data, headers, encode_chunked=req.has_header('Transfer-encoding')) except OSError as err: # timeout error > raise URLError(err) E urllib.error.URLError: /usr/lib64/python3.11/urllib/request.py:1351: URLError During handling of the above exception, another exception occurred: self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: > retrieved = self._registry.get_or_retrieve(uri) /usr/lib/python3/site-packages/referencing/_core.py:586: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = uri = 'https://json-schema.org/draft/2020-12/meta/core' def get_or_retrieve(self, uri: URI) -> Retrieved[D, Resource[D]]: """ Get a resource from the registry, crawling or retrieving if necessary. May involve crawling to find the given URI if it is not already known, so the returned object is a `Retrieved` object which contains both the resource value as well as the registry which ultimately contained it. """ resource = self._resources.get(uri) if resource is not None: return Retrieved(registry=self, value=resource) registry = self.crawl() resource = registry._resources.get(uri) if resource is not None: return Retrieved(registry=registry, value=resource) try: resource = registry._retrieve(uri) except ( exceptions.CannotDetermineSpecification, exceptions.NoSuchResource, ): raise except Exception: > raise exceptions.Unretrievable(ref=uri) E referencing.exceptions.Unretrievable: 'https://json-schema.org/draft/2020-12/meta/core' /usr/lib/python3/site-packages/referencing/_core.py:343: Unretrievable During handling of the above exception, another exception occurred: self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: > resolved = self._resolver.lookup(ref) /usr/lib/python3/site-packages/jsonschema/validators.py:441: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Resolver(_base_uri='https://json-schema.org/draft/2020-12/schema', _registry=) ref = 'meta/core' def lookup(self, ref: URI) -> Resolved[D]: """ Resolve the given reference to the resource it points to. Raises: `exceptions.Unresolvable` or a subclass thereof (see below) if the reference isn't resolvable `exceptions.NoSuchAnchor` if the reference is to a URI where a resource exists but contains a plain name fragment which does not exist within the resource `exceptions.PointerToNowhere` if the reference is to a URI where a resource exists but contains a JSON pointer to a location within the resource that does not exist """ if ref.startswith("#"): uri, fragment = self._base_uri, ref[1:] else: uri, fragment = urldefrag(urljoin(self._base_uri, ref)) try: retrieved = self._registry.get_or_retrieve(uri) except exceptions.NoSuchResource: raise exceptions.Unresolvable(ref=ref) from None except exceptions.Unretrievable: > raise exceptions.Unresolvable(ref=ref) E referencing.exceptions.Unresolvable: meta/core /usr/lib/python3/site-packages/referencing/_core.py:590: Unresolvable During handling of the above exception, another exception occurred: self = def test_scene(self): for file_name in ['cycloidal.ply', 'sphere.ply']: mesh = g.get_mesh(file_name) if mesh.units is None: mesh.units = 'in' scene_split = g.trimesh.scene.split_scene(mesh) scene_split.convert_units('in') scene_base = g.trimesh.Scene(mesh) # save hash of scene before concat pre = [scene_split.__hash__(), scene_base.__hash__()] # make sure hash's give the same result twice assert scene_split.__hash__() == pre[0] assert scene_base.__hash__() == pre[1] # __hash__ is a long int which fails isinstance in Python 2 assert type(scene_base.__hash__()).__name__ in ('int', 'long') # try out scene appending concat = scene_split + scene_base # make sure concat didn't mess with original scenes assert scene_split.__hash__() == pre[0] assert scene_base.__hash__() == pre[1] # make sure concatenate appended things, stuff assert len(concat.geometry) == (len(scene_split.geometry) + len(scene_base.geometry)) for s in [scene_split, scene_base]: pre = s.__hash__() assert len(s.geometry) > 0 assert s.is_valid flattened = s.graph.to_flattened() g.json.dumps(flattened) edgelist = s.graph.to_edgelist() g.json.dumps(edgelist) assert s.bounds.shape == (2, 3) assert s.centroid.shape == (3,) assert s.extents.shape == (3,) assert isinstance(s.scale, float) assert g.trimesh.util.is_shape(s.triangles, (-1, 3, 3)) assert len(s.triangles) == len(s.triangles_node) assert s.__hash__() == pre assert s.__hash__() is not None # should be some duplicate nodes assert len(s.duplicate_nodes) > 0 # should be a single scene camera assert isinstance(s.camera, g.trimesh.scene.cameras.Camera) # should be autogenerated lights assert len(s.lights) > 0 # all lights should be lights assert all(isinstance(L, g.trimesh.scene.lighting.Light) for L in s.lights) # all lights should be added to scene graph assert all(L.name in s.graph for L in s.lights) # should have put a transform in scene graph assert s.camera.name in s.graph r = s.dump() > gltf = s.export(file_type='gltf') /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_scene.py:77: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/scene/scene.py:941: in export return export.export_scene( /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/exchange/export.py:260: in export_scene data = export_gltf(scene, **kwargs) /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/exchange/gltf.py:163: in export_gltf validate(tree) /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/exchange/gltf.py:1971: in validate valid = jsonschema.validate(header, schema=schema) /usr/lib/python3/site-packages/jsonschema/validators.py:1298: in validate cls.check_schema(schema) /usr/lib/python3/site-packages/jsonschema/validators.py:296: in check_schema for error in validator.iter_errors(schema): /usr/lib/python3/site-packages/jsonschema/validators.py:363: in iter_errors for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:335: in allOf yield from validator.descend(instance, subschema, schema_path=index) /usr/lib/python3/site-packages/jsonschema/validators.py:411: in descend for error in errors: /usr/lib/python3/site-packages/jsonschema/_validators.py:284: in ref yield from validator._validate_reference(ref=ref, instance=instance) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Draft202012Validator(schema={'$ref': 'meta/core'}, format_checker=) ref = 'meta/core' instance = {'$id': 'glTF.schema.json', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'allOf': [{'$id': 'glTFProperty...itive value for best portability.', ...}}, 'title': 'glTF Property', ...}], 'dependencies': {'scene': ['scenes']}, ...} def _validate_reference(self, ref, instance): if self._ref_resolver is None: try: resolved = self._resolver.lookup(ref) except referencing.exceptions.Unresolvable as err: > raise exceptions._WrappedReferencingError(err) E jsonschema.exceptions._WrappedReferencingError: Unresolvable: meta/core /usr/lib/python3/site-packages/jsonschema/validators.py:443: _WrappedReferencingError =============================== warnings summary =============================== tests/test_3mf.py: 6 warnings tests/test_adjacency.py: 12 warnings tests/test_arc.py: 6 warnings tests/test_base.py: 27 warnings tests/test_bounds.py: 3750 warnings tests/test_color.py: 3 warnings tests/test_convex.py: 1530 warnings tests/test_copy.py: 738 warnings tests/test_creation.py: 396 warnings tests/test_depr.py: 6 warnings tests/test_extrude.py: 6 warnings tests/test_facets.py: 3 warnings tests/test_gltf.py: 6 warnings tests/test_graph.py: 3 warnings tests/test_identifier.py: 32541 warnings tests/test_inertia.py: 1593 warnings tests/test_integralmeancurvature.py: 15 warnings tests/test_loaded.py: 3 warnings tests/test_merge.py: 9 warnings tests/test_mesh.py: 1065 warnings tests/test_mutate.py: 24 warnings tests/test_normals.py: 9 warnings tests/test_nsphere.py: 36 warnings tests/test_obj.py: 3 warnings tests/test_off.py: 6 warnings tests/test_operators.py: 12 warnings tests/test_packing.py: 1440 warnings tests/test_pathlib.py: 12 warnings tests/test_paths.py: 3 warnings tests/test_permutate.py: 270 warnings tests/test_points.py: 9 warnings tests/test_poses.py: 303 warnings tests/test_primitives.py: 294 warnings tests/test_ray.py: 6 warnings tests/test_registration.py: 6 warnings tests/test_remesh.py: 18 warnings tests/test_repair.py: 75 warnings tests/test_scene.py: 432 warnings tests/test_scenegraph.py: 9 warnings tests/test_section.py: 6 warnings tests/test_smoothing.py: 57 warnings tests/test_stl.py: 3 warnings tests/test_texture.py: 12 warnings tests/test_transformations.py: 3 warnings tests/test_urdf.py: 9 warnings tests/test_util.py: 21 warnings tests/test_voxel.py: 39 warnings /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/base.py:2670: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. mass = triangles.mass_properties( tests/test_arc.py::ArcTests::test_center tests/test_arc.py::ArcTests::test_center /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_arc.py:16: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. center_info = arc_center(points) tests/test_arc.py::ArcTests::test_center tests/test_arc.py::ArcTests::test_center /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_arc.py:25: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. c = g.trimesh.path.arc.arc_center( tests/test_arc.py: 2000 warnings /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_arc.py:62: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. info = arc_center(three) tests/test_arc.py: 2000 warnings /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_arc.py:76: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. info = arc_center(three) tests/test_base.py: 3 warnings tests/test_bounds.py: 65 warnings tests/test_convex.py: 4 warnings tests/test_copy.py: 65 warnings tests/test_decomposition.py: 3 warnings tests/test_export.py: 12 warnings tests/test_gltf.py: 15 warnings tests/test_graph.py: 65 warnings tests/test_identifier.py: 65 warnings tests/test_mesh.py: 65 warnings tests/test_minimal.py: 60 warnings tests/test_mutate.py: 1 warning tests/test_normals.py: 6 warnings tests/test_obj.py: 78 warnings tests/test_paths.py: 3 warnings tests/test_registration.py: 3 warnings tests/test_remesh.py: 3 warnings tests/test_render.py: 3 warnings tests/test_repair.py: 6 warnings tests/test_sample.py: 3 warnings tests/test_scene.py: 9 warnings tests/test_smooth.py: 2 warnings tests/test_texture.py: 37 warnings tests/test_visual.py: 3 warnings /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/exchange/obj.py:92: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. v, vn, vt, vc = _parse_vertices(text=text) tests/test_base.py: 2 warnings tests/test_bounds.py: 655 warnings tests/test_mesh.py: 120 warnings tests/test_packing.py: 20 warnings tests/test_points.py: 2 warnings tests/test_registration.py: 1 warning tests/test_scene.py: 3 warnings /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/bounds.py:303: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. rotation_2D, box = oriented_bounds_2D(projected[:, :2]) tests/test_base.py: 2 warnings tests/test_bounds.py: 7 warnings tests/test_convex.py: 10 warnings tests/test_mesh.py: 240 warnings tests/test_packing.py: 41 warnings tests/test_points.py: 2 warnings tests/test_scene.py: 2 warnings tests/test_voxel.py: 1 warning /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/caching.py:139: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. value = function(*args, **kwargs) tests/test_base.py::MeshTests::test_none :1: DeprecationWarning: `geom.identifier_md5` is deprecated and will be removed in October 2023: replace with `geom.identifier_hash` tests/test_base.py: 2 warnings tests/test_bounds.py: 72 warnings tests/test_cache.py: 1 warning tests/test_color.py: 5 warnings tests/test_convex.py: 4 warnings tests/test_copy.py: 21 warnings tests/test_curvature.py: 1 warning tests/test_edges.py: 1 warning tests/test_export.py: 4 warnings tests/test_facets.py: 1 warning tests/test_graph.py: 31 warnings tests/test_html.py: 1 warning tests/test_identifier.py: 22 warnings tests/test_inertia.py: 3 warnings tests/test_loaded.py: 2 warnings tests/test_mesh.py: 21 warnings tests/test_minimal.py: 21 warnings tests/test_mutate.py: 2 warnings tests/test_nsphere.py: 3 warnings tests/test_pathlib.py: 3 warnings tests/test_permutate.py: 7 warnings tests/test_ply.py: 3 warnings tests/test_polygons.py: 1 warning tests/test_poses.py: 1 warning tests/test_proximity.py: 4 warnings tests/test_ray.py: 17 warnings tests/test_remesh.py: 4 warnings tests/test_render.py: 1 warning tests/test_repair.py: 14 warnings tests/test_sample.py: 2 warnings tests/test_scene.py: 1 warning tests/test_section.py: 2 warnings tests/test_stl.py: 4 warnings tests/test_triangles.py: 2 warnings tests/test_units.py: 2 warnings tests/test_urdf.py: 1 warning tests/test_vertices.py: 1 warning tests/test_visual.py: 1 warning tests/test_voxel.py: 1 warning /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/exchange/stl.py:128: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) faces = np.arange(header['face_count'] * 3).reshape((-1, 3)) tests/test_bounds.py: 637 warnings tests/test_convex.py: 18 warnings tests/test_copy.py: 167 warnings tests/test_export.py: 103 warnings tests/test_gltf.py: 174 warnings tests/test_graph.py: 167 warnings tests/test_identifier.py: 167 warnings tests/test_mesh.py: 167 warnings tests/test_minimal.py: 160 warnings tests/test_nsphere.py: 47 warnings tests/test_obj.py: 4 warnings tests/test_permutate.py: 94 warnings tests/test_repair.py: 47 warnings tests/test_scenegraph.py: 54 warnings tests/test_texture.py: 4 warnings tests/test_triangles.py: 18 warnings /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/exchange/gltf.py:413: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. kwargs = _read_buffers(header=header, tests/test_bounds.py: 873 warnings tests/test_copy.py: 563 warnings tests/test_export.py: 31 warnings tests/test_gltf.py: 1126 warnings tests/test_graph.py: 563 warnings tests/test_identifier.py: 563 warnings tests/test_mesh.py: 563 warnings tests/test_minimal.py: 563 warnings tests/test_nsphere.py: 31 warnings tests/test_permutate.py: 62 warnings tests/test_repair.py: 31 warnings /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/exchange/gltf.py:319: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. kwargs = _read_buffers(header=tree, tests/test_bounds.py: 2000 warnings /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_bounds.py:133: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. T, rectangle = g.trimesh.bounds.oriented_bounds_2D(points) tests/test_bounds.py: 4100 warnings tests/test_fill.py: 2 warnings tests/test_minimal.py: 1 warning tests/test_points.py: 1 warning tests/test_texture.py: 1 warning /usr/lib64/python3.11/unittest/case.py:579: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. if method() is not None: tests/test_bounds.py: 21 warnings tests/test_convex.py: 2 warnings tests/test_gltf.py: 5 warnings tests/test_inertia.py: 200 warnings tests/test_nsphere.py: 1 warning tests/test_poses.py: 1 warning tests/test_primitives.py: 99 warnings tests/test_proximity.py: 1 warning tests/test_scene.py: 2 warnings tests/test_util.py: 1 warning tests/test_voxel.py: 2 warnings /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/util.py:1744: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.) item = like.__class__(item) tests/test_bounds.py: 25 warnings /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/bounds.py:203: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. return oriented_bounds_2D(points) tests/test_cache.py::CacheTest::test_method_combinations :1: RuntimeWarning: divide by zero encountered in divmod tests/test_cache.py::CacheTest::test_method_combinations :1: RuntimeWarning: invalid value encountered in divmod tests/test_cache.py::CacheTest::test_method_combinations :1: RuntimeWarning: divide by zero encountered in floor_divide tests/test_cache.py::CacheTest::test_method_combinations /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/caching.py:336: RuntimeWarning: divide by zero encountered in floor_divide return super(self.__class__, self).__ifloordiv__( tests/test_cache.py::CacheTest::test_method_combinations /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/caching.py:331: RuntimeWarning: invalid value encountered in remainder return super(self.__class__, self).__imod__( tests/test_cache.py::CacheTest::test_method_combinations /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/caching.py:316: RuntimeWarning: divide by zero encountered in divide return super(self.__class__, self).__itruediv__( tests/test_cache.py::CacheTest::test_method_combinations :1: RuntimeWarning: invalid value encountered in remainder tests/test_cache.py::CacheTest::test_method_combinations :1: RuntimeWarning: divide by zero encountered in divide tests/test_cache.py::CacheTest::test_method_combinations tests/test_cache.py::CacheTest::test_method_combinations tests/test_cache.py::CacheTest::test_method_combinations tests/test_cache.py::CacheTest::test_method_combinations tests/test_cache.py::CacheTest::test_method_combinations tests/test_cache.py::CacheTest::test_method_combinations tests/test_cache.py::CacheTest::test_method_combinations tests/test_cache.py::CacheTest::test_method_combinations :1: DeprecationWarning: Passing booleans as partition index is deprecated (warning added in NumPy 1.22) tests/test_cache.py::CacheTest::test_method_combinations :1: DeprecationWarning: `array.crc()` is deprecated and will be removed in October 2023: replace with `array.__hash__()` or `hash(array)` tests/test_cache.py::CacheTest::test_method_combinations :1: DeprecationWarning: `array.hash()` is deprecated and will be removed in October 2023: replace with `array.__hash__()` or `hash(array)` tests/test_cache.py::CacheTest::test_method_combinations :1: DeprecationWarning: `array.md5()` is deprecated and will be removed in October 2023: replace with `array.__hash__()` or `hash(array)` tests/test_cache.py: 20 warnings /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/caching.py:276: DeprecationWarning: Passing booleans as partition index is deprecated (warning added in NumPy 1.22) return super(self.__class__, self).partition( tests/test_cache.py::CacheTest::test_method_combinations :1: DeprecationWarning: tostring() is deprecated. Use tobytes() instead. tests/test_creation.py: 14 warnings tests/test_depr.py: 16 warnings tests/test_dxf.py: 5732 warnings tests/test_export.py: 8 warnings tests/test_loaded.py: 8 warnings tests/test_medial.py: 8 warnings tests/test_meta.py: 24 warnings tests/test_operators.py: 112 warnings tests/test_path_creation.py: 10 warnings tests/test_paths.py: 7528 warnings tests/test_raster.py: 16 warnings tests/test_render.py: 16 warnings tests/test_scene.py: 424 warnings tests/test_simplify.py: 168 warnings tests/test_svg.py: 5052 warnings tests/test_units.py: 116 warnings /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/path/arc.py:142: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. center_info = arc_center(points) tests/test_depr.py::DepTest::test_deprecated tests/test_depr.py::DepTest::test_deprecated tests/test_depr.py::DepTest::test_deprecated tests/test_depr.py::DepTest::test_deprecated /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_depr.py:27: DeprecationWarning: `geometry.md5()` is deprecated and will be removed in October 2023: replace with `geometry.__hash__()` or `hash(geometry)` assert m.md5() == copy.md5() tests/test_depr.py::DepTest::test_deprecated tests/test_depr.py::DepTest::test_deprecated tests/test_depr.py::DepTest::test_deprecated tests/test_depr.py::DepTest::test_deprecated /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_depr.py:28: DeprecationWarning: `geometry.crc()` is deprecated and will be removed in October 2023: replace with `geometry.__hash__()` or `hash(geometry)` assert m.crc() == copy.crc() tests/test_depr.py::DepTest::test_deprecated tests/test_depr.py::DepTest::test_deprecated tests/test_depr.py::DepTest::test_deprecated tests/test_depr.py::DepTest::test_deprecated /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_depr.py:29: DeprecationWarning: `geometry.hash()` is deprecated and will be removed in October 2023: replace with `geometry.__hash__()` or `hash(geometry)` assert m.hash() == copy.hash() tests/test_depr.py::DepTest::test_deprecated tests/test_depr.py::DepTest::test_deprecated tests/test_depr.py::DepTest::test_deprecated tests/test_depr.py::DepTest::test_deprecated /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_depr.py:30: DeprecationWarning: `geom.identifier_md5` is deprecated and will be removed in October 2023: replace with `geom.identifier_hash` assert m.identifier_md5 == copy.identifier_md5 tests/test_depr.py::DepTest::test_deprecated tests/test_depr.py::DepTest::test_deprecated tests/test_depr.py::DepTest::test_deprecated tests/test_depr.py::DepTest::test_deprecated /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_depr.py:32: DeprecationWarning: `array.md5()` is deprecated and will be removed in October 2023: replace with `array.__hash__()` or `hash(array)` assert m.vertices.md5() == copy.vertices.md5() tests/test_depr.py::DepTest::test_deprecated tests/test_depr.py::DepTest::test_deprecated tests/test_depr.py::DepTest::test_deprecated tests/test_depr.py::DepTest::test_deprecated /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_depr.py:33: DeprecationWarning: `array.hash()` is deprecated and will be removed in October 2023: replace with `array.__hash__()` or `hash(array)` assert m.vertices.hash() == copy.vertices.hash() tests/test_depr.py::DepTest::test_deprecated tests/test_depr.py::DepTest::test_deprecated tests/test_depr.py::DepTest::test_deprecated tests/test_depr.py::DepTest::test_deprecated /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_depr.py:34: DeprecationWarning: `array.crc()` is deprecated and will be removed in October 2023: replace with `array.__hash__()` or `hash(array)` assert m.vertices.crc() == copy.vertices.crc() tests/test_dxf.py: 24 warnings tests/test_paths.py: 36 warnings tests/test_svg.py: 12 warnings /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/path/exchange/dxf.py:953: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. check_angle = [arc_center(i)['span'] tests/test_dxf.py: 24 warnings tests/test_paths.py: 36 warnings tests/test_svg.py: 12 warnings /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/path/exchange/dxf.py:958: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. check_radii = [arc_center(i)['radius'] tests/test_dxf.py: 17190 warnings tests/test_meta.py: 44 warnings tests/test_paths.py: 3916 warnings tests/test_svg.py: 9914 warnings tests/test_units.py: 1492 warnings /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/path/entities.py:678: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. return arc_center(vertices[self.points], **kwargs) tests/test_export.py: 14 warnings tests/test_gltf.py: 297 warnings tests/test_html.py: 1 warning tests/test_meta.py: 3 warnings tests/test_scene.py: 117 warnings /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/exchange/gltf.py:773: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. acc_face = _data_append(acc=tree['accessors'], tests/test_gltf.py::GLTFTest::test_export_custom_attributes /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/exchange/gltf.py:912: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. "attributes"][key] = _data_append( tests/test_gltf.py: 2 warnings tests/test_mesh.py: 4 warnings tests/test_packing.py: 4 warnings tests/test_smooth.py: 4 warnings tests/test_texture.py: 4 warnings /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/path/packing.py:516: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. bounds, insert = rectangles( tests/test_gltf.py: 8 warnings tests/test_packing.py: 41012 warnings tests/test_smooth.py: 2 warnings tests/test_texture.py: 6 warnings /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/path/packing.py:461: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. bounds, insert = rectangles_single( tests/test_inertia.py::MassTests::test_mass tests/test_inertia.py::MassTests::test_mass tests/test_inertia.py::MassTests::test_mass tests/test_inertia.py::MassTests::test_mass tests/test_inertia.py::MassTests::test_mass tests/test_inertia.py::MassTests::test_mass /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_inertia.py:417: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. calc = g.trimesh.triangles.mass_properties( tests/test_meta.py: 68 warnings tests/test_paths.py: 1752 warnings tests/test_svg.py: 5452 warnings /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/path/exchange/svg_io.py:456: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. info = arc_center( tests/test_packing.py: 24 warnings /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_packing.py:153: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. bounds, consume = packing.rectangles_single(e) tests/test_packing.py::PackingTest::test_image /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_packing.py:79: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. images = [_solid_image([255, 0, 0, 255], [10, 10]), tests/test_packing.py::PackingTest::test_image /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_packing.py:80: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. _solid_image([0, 255, 0, 255], [120, 12]), tests/test_packing.py::PackingTest::test_image /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_packing.py:81: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. _solid_image([0, 0, 255, 255], [144, 500])] tests/test_packing.py: 51 warnings /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/path/packing.py:568: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. bounds, consume = rectangles(obb_extent, **kwargs) tests/test_packing.py: 224 warnings tests/test_polygons.py: 1 warning /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/path/polygons.py:203: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. transform, extents = bounds.oriented_bounds_2D(points) tests/test_packing.py: 204 warnings /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/path/packing.py:386: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. bounds, consume = rectangles(extents=extents, **kwargs) tests/test_packing.py: 510 warnings /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_packing.py:186: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. bounds, consume = packing.rectangles(extents) tests/test_packing.py: 510 warnings /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_packing.py:203: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. bounds, consume = packing.rectangles( tests/test_packing.py: 510 warnings /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_packing.py:216: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. bounds, consume = packing.rectangles( tests/test_packing.py: 510 warnings /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_packing.py:229: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. bounds, consume = packing.rectangles(extents, rotate=False) tests/test_paths.py::VectorTests::test_discrete tests/test_paths.py::VectorTests::test_discrete tests/test_paths.py::VectorTests::test_discrete tests/test_paths.py::VectorTests::test_discrete tests/test_paths.py::VectorTests::test_discrete tests/test_paths.py::VectorTests::test_discrete tests/test_paths.py::VectorTests::test_discrete tests/test_paths.py::VectorTests::test_discrete tests/test_paths.py::VectorTests::test_discrete /usr/src/RPM/BUILD/trimesh-3.22.0/trimesh/path/path.py:1016: DeprecationWarning: `product` is deprecated as of NumPy 1.25.0, and will be removed in NumPy 2.0. Please use `prod` instead. matrix = bounds.oriented_bounds_2D( tests/test_repair.py::RepairTests::test_fill_holes tests/test_repair.py::RepairTests::test_fill_holes tests/test_repair.py::RepairTests::test_fill_holes tests/test_repair.py::RepairTests::test_fill_holes tests/test_repair.py::RepairTests::test_fill_holes tests/test_repair.py::RepairTests::test_fill_holes /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_repair.py:29: DeprecationWarning: `array.fast_hash()` is deprecated and will be removed in October 2023: replace with `array.__hash__()` or `hash(array)` mesh._data.fast_hash()}] tests/test_repair.py::RepairTests::test_fill_holes tests/test_repair.py::RepairTests::test_fill_holes tests/test_repair.py::RepairTests::test_fill_holes tests/test_repair.py::RepairTests::test_fill_holes tests/test_repair.py::RepairTests::test_fill_holes tests/test_repair.py::RepairTests::test_fill_holes /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_repair.py:41: DeprecationWarning: `array.fast_hash()` is deprecated and will be removed in October 2023: replace with `array.__hash__()` or `hash(array)` mesh._data.fast_hash()}) tests/test_repair.py::RepairTests::test_fill_holes tests/test_repair.py::RepairTests::test_fill_holes tests/test_repair.py::RepairTests::test_fill_holes tests/test_repair.py::RepairTests::test_fill_holes tests/test_repair.py::RepairTests::test_fill_holes tests/test_repair.py::RepairTests::test_fill_holes /usr/src/RPM/BUILD/trimesh-3.22.0/tests/test_repair.py:54: DeprecationWarning: `array.fast_hash()` is deprecated and will be removed in October 2023: replace with `array.__hash__()` or `hash(array)` mesh._data.fast_hash()}) -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ FAILED tests/test_export.py::ExportTest::test_export - jsonschema.exceptions.... FAILED tests/test_export.py::ExportTest::test_gltf_path - jsonschema.exceptio... FAILED tests/test_export.py::ExportTest::test_scene - jsonschema.exceptions._... FAILED tests/test_gltf.py::GLTFTest::test_alphamode - jsonschema.exceptions._... FAILED tests/test_gltf.py::GLTFTest::test_basic - jsonschema.exceptions._Wrap... FAILED tests/test_gltf.py::GLTFTest::test_buffer_dedupe - jsonschema.exceptio... FAILED tests/test_gltf.py::GLTFTest::test_bulk - jsonschema.exceptions._Wrapp... FAILED tests/test_gltf.py::GLTFTest::test_cesium - jsonschema.exceptions._Wra... FAILED tests/test_gltf.py::GLTFTest::test_duck - jsonschema.exceptions._Wrapp... FAILED tests/test_gltf.py::GLTFTest::test_embed_buffer - jsonschema.exception... FAILED tests/test_gltf.py::GLTFTest::test_equal_by_default - jsonschema.excep... FAILED tests/test_gltf.py::GLTFTest::test_export_custom_attributes - jsonsche... FAILED tests/test_gltf.py::GLTFTest::test_export_postprocess - jsonschema.exc... FAILED tests/test_gltf.py::GLTFTest::test_extras - jsonschema.exceptions._Wra... FAILED tests/test_gltf.py::GLTFTest::test_extras_nodes - jsonschema.exception... FAILED tests/test_gltf.py::GLTFTest::test_gltf_by_name - jsonschema.exception... FAILED tests/test_gltf.py::GLTFTest::test_gltf_pole - jsonschema.exceptions._... FAILED tests/test_gltf.py::GLTFTest::test_material_hash - jsonschema.exceptio... FAILED tests/test_gltf.py::GLTFTest::test_merge_buffers - jsonschema.exceptio... FAILED tests/test_gltf.py::GLTFTest::test_merge_primitives_materials_roundtrip FAILED tests/test_gltf.py::GLTFTest::test_node_name - jsonschema.exceptions._... FAILED tests/test_gltf.py::GLTFTest::test_optional_camera - jsonschema.except... FAILED tests/test_gltf.py::GLTFTest::test_points - jsonschema.exceptions._Wra... FAILED tests/test_gltf.py::GLTFTest::test_tex_export - jsonschema.exceptions.... FAILED tests/test_gltf.py::GLTFTest::test_units - jsonschema.exceptions._Wrap... FAILED tests/test_gltf.py::GLTFTest::test_vertex_attrib - jsonschema.exceptio... FAILED tests/test_gltf.py::GLTFTest::test_vertex_colors - jsonschema.exceptio... FAILED tests/test_gltf.py::GLTFTest::test_write_dir - jsonschema.exceptions._... FAILED tests/test_html.py::ViewTest::test_JSHTML - jsonschema.exceptions._Wra... FAILED tests/test_meta.py::MetaTest::test_glb - jsonschema.exceptions._Wrappe... FAILED tests/test_minimal.py::MinimalTest::test_load_path - jsonschema.except... FAILED tests/test_points.py::PointsTest::test_glb - jsonschema.exceptions._Wr... FAILED tests/test_primitives.py::PrimitiveTest::test_mesh_schema - jsonschema... FAILED tests/test_primitives.py::PrimitiveTest::test_primitives - jsonschema.... FAILED tests/test_scene.py::SceneTests::test_scene - jsonschema.exceptions._W... == 35 failed, 525 passed, 5 deselected, 167630 warnings in 339.59s (0:05:39) === error: Bad exit status from /usr/src/tmp/rpm-tmp.65256 (%check) RPM build errors: Bad exit status from /usr/src/tmp/rpm-tmp.65256 (%check) Command exited with non-zero status 1 390.75user 224.55system 5:44.40elapsed 178%CPU (0avgtext+0avgdata 2320464maxresident)k 0inputs+0outputs (0major+712103minor)pagefaults 0swaps hsh-rebuild: rebuild of `python3-module-trimesh-3.22.0-alt1.src.rpm' failed. Command exited with non-zero status 1 6.86user 3.37system 6:15.04elapsed 2%CPU (0avgtext+0avgdata 125760maxresident)k 6168inputs+0outputs (0major+408816minor)pagefaults 0swaps