diff --git a/pkgs/sagemath-categories/MANIFEST.in.m4 b/pkgs/sagemath-categories/MANIFEST.in.m4 index b2e35673ec0..585640540e2 100644 --- a/pkgs/sagemath-categories/MANIFEST.in.m4 +++ b/pkgs/sagemath-categories/MANIFEST.in.m4 @@ -28,15 +28,222 @@ exclude sage/categories/sets_with_partial_maps.* exclude sage/categories/subobjects.* exclude sage/categories/subquotients.* exclude sage/categories/with_realizations.* -# Exclude to make it a namespace package -exclude sage/categories/__init__.py -include sage/rings/ideal.* -include sage/rings/ring.* +include sage/geometry/abc.p* + +# Interfaces +include sage/interfaces/all.p* +include sage/interfaces/abc.p* +include sage/interfaces/process.p* # needed for sage.parallel +include sage/interfaces/tab_completion.p* +include sage/misc/object_multiplexer.p* +include sage/misc/multireplace.p* +include sage/interfaces/sagespawn.p* +include sage/interfaces/quit.p* +include sage/interfaces/cleaner.p* +include sage/interfaces/expect.p* +include sage/interfaces/interface.p* +include sage/interfaces/sage0.p* + +graft sage/parallel + graft sage/typeset # dep of sage.categories.tensor -# include sage/rings/integer*.* # depends on cypari, flint - https://github.com/sagemath/sage/issues/30022 -# include sage/rings/rational*.* -# include sage/rings/infinity.* + +include sage/groups/generic.p* +include sage/groups/groups_catalog.p* + +include sage/monoids/monoid.p* + +include sage/rings/ring.* +include sage/rings/quotient_ring*.p* +include sage/rings/homset.p* +include sage/rings/ideal*.p* +include sage/rings/noncommutative_ideals.p* +include sage/rings/localization.p* +include sage/rings/morphism.p* + +include sage/rings/abc.* +include sage/rings/integer*.p* +exclude sage/rings/integer_fake.pxd # in sagemath-objects +include sage/rings/rational*.* +include sage/rings/infinity.* +include sage/rings/factorint.p* +include sage/rings/sum_of_squares.p* +include sage/rings/generic.p* + +include sage/misc/allocator.* +include sage/misc/latex*.* +include sage/misc/html.p* +include sage/misc/mathml.p* +include sage/misc/table.p* +include sage/misc/map_threaded.p* +include sage/misc/mrange.p* +include sage/misc/defaults.p* +include sage/misc/converting_dict.p* +include sage/misc/parser.p* +include sage/misc/method_decorator.p* +include sage/misc/random_testing.p* +include sage/misc/rest_index_of_methods.p* +include sage/misc/callable_dict.p* +include sage/misc/search.p* +include sage/misc/stopgap.p* + +## Data structures +include sage/misc/binary_tree.p* +graft sage/data_structures # bitset needed by sage.graphs and sage.geometry.polyhedron +exclude sage/data_structures/bounded_integer_sequences.* # depends on flint +exclude sage/data_structures/stream.* +graft sage/groups/perm_gps/partn_ref # but not partn_ref2, which depends on GAP +exclude sage/groups/perm_gps/partn_ref/refinement_graphs.p* # sagemath-graphs +exclude sage/groups/perm_gps/partn_ref/refinement_matrices.p* # sagemath-modules +exclude sage/groups/perm_gps/partn_ref/refinement_binary.p* # sagemath-modules + + +# These might later go to a separate distribution sagemath-functions (> sagemath-objects); +# but sage.functions currently depends on basic rings (QQ etc) +graft sage/arith +# Exclude what is included in sagemath-objects already +exclude sage/arith/long.p* +exclude sage/arith/numerical_approx.p* +exclude sage/arith/power.p* + +include sage/calculus/functional.p* +include sage/calculus/functions.p* +include sage/misc/derivative.p* +include sage/misc/functional.p* +include sage/symbolic/symbols.p* +include sage/symbolic/function.p* +graft sage/functions + + +include sage/rings/finite_rings/element_base.* +include sage/rings/finite_rings/stdint.* +include sage/rings/finite_rings/finite_field_base.p* +include sage/rings/finite_rings/finite_field_constructor.p* +include sage/rings/finite_rings/finite_field_prime_modn.p* +include sage/rings/finite_rings/residue_field.p* +include sage/rings/finite_rings/hom_finite_field.p* +include sage/rings/finite_rings/hom_prime_finite_field.p* +include sage/rings/finite_rings/homset.p* +include sage/rings/fast_arith.* +include sage/rings/finite_rings/integer_mod_limits.h +include sage/rings/finite_rings/integer_mod.p* +include sage/rings/finite_rings/integer_mod_ring.p* +include sage/rings/finite_rings/conway_polynomials.p* +include sage/rings/finite_rings/galois_group.p* +include sage/rings/algebraic_closure_finite_field.p* + +include sage/rings/number_field/number_field_base.p* +include sage/rings/number_field/number_field_element_base.p* +include sage/rings/number_field/number_field_ideal.p* +include sage/rings/real_double.p* + +include sage/rings/real_lazy.p* + +include sage/rings/fraction_field.p* +include sage/rings/fraction_field_element.p* +include sage/rings/qqbar_decorators.p* + +include sage/rings/padics/padic_generic.p* +include sage/rings/padics/local_generic.p* +include sage/rings/padics/local_generic_element.p* +include sage/rings/padics/precision_error.p* +include sage/rings/padics/misc.p* + +include sage/rings/polynomial/polynomial_ring.p* +include sage/rings/polynomial/polynomial_ring_constructor.p* +include sage/rings/polynomial/polynomial_ring_homomorphism.p* +include sage/rings/polynomial/polynomial_quotient_ring.p* +include sage/rings/polynomial/polynomial_singular_interface.p* +include sage/rings/polynomial/multi_polynomial_ring.p* +include sage/rings/polynomial/multi_polynomial_ring_base.p* +include sage/rings/polynomial/multi_polynomial_sequence.p* +include sage/rings/polynomial/multi_polynomial_ideal.p* +include sage/rings/polynomial/infinite_polynomial_*.p* +include sage/rings/polynomial/commutative_polynomial.p* +include sage/rings/polynomial/polynomial_compiled.p* +include sage/rings/polynomial/polynomial_element.p* +include sage/rings/polynomial/polynomial_element_generic.p* +include sage/rings/polynomial/polynomial_fateman.p* +include sage/rings/polynomial/polynomial_quotient_ring_element.p* +include sage/rings/polynomial/multi_polynomial.p* +include sage/rings/polynomial/multi_polynomial_element.p* +include sage/rings/polynomial/polydict.p* +include sage/rings/polynomial/term_order.p* +include sage/rings/polynomial/flatten.p* +include sage/rings/polynomial/cyclotomic.p* +include sage/rings/polynomial/laurent_polynomial_ring*.p* +include sage/rings/polynomial/laurent_polynomial_ideal.p* +include sage/rings/polynomial/laurent_polynomial.p* # but not laurent_polynomial_mpair, which needs Matrix +include sage/rings/polynomial/ideal.p* +include sage/rings/polynomial/toy*.p* +include sage/rings/polynomial/symmetric_*.p* +## include sage/rings/polynomial/ore*.p* # need for sage.categories.drinfeld_modules + +include sage/rings/continued_fraction*.p* + +graft sage/rings/function_field +exclude sage/rings/function_field/*_polymod.* # needs Singular +exclude sage/rings/function_field/derivations*.* # module elements +exclude sage/rings/function_field/differential.* # module elements +exclude sage/rings/function_field/divisor.* # module elements +exclude sage/rings/function_field/hermite_form_polynomial.* # cimports Matrix +exclude sage/rings/function_field/valuation*.* # ?? +prune sage/rings/function_field/drinfeld_modules # needs ore_polynomial etc. + +include sage/rings/power_series_mpoly.p* +include sage/rings/power_series_poly.p* +include sage/rings/power_series_ring_element.p* +include sage/rings/power_series_ring.p* +include sage/rings/multi_power_series_ring.py +include sage/rings/multi_power_series_ring_element.py +include sage/rings/laurent_series_ring*.p* +include sage/rings/puiseux_series_ring*.p* + +graft sage/rings/semirings + +include sage/rings/tests.p* +include sage/rings/big_oh.p* + +include sage/ext/fast_*.p* + +include sage/combinat/integer_vector.p* +graft sage/combinat/integer_lists +include sage/combinat/backtrack.p* +include sage/combinat/combinat.p* +include sage/combinat/combinat_cython.p* +include sage/combinat/combination.p* +include sage/combinat/combinatorial_map.p* +include sage/combinat/composition.p* +include sage/combinat/permutation.p* +include sage/combinat/permutation_cython.p* +include sage/combinat/ranker.py # for sage.sets.finite_set_map_cy +include sage/combinat/subset.p* +include sage/combinat/tools.p* +include sage/combinat/tuple.p* +# leave out partition - has complicated deps +# leave out integer_vector_weighted - needs combinat.words.word +include sage/combinat/subsets_hereditary.p* +include sage/combinat/subsets_pairwise.p* +include sage/combinat/dlx.p* +include sage/combinat/matrices/dancing_links.p* +include sage/combinat/matrices/dancing_links_c.h +include sage/combinat/matrices/dlxcpp.p* + +# see src/sage/schemes/generic/notes/imports.txt +graft sage/schemes/generic +graft sage/schemes/affine +graft sage/schemes/projective +graft sage/schemes/product_projective + +graft sage/sets +exclude sage/sets/pythonclass.* # sagemath-objects + +include sage/numerical/backends/generic*backend.p* + +## These two should probably go to sagemath-combinat instead. +# include sage/data_structures/stream.p* +# include sage/rings/lazy_series*.p* global-exclude *.c global-exclude *.cpp diff --git a/pkgs/sagemath-categories/pyproject.toml.m4 b/pkgs/sagemath-categories/pyproject.toml.m4 index cf4c97f1fd1..c55a122ea28 100644 --- a/pkgs/sagemath-categories/pyproject.toml.m4 +++ b/pkgs/sagemath-categories/pyproject.toml.m4 @@ -9,6 +9,7 @@ requires = [ SPKG_INSTALL_REQUIRES_sagemath_objects SPKG_INSTALL_REQUIRES_cython SPKG_INSTALL_REQUIRES_gmpy2 + SPKG_INSTALL_REQUIRES_memory_allocator SPKG_INSTALL_REQUIRES_cysignals ] build-backend = "setuptools.build_meta" diff --git a/pkgs/sagemath-categories/setup.cfg.m4 b/pkgs/sagemath-categories/setup.cfg.m4 index f5eb7c72968..ba987293b76 100644 --- a/pkgs/sagemath-categories/setup.cfg.m4 +++ b/pkgs/sagemath-categories/setup.cfg.m4 @@ -11,6 +11,7 @@ include(`setup_cfg_metadata.m4')dnl' python_requires = >=3.9, <3.12 install_requires = SPKG_INSTALL_REQUIRES_sagemath_objects + SPKG_INSTALL_REQUIRES_memory_allocator [options.extras_require] test = SPKG_INSTALL_REQUIRES_sagemath_repl diff --git a/pkgs/sagemath-objects/MANIFEST.in b/pkgs/sagemath-objects/MANIFEST.in index 98b6910849a..e5ed95278aa 100644 --- a/pkgs/sagemath-objects/MANIFEST.in +++ b/pkgs/sagemath-objects/MANIFEST.in @@ -32,6 +32,7 @@ include sage/misc/classcall_metaclass.* include sage/misc/inherit_comparison*.* include sage/misc/weak_dict.* include sage/misc/nested_class*.* +include sage/misc/test_nested_class*.p* include sage/misc/abstract_method.* include sage/misc/cachefunc.* include sage/misc/decorators.* @@ -46,42 +47,57 @@ include sage/misc/constant_function.* include sage/misc/call.* include sage/misc/bindable_class.* include sage/misc/namespace_package.p* -include sage/misc/package_dir.py include sage/misc/verbose.* include sage/misc/repr.* include sage/misc/superseded.* include sage/misc/misc_c.* # prod include sage/misc/flatten.* # dep of sage/categories/coxeter_groups.py - +include sage/misc/lazy_list.p* include sage/misc/lazy_import*.* include sage/misc/sageinspect.* # dep of sage/misc/lazy_import include sage/misc/instancedoc.* # dep of sage/misc/lazy_import include sage/misc/persist.* include sage/misc/sage_unittest.* # dep of sage/misc/persist +include sage/misc/fpickle.p* include sage/misc/randstate.* # used in sage.doctest include sage/misc/prandom.* # dep of sage/rings/ring include sage/ext/stdsage.pxd +include sage/ext/mod_int.* +include sage/ext/cplusplus.pxd +include sage/ext/ccobject.h include sage/sets/pythonclass.* include sage/arith/power.* include sage/arith/numerical_approx.* # integers... include sage/arith/long.* include sage/rings/integer_fake.* -graft sage/libs/gmp +# coerce actions needs is_Group +include sage/groups/group.* +include sage/groups/old.* +# needed for sage.structure.formal_sum +include sage/modules/module.p* + +graft sage/libs/gmp +include sage/libs/gmpxx.pxd ## What we do not want: # sage/misc/latex -- this should really go to another package -## FIXME: Needed for doctesting +## Needed for doctesting; we keep sagemath-repl pure Python include sage/misc/misc.* # some_tuples used in sage.misc.sage_unittest include sage/misc/timing.p* # walltime, cputime used in sage.doctest +include sage/misc/globals.p* +include sage/misc/sage_timeit*.p* +include sage/misc/session.p* +include sage/misc/reset.p* +include sage/misc/sage_ostools.p* global-exclude all__*.py global-include all__sagemath_objects.py diff --git a/pkgs/sagemath-objects/setup.cfg.m4 b/pkgs/sagemath-objects/setup.cfg.m4 index 894c07b5bbf..db018e05c43 100644 --- a/pkgs/sagemath-objects/setup.cfg.m4 +++ b/pkgs/sagemath-objects/setup.cfg.m4 @@ -22,6 +22,7 @@ test = [options.package_data] sage.cpython = + pycore_long.h pyx_visit.h string_impl.h cython_metaclass.h diff --git a/src/sage/ext/cplusplus.pxd b/src/sage/ext/cplusplus.pxd index e504f0c9fbb..d748bf2347a 100644 --- a/src/sage/ext/cplusplus.pxd +++ b/src/sage/ext/cplusplus.pxd @@ -8,7 +8,7 @@ # http://www.gnu.org/licenses/ #***************************************************************************** -cdef extern from "sage/ext/ccobject.h": +cdef extern from "ccobject.h": # Print representation of any C++ object str ccrepr[T](const T& x) diff --git a/src/sage/libs/polybori/decl.pxd b/src/sage/libs/polybori/decl.pxd index dd6a3aaf0b6..785e216e3db 100644 --- a/src/sage/libs/polybori/decl.pxd +++ b/src/sage/libs/polybori/decl.pxd @@ -23,7 +23,7 @@ cdef extern from "polybori/pbori_defs.h" namespace "COrderEnums": greater_or_equal_min "CTypes::greater_or_equal_min" -cdef extern from "sage/libs/polybori/pb_wrap.h": +cdef extern from "pb_wrap.h": cdef cppclass PBNavigator "CCuddNavigator": PBNavigator thenBranch() PBNavigator elseBranch() diff --git a/src/sage/misc/all__sagemath_categories.py b/src/sage/misc/all__sagemath_categories.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/sage/rings/all__sagemath_categories.py b/src/sage/rings/all__sagemath_categories.py index 8d14e7afcda..b76975de3b2 100644 --- a/src/sage/rings/all__sagemath_categories.py +++ b/src/sage/rings/all__sagemath_categories.py @@ -1,6 +1,78 @@ # Ring base classes -from .ring import Ring +from .ring import (Ring, Field, CommutativeRing, IntegralDomain, + DedekindDomain, PrincipalIdealDomain, EuclideanDomain) + +# Ring element base classes +from sage.structure.element import (CommutativeAlgebraElement, + RingElement, CommutativeRingElement, IntegralDomainElement, + DedekindDomainElement, PrincipalIdealDomainElement, + EuclideanDomainElement, FieldElement) + +# Rational numbers +from .rational import Rational +from .rational_field import RationalField, QQ +Rationals = RationalField + +# Rational integers. +from .integer_ring import IntegerRing, ZZ, crt_basis +from .integer import Integer + +# Integers modulo n. +from sage.rings.finite_rings.integer_mod_ring import IntegerModRing, Zmod +from sage.rings.finite_rings.integer_mod import IntegerMod, Mod, mod +Integers = IntegerModRing + +# Infinities +from .infinity import infinity, Infinity, InfinityRing, unsigned_infinity, UnsignedInfinityRing +oo = infinity + +# Quotient +from .quotient_ring import QuotientRing + +# Localization +from .localization import Localization + +# Fraction field +from .fraction_field import FractionField +Frac = FractionField + +# Function field +from .function_field.all__sagemath_categories import * + +# Double precision floating point numbers +from .real_double import RealDoubleField, RDF, RealDoubleElement # Ideals from .ideal import Ideal ideal = Ideal + +# Semirings +from .semirings.all import * + +from .finite_rings.all__sagemath_categories import * +from .number_field.all__sagemath_categories import * +from .padics.all__sagemath_categories import * +from .polynomial.all__sagemath_categories import * + +# Power series rings +from .power_series_ring import PowerSeriesRing + +# Laurent series ring in one variable +from .laurent_series_ring import LaurentSeriesRing + +# Puiseux series ring +from .puiseux_series_ring import PuiseuxSeriesRing + +# Big-oh notation +from .big_oh import O + +# continued fractions +from sage.rings.continued_fraction import (continued_fraction, + continued_fraction_list) + +# Lazy reals +from .real_lazy import RealLazyField, RLF, ComplexLazyField, CLF + +# Preliminary version of real numbers for doctesting without sage.rings.real_mpfr. +# sage.rings.all redefines it. +RealNumber = RR = RDF # used by the preparser to wrap real literals diff --git a/src/sage/rings/finite_rings/all__sagemath_categories.py b/src/sage/rings/finite_rings/all__sagemath_categories.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/sage/rings/function_field/all__sagemath_categories.py b/src/sage/rings/function_field/all__sagemath_categories.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/sage/rings/integer_ring.pyx b/src/sage/rings/integer_ring.pyx index c7a05a13e16..c9178fa2ca2 100644 --- a/src/sage/rings/integer_ring.pyx +++ b/src/sage/rings/integer_ring.pyx @@ -54,8 +54,6 @@ import sage.rings.infinity import sage.rings.rational import sage.rings.rational_field import sage.rings.ideal -import sage.libs.pari.all -import sage.rings.ideal from sage.categories.basic import EuclideanDomains from sage.categories.infinite_enumerated_sets import InfiniteEnumeratedSets from sage.rings.number_field.number_field_element_base import NumberFieldElement_base @@ -69,7 +67,7 @@ from sage.misc.randstate cimport randstate, current_randstate, SAGE_RAND_MAX cimport sage.rings.integer as integer -from . import ring +from sage.rings import ring arith = None cdef void late_import(): diff --git a/src/sage/rings/number_field/all__sagemath_categories.py b/src/sage/rings/number_field/all__sagemath_categories.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/sage/rings/padics/all__sagemath_categories.py b/src/sage/rings/padics/all__sagemath_categories.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/sage/rings/polynomial/all__sagemath_categories.py b/src/sage/rings/polynomial/all__sagemath_categories.py new file mode 100644 index 00000000000..2b79da92a4c --- /dev/null +++ b/src/sage/rings/polynomial/all__sagemath_categories.py @@ -0,0 +1,21 @@ +# Quotient of polynomial ring +from sage.rings.polynomial.polynomial_quotient_ring import PolynomialQuotientRing +from sage.rings.polynomial.polynomial_quotient_ring_element import PolynomialQuotientRingElement + +# Univariate Polynomial Rings +from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing +from sage.rings.polynomial.polynomial_ring import polygen, polygens +from sage.rings.polynomial.polynomial_element import Polynomial + +# Multivariate Polynomial Rings +from sage.rings.polynomial.term_order import TermOrder +from sage.rings.polynomial.multi_polynomial_element import degree_lowest_rational_function + +# Infinite Polynomial Rings +from sage.rings.polynomial.infinite_polynomial_ring import InfinitePolynomialRing + +# Laurent Polynomial Rings +from sage.rings.polynomial.laurent_polynomial_ring import LaurentPolynomialRing + +# Evaluation of cyclotomic polynomials +from sage.rings.polynomial.cyclotomic import cyclotomic_value diff --git a/src/sage_setup/__init__.py b/src/sage_setup/__init__.py index e69de29bb2d..b494f685f90 100644 --- a/src/sage_setup/__init__.py +++ b/src/sage_setup/__init__.py @@ -0,0 +1,103 @@ +def sage_setup(distributions, *, + interpreters=(), + required_modules=(), optional_modules=(), + package_data=None): + import time + + from distutils import log + from setuptools import setup + from sage_setup.command.sage_build_ext_minimal import sage_build_ext_minimal + from sage_setup.cython_options import compiler_directives, compile_time_env_variables + from sage_setup.extensions import create_extension + from sage_setup.find import find_python_sources, find_extra_files + + # Work around a Cython problem in Python 3.8.x on macOS + # https://github.com/cython/cython/issues/3262 + import os + if os.uname().sysname == 'Darwin': + import multiprocessing + multiprocessing.set_start_method('fork', force=True) + + import sys + + from sage_setup.excepthook import excepthook + sys.excepthook = excepthook + + from sage_setup.setenv import setenv + setenv() + + import sage.env + sage.env.default_required_modules = required_modules + sage.env.default_optional_modules = optional_modules + + cmdclass = dict(build_ext=sage_build_ext_minimal) + + sdist = len(sys.argv) > 1 and (sys.argv[1] in ["sdist", "egg_info", "dist_info"]) + + # ######################################################## + # ## Discovering Sources + # ######################################################## + if sdist: + extensions = [] + python_modules = [] + python_packages = [] + package_data = {} + else: + if interpreters: + log.info("Generating auto-generated sources") + # from sage_setup.autogen import autogen_all + # autogen_all() + from sage_setup.autogen.interpreters import rebuild + rebuild(os.path.join("sage", "ext", "interpreters"), + interpreters=['CDF', 'RDF', 'RR', 'CC'], + distribution='sagemath-modules', force=True) + + log.info("Discovering Python/Cython source code....") + t = time.time() + + python_packages, python_modules, cython_modules = find_python_sources( + '.', ['sage'], distributions=distributions) + extra_files = find_extra_files( + '.', ['sage'], '/doesnotexist', distributions=distributions) + package_data = {"": [f + for pkg, files in extra_files.items() + for f in files ]} + package_data.update({}) + python_packages += list(package_data) + + log.debug('python_packages = {0}'.format(sorted(python_packages))) + log.debug('python_modules = {0}'.format(sorted(m if isinstance(m, str) else m.name for m in python_modules))) + log.debug('cython_modules = {0}'.format(sorted(m if isinstance(m, str) else m.name for m in cython_modules))) + log.debug('package_data = {0}'.format(package_data)) + + log.info(f"Discovered Python/Cython sources, time: {(time.time() - t):.2f} seconds.") + + # from sage_build_cython: + import Cython.Compiler.Options + Cython.Compiler.Options.embed_pos_in_docstring = True + gdb_debug = os.environ.get('SAGE_DEBUG', None) != 'no' + + try: + from Cython.Build import cythonize + from sage.env import cython_aliases, sage_include_directories + from sage.misc.package_dir import cython_namespace_package_support + with cython_namespace_package_support(): + extensions = cythonize( + cython_modules, + include_path=sage_include_directories(use_sources=True) + ['.'], + compile_time_env=compile_time_env_variables(), + compiler_directives=compiler_directives(False), + aliases=cython_aliases(), + create_extension=create_extension, + gdb_debug=gdb_debug, + nthreads=4) + except Exception as exception: + log.warn(f"Exception while cythonizing source files: {repr(exception)}") + raise + + setup(cmdclass=cmdclass, + packages=python_packages, + py_modules=python_modules, + ext_modules=extensions, + package_data=package_data, + ) diff --git a/src/sage_setup/find.py b/src/sage_setup/find.py index 61d91abc2eb..192f7614776 100644 --- a/src/sage_setup/find.py +++ b/src/sage_setup/find.py @@ -151,7 +151,7 @@ def find_python_sources(src_dir, modules=['sage'], distributions=None, dirnames[:] = [] continue # Ordinary package or namespace package. - if distributions is None or '' in distributions: + if distributions is None: python_packages.append(package) for filename in filenames: