diff --git a/docs/changelog-released.md b/docs/changelog-released.md index d20de03317..18a2551f4f 100644 --- a/docs/changelog-released.md +++ b/docs/changelog-released.md @@ -44,7 +44,7 @@ detailed information in the following sections: (`ref [a, b]`). For details, see [Language changes](#24-6-language-changes). For background information and rationale on the name change see - [the proposal](https://github.com/modularml/mojo/issues/3623). For more + [the proposal](https://github.com/modular/mojo/issues/3623). For more information on origins, see [Lifetimes, origins and references](/mojo/manual/values/lifetimes) in the Mojo Manual. @@ -126,7 +126,7 @@ detailed information in the following sections: eventually be deprecated and removed. This was [discussed extensively in a public - proposal](https://github.com/modularml/mojo/issues/3623). For more + proposal](https://github.com/modular/mojo/issues/3623). For more information, see [Named results](/nightly/mojo/manual/functions#named-results) in the Mojo Manual. @@ -349,7 +349,7 @@ detailed information in the following sections: - Mojo can now interpret simple LLVM intrinsics in parameter expressions, enabling things like `count_leading_zeros` to work at compile time: - [Issue #933](https://github.com/modularml/mojo/issues/933). + [Issue #933](https://github.com/modular/mojo/issues/933). - Introduced the `@explicit_destroy` annotation, the `__disable_del` keyword, the `UnknownDestructibility` trait, and the `ImplicitlyDestructible` keyword, @@ -468,8 +468,8 @@ detailed information in the following sections: 'strong reference' pointer. - Support for multi-dimensional indexing and slicing for `PythonObject` - (PR [#3549](https://github.com/modularml/mojo/pull/3549), - PR [#3583](https://github.com/modularml/mojo/pull/3583)). + (PR [#3549](https://github.com/modular/mojo/pull/3549), + PR [#3583](https://github.com/modular/mojo/pull/3583)). ```mojo var np = Python.import_module("numpy") @@ -482,7 +482,7 @@ detailed information in the following sections: - Added [`PythonObject.__contains__()`](/mojo/stdlib/python/python_object/PythonObject#__contains__). - ([PR #3101](https://github.com/modularml/mojo/pull/3101)) + ([PR #3101](https://github.com/modular/mojo/pull/3101)) Example usage: @@ -514,7 +514,7 @@ detailed information in the following sections: semantics to Rust's [`Box<>`](https://doc.rust-lang.org/std/boxed/struct.Box.html) and C++'s [`std::unique_ptr`](https://en.cppreference.com/w/cpp/memory/unique_ptr). - ([PR #3524](https://github.com/modularml/mojo/pull/3524)) + ([PR #3524](https://github.com/modular/mojo/pull/3524)) - `Arc` has been renamed to [`ArcPointer`](/mojo/stdlib/memory/arc/ArcPointer), for consistency with `OwnedPointer`. @@ -544,7 +544,7 @@ detailed information in the following sections: [`FloatableRaising`](/mojo/stdlib/builtin/floatable/FloatableRaising) traits to denote types that can be converted to a `Float64` value using the builtin `float` function. Made `SIMD` and `FloatLiteral` conform to the `Floatable` - trait. ([PR #3163](https://github.com/modularml/mojo/pull/3163)) + trait. ([PR #3163](https://github.com/modular/mojo/pull/3163)) ```mojo fn foo[F: Floatable](v: F): @@ -562,7 +562,7 @@ detailed information in the following sections: - Introduced the [`random.shuffle()`](/mojo/stdlib/random/random/shuffle) function for randomizing the elements of a `List`. - ([PR #3327](https://github.com/modularml/mojo/pull/3327)) + ([PR #3327](https://github.com/modular/mojo/pull/3327)) Example: @@ -580,20 +580,20 @@ detailed information in the following sections: - [`Slice.step`](/mojo/stdlib/builtin/builtin_slice/Slice#fields) is now an `Optional[Int]`, matching the optionality of `slice.step` in Python. - ([PR #3160](https://github.com/modularml/mojo/pull/3160)) + ([PR #3160](https://github.com/modular/mojo/pull/3160)) - There is now a [`Byte`](/mojo/stdlib/builtin/simd/#aliases) alias to better express intent when working with a pack of bits. - ([PR #3670](https://github.com/modularml/mojo/pull/3670)). + ([PR #3670](https://github.com/modular/mojo/pull/3670)). - Expanded [`os.path`](/mojo/stdlib/os/path/path/) with new functions: - - `os.path.expandvars()`: Expands environment variables in a path ([PR #3735](https://github.com/modularml/mojo/pull/3735)). + - `os.path.expandvars()`: Expands environment variables in a path ([PR #3735](https://github.com/modular/mojo/pull/3735)). - `os.path.splitroot()`: Split a path into drive, root and tail. - ([PR #3780](https://github.com/modularml/mojo/pull/3780)). + ([PR #3780](https://github.com/modular/mojo/pull/3780)). - Added a [`reserve()`](/mojo/stdlib/collections/string/String#reserve) method and new constructor to the `String` struct to allocate additional capacity. - ([PR #3755](https://github.com/modularml/mojo/pull/3755)). + ([PR #3755](https://github.com/modular/mojo/pull/3755)). - A new [`StringLiteral.get[some_stringable]()`](/mojo/stdlib/builtin/string_literal/StringLiteral#get) @@ -619,7 +619,7 @@ detailed information in the following sections: - [`StringRef`](/mojo/stdlib/utils/stringref/StringRef) now implements `split()` which can be used to split a `StringRef` into a `List[StringRef]` by a - delimiter. ([PR #2705](https://github.com/modularml/mojo/pull/2705)) + delimiter. ([PR #2705](https://github.com/modular/mojo/pull/2705)) - [`StringRef`](/mojo/stdlib/utils/stringref/StringRef) is now representable so `repr(StringRef("hello"))` will return `StringRef('hello')`. @@ -678,7 +678,7 @@ detailed information in the following sections: - The VS Code extension now has the `mojo.run.focusOnTerminalAfterLaunch` setting, which controls whether to focus on the terminal used by the `Mojo: Run Mojo File` command or on the editor after launch. - [Issue #3532](https://github.com/modularml/mojo/issues/3532). + [Issue #3532](https://github.com/modular/mojo/issues/3532). - The VS Code extension now has the `mojo.SDK.additionalSDKs` setting, which allows the user to provide a list of MAX SDKs that the extension can use when @@ -743,40 +743,40 @@ detailed information in the following sections: - Lifetime tracking is now fully field sensitive, which makes the uninitialized variable checker more precise. -- [Issue #1310](https://github.com/modularml/mojo/issues/1310) - Mojo permits +- [Issue #1310](https://github.com/modular/mojo/issues/1310) - Mojo permits the use of any constructor for implicit conversions -- [Issue #1632](https://github.com/modularml/mojo/issues/1632) - Mojo produces +- [Issue #1632](https://github.com/modular/mojo/issues/1632) - Mojo produces weird error when inout function is used in non mutating function -- [Issue #3444](https://github.com/modularml/mojo/issues/3444) - Raising init +- [Issue #3444](https://github.com/modular/mojo/issues/3444) - Raising init causing use of uninitialized variable -- [Issue #3544](https://github.com/modularml/mojo/issues/3544) - Known +- [Issue #3544](https://github.com/modular/mojo/issues/3544) - Known mutable `ref` argument are not optimized as `noalias` by LLVM. -- [Issue #3559](https://github.com/modularml/mojo/issues/3559) - VariadicPack +- [Issue #3559](https://github.com/modular/mojo/issues/3559) - VariadicPack doesn't extend the lifetimes of the values it references. -- [Issue #3627](https://github.com/modularml/mojo/issues/3627) - Compiler +- [Issue #3627](https://github.com/modular/mojo/issues/3627) - Compiler overlooked exclusivity violation caused by `ref [MutableAnyOrigin] T` -- [Issue #3710](https://github.com/modularml/mojo/issues/3710) - Mojo frees +- [Issue #3710](https://github.com/modular/mojo/issues/3710) - Mojo frees memory while reference to it is still in use. -- [Issue #3805](https://github.com/modularml/mojo/issues/3805) - Crash When +- [Issue #3805](https://github.com/modular/mojo/issues/3805) - Crash When Initializing !llvm.ptr. -- [Issue #3816](https://github.com/modularml/mojo/issues/3816) - Ternary +- [Issue #3816](https://github.com/modular/mojo/issues/3816) - Ternary if-operator doesn't propagate origin information. -- [Issue #3815](https://github.com/modularml/mojo/issues/3815) - +- [Issue #3815](https://github.com/modular/mojo/issues/3815) - [BUG] Mutability not preserved when taking the union of two origins. -- [Issue #3829](https://github.com/modularml/mojo/issues/3829) - Poor error +- [Issue #3829](https://github.com/modular/mojo/issues/3829) - Poor error message when invoking a function pointer upon an argument of the wrong origin -- [Issue #3830](https://github.com/modularml/mojo/issues/3830) - Failures +- [Issue #3830](https://github.com/modular/mojo/issues/3830) - Failures emitting register RValues to ref arguments. - The VS Code extension now auto-updates its private copy of the MAX SDK. @@ -982,7 +982,7 @@ detailed information in the following sections: The Mojo compiler now always passes the "new value" being set using the last keyword argument of the `__setitem__()`, e.g. turning `yourType[1, 2] = 3` into `yourType.__setitem__(1, 2, val=3)`. This fixes - [Issue #248](https://github.com/modularml/mojo/issues/248). + [Issue #248](https://github.com/modular/mojo/issues/248). - Mojo context managers used in regions of code that may raise no longer need to define a "conditional" exit function in the form of @@ -1109,7 +1109,7 @@ detailed information in the following sections: - Added the builtin [`input()`](/mojo/stdlib/builtin/io/input) function, which behaves the same as Python. - ([PR #3392](https://github.com/modularml/mojo/pull/3392)) + ([PR #3392](https://github.com/modular/mojo/pull/3392)) ```mojo name = input("Enter your name: ") @@ -1120,7 +1120,7 @@ detailed information in the following sections: There is a known issue when running the `input()` function with JIT compilation (see issue - [#3479](https://github.com/modularml/mojo/issues/3479)). + [#3479](https://github.com/modular/mojo/issues/3479)). - [`print()`](/mojo/stdlib/builtin/io/print) now requires that its arguments conform to the [`Formattable`](/mojo/stdlib/utils/format/Formattable) trait. @@ -1193,12 +1193,12 @@ detailed information in the following sections: - Added [`TemporaryDirectory`](/mojo/stdlib/tempfile/tempfile/TemporaryDirectory) in module `tempfile`. - ([PR 2743](https://github.com/modularml/mojo/pull/2743)) + ([PR 2743](https://github.com/modular/mojo/pull/2743)) - Added [`NamedTemporaryFile`](/mojo/stdlib/tempfile/tempfile/NamedTemporaryFile) in module `tempfile`. - ([PR 2762](https://github.com/modularml/mojo/pull/2762)) + ([PR 2762](https://github.com/modular/mojo/pull/2762)) - [`String`](/mojo/stdlib/collections/string/String) and friends: @@ -1207,7 +1207,7 @@ detailed information in the following sections: - Added the [`String.format()`](/mojo/stdlib/collections/string/String#format) method. - ([PR #2771](https://github.com/modularml/mojo/pull/2771)) + ([PR #2771](https://github.com/modular/mojo/pull/2771)) Supports automatic and manual indexing of `*args`. @@ -1228,7 +1228,7 @@ detailed information in the following sections: - [`String.format()`](/mojo/stdlib/collections/string/String#format) now supports conversion flags `!s` and `!r`, allowing for `str()` and `repr()` conversions within format strings. - ([PR #3279](https://github.com/modularml/mojo/pull/3279)) + ([PR #3279](https://github.com/modular/mojo/pull/3279)) Example: @@ -1245,14 +1245,14 @@ detailed information in the following sections: [`ljust()`](/mojo/stdlib/collections/string/String#ljust), and [`center()`](/mojo/stdlib/collections/string/String#center) methods to return a justified string based on width and fillchar. ([PR - #3278](https://github.com/modularml/mojo/pull/3278)) + #3278](https://github.com/modular/mojo/pull/3278)) - The [`atol()`](/mojo/stdlib/collections/string/atol) function now correctly supports leading underscores, (e.g.`atol("0x_ff", 0)`), when the appropriate base is specified or inferred (base 0). non-base-10 integer literals as per Python's [Integer Literals](). - ([PR #3180](https://github.com/modularml/mojo/pull/3180)) + ([PR #3180](https://github.com/modular/mojo/pull/3180)) - Added the [`unsafe_cstr_ptr()`](/mojo/stdlib/collections/string/String#unsafe_cstr_ptr) @@ -1270,7 +1270,7 @@ detailed information in the following sections: and [`StringSlice.__len__()`](/mojo/stdlib/utils/string_slice/StringSlice#__len__) now does return the Unicode codepoints length. - ([PR #2960](https://github.com/modularml/mojo/pull/2960)) + ([PR #2960](https://github.com/modular/mojo/pull/2960)) - Added a new [`StaticString`](/mojo/stdlib/utils/string_slice/#aliases) type alias. This can be used in place of @@ -1414,7 +1414,7 @@ detailed information in the following sections: assert_equal(str(stacked), "[1 2 3 4 5 6]") ``` - ([PR #3264](https://github.com/modularml/mojo/pull/3264)) + ([PR #3264](https://github.com/modular/mojo/pull/3264)) - Accessing local Python modules with [`Python.add_to_path(".")`](/mojo/stdlib/python/python/Python#add_to_path) @@ -1429,7 +1429,7 @@ detailed information in the following sections: - [`List`](/mojo/stdlib/collections/list/List) values are now equality comparable with `==` and `!=` when their element type is equality - comparable. ([PR #3195](https://github.com/modularml/mojo/pull/3195)) + comparable. ([PR #3195](https://github.com/modular/mojo/pull/3195)) - [`Optional`](/mojo/stdlib/collections/optional/Optional) values are now equality comparable with `==` and `!=` when their element type is equality @@ -1437,22 +1437,22 @@ detailed information in the following sections: - Added a new [`Counter`](/mojo/stdlib/collections/counter/Counter) dictionary-like type, matching most of the features of the Python one. - ([PR #2910](https://github.com/modularml/mojo/pull/2910)) + ([PR #2910](https://github.com/modular/mojo/pull/2910)) - [`Dict`](/mojo/stdlib/collections/dict/Dict) now implements [`setdefault()`](/mojo/stdlib/collections/dict/Dict#setdefault), which gets a value from the dictionary by key, or sets it to a default if it doesn't exist. - ([PR #2803](https://github.com/modularml/mojo/pull/2803)) + ([PR #2803](https://github.com/modular/mojo/pull/2803)) - `Dict` now supports [`popitem()`](/mojo/stdlib/collections/dict/Dict#popitem), which removes and returns the last item in the `Dict`. - ([PR #2701](https://github.com/modularml/mojo/pull/2701)) + ([PR #2701](https://github.com/modular/mojo/pull/2701)) - Added a [`Dict.__init__()`](/mojo/stdlib/collections/dict/Dict#__init__) overload to specify initial capacity. - ([PR #3171](https://github.com/modularml/mojo/pull/3171)) + ([PR #3171](https://github.com/modular/mojo/pull/3171)) The capacity has to be a power of two and greater than or equal to 8. @@ -1467,7 +1467,7 @@ detailed information in the following sections: - `ListLiteral` now supports [`__contains__()`](/mojo/stdlib/builtin/builtin_list/ListLiteral#__contains__). - ([PR #3251](https://github.com/modularml/mojo/pull/3251)) + ([PR #3251](https://github.com/modular/mojo/pull/3251)) - Filesystem and environment utilities: @@ -1549,7 +1549,7 @@ detailed information in the following sections: - Added the [`Identifiable`](/mojo/stdlib/builtin/identifiable/Identifiable) trait, used to describe types that implement the `__is__()` and `__isnot__()` trait methods. - ([PR #2807](https://github.com/modularml/mojo/pull/2807)) + ([PR #2807](https://github.com/modular/mojo/pull/2807)) - Types conforming to [`Boolable`](/mojo/stdlib/builtin/bool/Boolable) (that is, those implementing `__bool__()`) no longer implicitly convert to `Bool`. @@ -1591,7 +1591,7 @@ detailed information in the following sections: - Added the [`oct()`](/mojo/stdlib/builtin/format_int/oct) builtin function for formatting an integer in octal. - ([PR #2914](https://github.com/modularml/mojo/pull/2914)) + ([PR #2914](https://github.com/modular/mojo/pull/2914)) - Added the [`assert_is()`](/mojo/stdlib/testing/testing/assert_is) and [`assert_is_not()`](/mojo/stdlib/testing/testing/assert_is_not) test @@ -1599,7 +1599,7 @@ detailed information in the following sections: - The [`math`](/mojo/stdlib/math/constants/) package now includes the `pi`, `e`, and `tau` constants (Closes Issue - [#2135](https://github.com/modularml/mojo/issues/2135)). + [#2135](https://github.com/modular/mojo/issues/2135)). - The [`ulp`](/mojo/stdlib/math/math/ulp) function from `numerics` has been moved to the `math` module. @@ -1608,7 +1608,7 @@ detailed information in the following sections: [`bit_reverse()`](/mojo/stdlib/bit/bit/bit_reverse), [`byte_swap()`](/mojo/stdlib/bit/bit/byte_swap), and [`pop_count()`](/mojo/stdlib/bit/bit/pop_count) for the `Int` type. - ([PR #3150](https://github.com/modularml/mojo/pull/3150)) + ([PR #3150](https://github.com/modular/mojo/pull/3150)) - A few `bit` functions have been renamed for clarity: @@ -1620,7 +1620,7 @@ detailed information in the following sections: `OptionalReg[Int]` for `start` and `end` and implements a constructor which accepts optional values. `Slice._has_end()` has also been removed since a Slice with no end is now represented by an empty `Slice.end` option. - ([PR #2495](https://github.com/modularml/mojo/pull/2495)) + ([PR #2495](https://github.com/modular/mojo/pull/2495)) ```mojo var s = Slice(1, None, 2) @@ -1732,28 +1732,28 @@ detailed information in the following sections: - Mojo now prints `ref` arguments and results in generated documentation correctly. -- [#1734](https://github.com/modularml/mojo/issues/1734) - Calling +- [#1734](https://github.com/modular/mojo/issues/1734) - Calling `__copyinit__` on self causes crash. -- [#3142](https://github.com/modularml/mojo/issues/3142) - [QoI] Confusing +- [#3142](https://github.com/modular/mojo/issues/3142) - [QoI] Confusing `__setitem__` method is failing with a "must be mutable" error. -- [#248](https://github.com/modularml/mojo/issues/248) - [Feature] Enable +- [#248](https://github.com/modular/mojo/issues/248) - [Feature] Enable `__setitem__` to take variadic arguments -- [#3065](https://github.com/modularml/mojo/issues/3065) - Fix incorrect behavior +- [#3065](https://github.com/modular/mojo/issues/3065) - Fix incorrect behavior of `SIMD.__int__` on unsigned types -- [#3045](https://github.com/modularml/mojo/issues/3045) - Disable implicit SIMD +- [#3045](https://github.com/modular/mojo/issues/3045) - Disable implicit SIMD conversion routes through `Bool` -- [#3126](https://github.com/modularml/mojo/issues/3126) - [BUG] List doesn't +- [#3126](https://github.com/modular/mojo/issues/3126) - [BUG] List doesn't work at compile time. -- [#3237](https://github.com/modularml/mojo/issues/3237) - [BUG] Difference +- [#3237](https://github.com/modular/mojo/issues/3237) - [BUG] Difference between `__getitem__` and `[.]` operator. -- [#3336](https://github.com/modularml/mojo/issues/3336) - Fix outdated +- [#3336](https://github.com/modular/mojo/issues/3336) - Fix outdated references to `let` in REPL documentation. - The VS Code extension no longer caches the information of the selected @@ -1972,7 +1972,7 @@ Big themes for this release: - Added built-in [`repr()`](/mojo/stdlib/builtin/repr/repr) function and [`Representable`](/mojo/stdlib/builtin/repr/Representable) trait. - ([PR #2361](https://github.com/modularml/mojo/pull/2361)) + ([PR #2361](https://github.com/modular/mojo/pull/2361)) - Added the [`Indexer`](/mojo/stdlib/builtin/int/Indexer) trait to denote types that implement the `__index__()` method which allows these types to be @@ -2019,7 +2019,7 @@ Big themes for this release: print(a[AlwaysZero()]) # works and prints 1 ``` - ([PR #2685](https://github.com/modularml/mojo/pull/2685)) + ([PR #2685](https://github.com/modular/mojo/pull/2685)) - Added traits allowing user-defined types to be supported by various built-in and math functions. @@ -2097,14 +2097,14 @@ Big themes for this release: [`rstrip()`](/mojo/stdlib/collections/string/String#rstrip) can now remove custom characters other than whitespace. In addition, there are now several useful aliases for whitespace, ASCII lower/uppercase, and so on. - ([PR #2555](https://github.com/modularml/mojo/pull/2555)) + ([PR #2555](https://github.com/modular/mojo/pull/2555)) - `String` now has a [`splitlines()`](/mojo/stdlib/collections/string/String#splitlines) method, which allows splitting strings at line boundaries. This method supports [universal newlines](https://docs.python.org/3/glossary.html#term-universal-newlines) and provides an option to retain or remove the line break characters. - ([PR #2810](https://github.com/modularml/mojo/pull/2810)) + ([PR #2810](https://github.com/modular/mojo/pull/2810)) - `InlinedString` has been renamed to [`InlineString`](/mojo/stdlib/utils/inline_string/InlineString) to be @@ -2113,12 +2113,12 @@ Big themes for this release: - [`StringRef`](/mojo/stdlib/utils/stringref/StringRef) now implements [`strip()`](/mojo/stdlib/utils/stringref/StringRef#strip), which can be used to remove leading and trailing whitespace. - ([PR #2683](https://github.com/modularml/mojo/pull/2683)) + ([PR #2683](https://github.com/modular/mojo/pull/2683)) - `StringRef` now implements [`startswith()`](/mojo/stdlib/utils/stringref/StringRef#startswith) and [`endswith()`](/mojo/stdlib/utils/stringref/StringRef#endswith). - ([PR #2710](https://github.com/modularml/mojo/pull/2710)) + ([PR #2710](https://github.com/modular/mojo/pull/2710)) - Added a new [`StringSlice`](/mojo/stdlib/utils/string_slice/StringSlice) type, to replace uses of the unsafe `StringRef` type in standard library @@ -2170,7 +2170,7 @@ Big themes for this release: - Added a built-in [`sort()`](/mojo/stdlib/builtin/sort/sort) function for lists of elements that conform to the [`ComparableCollectionElement`](/mojo/stdlib/builtin/value/ComparableCollectionElement) - trait.([PR #2609](https://github.com/modularml/mojo/pull/2609)) + trait.([PR #2609](https://github.com/modular/mojo/pull/2609)) - [`int()`](/mojo/stdlib/builtin/int/int-function) can now take a string and a specified base to parse an integer from a @@ -2178,17 +2178,17 @@ Big themes for this release: specified, the string will be parsed as if it was an integer literal, with the base determined by whether the string contains the prefix `"0x"`, `"0o"`, or `"0b"`. - ([PR #2273](https://github.com/modularml/mojo/pull/2273), - fixes [#2274](https://github.com/modularml/mojo/issues/2274)) + ([PR #2273](https://github.com/modular/mojo/pull/2273), + fixes [#2274](https://github.com/modular/mojo/issues/2274)) - Added the [`bin()`](/mojo/stdlib/builtin/format_int/bin) built-in function to convert integral types into their binary string representation. - ([PR #2603](https://github.com/modularml/mojo/pull/2603)) + ([PR #2603](https://github.com/modular/mojo/pull/2603)) - Added the [`atof()`](/mojo/stdlib/collections/string/atof) built-in function, which can convert a `String` to a `float64`. - ([PR #2649](https://github.com/modularml/mojo/pull/2649)) + ([PR #2649](https://github.com/modular/mojo/pull/2649)) - You can now use the built-in [`any()`](/mojo/stdlib/builtin/bool/any) and [`all()`](/mojo/stdlib/builtin/bool/all) functions to check for truthy @@ -2196,7 +2196,7 @@ Big themes for this release: `size=1`, You must explicitly use these to get the truthy value of a SIMD vector with more than one element. This avoids common bugs around implicit conversion of `SIMD` to `Bool`. - ([PR #2600](https://github.com/modularml/mojo/pull/2600)) + ([PR #2600](https://github.com/modular/mojo/pull/2600)) For example: @@ -2211,10 +2211,10 @@ Big themes for this release: - [`object`](/mojo/stdlib/builtin/object/) now implements all the bitwise operators. - ([PR #2324](https://github.com/modularml/mojo/pull/2324)) + ([PR #2324](https://github.com/modular/mojo/pull/2324)) - [`Tuple`](/mojo/stdlib/builtin/tuple/Tuple) now supports `__contains__()`. - ([PR #2709](https://github.com/modularml/mojo/pull/2709)) For example: + ([PR #2709](https://github.com/modular/mojo/pull/2709)) For example: ```mojo var x = Tuple(1, 2, True) @@ -2264,12 +2264,12 @@ Big themes for this release: Note that `List` doesn't conform to the `Stringable` trait yet so you cannot use `str(my_list)` yet. - ([PR #2673](https://github.com/modularml/mojo/pull/2673)) + ([PR #2673](https://github.com/modular/mojo/pull/2673)) - `List` has a simplified syntax to call the [`count()`](/mojo/stdlib/collections/list/List#count) method: `my_list.count(x)`. - ([PR #2675](https://github.com/modularml/mojo/pull/2675)) + ([PR #2675](https://github.com/modular/mojo/pull/2675)) - `List()` now supports `__contains__()`, so you can now use lists with the `in` operator: @@ -2278,84 +2278,84 @@ Big themes for this release: if x in my_list: ``` - ([PR #2667](https://github.com/modularml/mojo/pull/2667)) + ([PR #2667](https://github.com/modular/mojo/pull/2667)) - `List` now has an [`unsafe_get()`](/mojo/stdlib/collections/list/List#unsafe_get) to get the reference to an element without bounds check or wraparound for negative indices. Note that this method is unsafe. Use with caution. - [PR #2800](https://github.com/modularml/mojo/pull/2800)) + [PR #2800](https://github.com/modular/mojo/pull/2800)) - Added a [`fromkeys()`](/mojo/stdlib/collections/dict/Dict#fromkeys) method to `Dict` to return a `Dict` with the specified keys and values. - ([PR 2622](https://github.com/modularml/mojo/pull/2622)) + ([PR 2622](https://github.com/modular/mojo/pull/2622)) - Added a [`clear()`](/mojo/stdlib/collections/dict/Dict#clear) method to - `Dict`. ([PR 2627](https://github.com/modularml/mojo/pull/2627)) + `Dict`. ([PR 2627](https://github.com/modular/mojo/pull/2627)) - `Dict` now supports [`reversed()`](/mojo/stdlib/builtin/reversed/reversed) for its `items()` and `values()` iterators. - ([PR #2340](https://github.com/modularml/mojo/pull/2340)) + ([PR #2340](https://github.com/modular/mojo/pull/2340)) - `Dict` now has a simplified conversion to `String` with `my_dict.__str__()`. Note that `Dict` does not conform to the `Stringable` trait so `str(my_dict)` is not possible yet. - ([PR #2674](https://github.com/modularml/mojo/pull/2674)) + ([PR #2674](https://github.com/modular/mojo/pull/2674)) - `Dict` now implements [`get(key)`](/mojo/stdlib/collections/dict/Dict#get) and `get(key, default)` functions. - ([PR #2519](https://github.com/modularml/mojo/pull/2519)) + ([PR #2519](https://github.com/modular/mojo/pull/2519)) - Added a temporary `__get_ref(key)` method to `Dict`, allowing you to get a `Reference` to a dictionary value. - Added a new [`InlineList`](/mojo/stdlib/collections/inline_list/InlineList) type, a stack-allocated list with a static maximum size. - ([PR 2587#](https://github.com/modularml/mojo/pull/2587)) - ([PR #2703](https://github.com/modularml/mojo/pull/2703)) + ([PR 2587#](https://github.com/modular/mojo/pull/2587)) + ([PR #2703](https://github.com/modular/mojo/pull/2703)) - Added a new [`Span`](/mojo/stdlib/memory/span/Span) type for taking slices of contiguous collections. - ([PR #2595](https://github.com/modularml/mojo/pull/2595)) + ([PR #2595](https://github.com/modular/mojo/pull/2595)) - [`os`](/mojo/stdlib/os/os/) module: - The `os` module now provides functionality for adding and removing directories using [`mkdir()`](/mojo/stdlib/os/os/mkdir) and [`rmdir()`](/mojo/stdlib/os/os/rmdir). - ([PR #2430](https://github.com/modularml/mojo/pull/2430)) + ([PR #2430](https://github.com/modular/mojo/pull/2430)) - Added the [`os.path.getsize()`](/mojo/stdlib/os/path/path/getsize) function, which gives the size in bytes of the file identified by the path. - ([PR 2626](https://github.com/modularml/mojo/pull/2626)) + ([PR 2626](https://github.com/modular/mojo/pull/2626)) - Added [`os.path.join()`](/mojo/stdlib/os/path/path/join) function. - ([PR 2792](https://github.com/modularml/mojo/pull/2792)) + ([PR 2792](https://github.com/modular/mojo/pull/2792)) - Added a new [`tempfile`](/mojo/stdlib/tempfile/tempfile/) module, with `gettempdir()` and `mkdtemp()` functions. - ([PR 2742](https://github.com/modularml/mojo/pull/2742)) + ([PR 2742](https://github.com/modular/mojo/pull/2742)) - [`SIMD`](/mojo/stdlib/builtin/simd/SIMD) type: - Added [`SIMD.shuffle()`](/mojo/stdlib/builtin/simd/SIMD#shuffle) with `IndexList` mask. - ([PR #2315](https://github.com/modularml/mojo/pull/2315)) + ([PR #2315](https://github.com/modular/mojo/pull/2315)) - [`SIMD.__bool__()`](/mojo/stdlib/builtin/simd/SIMD#__bool__) is constrained such that it only works when `size` is `1`. For SIMD vectors with more than one element, use [`any()`](/mojo/stdlib/builtin/bool/any) or [`all()`](/mojo/stdlib/builtin/bool/all). - ([PR #2502](https://github.com/modularml/mojo/pull/2502)) + ([PR #2502](https://github.com/modular/mojo/pull/2502)) - The [`SIMD.reduce_or()`](/mojo/stdlib/builtin/simd/SIMD#reduce_or) and [`SIMD.reduce_and()`](/mojo/stdlib/builtin/simd/SIMD#reduce_and) methods are now bitwise operations, and support integer types. - ([PR #2671](https://github.com/modularml/mojo/pull/2671)) + ([PR #2671](https://github.com/modular/mojo/pull/2671)) - Added [`SIMD.__repr__()`](/mojo/stdlib/builtin/simd/SIMD#__repr__) to get the verbose string representation of `SIMD` types. - ([PR #2728](https://github.com/modularml/mojo/pull/2728)) + ([PR #2728](https://github.com/modular/mojo/pull/2728)) - [`math`](/mojo/stdlib/math/math/) package: @@ -2391,7 +2391,7 @@ Big themes for this release: - [`math.gcd()`](/mojo/stdlib/math/math/gcd) now works on negative inputs, and like Python's implementation, accepts a variadic list of integers. New overloads for a `List` or `Span`of integers are also added. - ([PR #2777](https://github.com/modularml/mojo/pull/2777)) + ([PR #2777](https://github.com/modular/mojo/pull/2777)) - Async and coroutines: @@ -2415,12 +2415,12 @@ Big themes for this release: that works on memory-only types. Compare with the existing [`StaticTuple`](/mojo/stdlib/utils/static_tuple/StaticTuple) type, which is conceptually an array type, but only works on `AnyTrivialRegType`. - ([PR #2294](https://github.com/modularml/mojo/pull/2294)) + ([PR #2294](https://github.com/modular/mojo/pull/2294)) - The [`base64`](/mojo/stdlib/base64/) package now includes encoding and decoding support for both the Base64 and Base16 encoding schemes. - ([PR #2364](https://github.com/modularml/mojo/pull/2364)) - ([PR #2584](https://github.com/modularml/mojo/pull/2584)) + ([PR #2364](https://github.com/modular/mojo/pull/2364)) + ([PR #2584](https://github.com/modular/mojo/pull/2584)) - The `take()` function in [`Variant`](/mojo/stdlib/utils/variant/Variant) and [`Optional`](/mojo/stdlib/collections/optional/Optional) has been renamed to @@ -2437,7 +2437,7 @@ Big themes for this release: - `infinity` and `NaN` are now correctly handled in [`testing.assert_almost_equal()`](/mojo/stdlib/testing/testing/assert_almost_equal) and an `inf` function has been added to `utils/numerics.mojo`. - ([PR #2375](https://github.com/modularml/mojo/pull/2375)) + ([PR #2375](https://github.com/modular/mojo/pull/2375)) ### Tooling changes @@ -2551,16 +2551,16 @@ Big themes for this release: #### 🛠️ Fixed -- [#1837](https://github.com/modularml/mojo/issues/1837) Fix self-referential +- [#1837](https://github.com/modular/mojo/issues/1837) Fix self-referential variant crashing the compiler. -- [#2363](https://github.com/modularml/mojo/issues/2363) Fix LSP crashing on +- [#2363](https://github.com/modular/mojo/issues/2363) Fix LSP crashing on simple trait definitions. -- [#1787](https://github.com/modularml/mojo/issues/1787) Fix error when using +- [#1787](https://github.com/modular/mojo/issues/1787) Fix error when using `//` on `FloatLiteral` in alias expression. - Made several improvements to dictionary performance. Dicts with integer keys are most heavily affected, but large dicts and dicts with large values will also see large improvements. -- [#2692](https://github.com/modularml/mojo/issues/2692) Fix `assert_raises` +- [#2692](https://github.com/modular/mojo/issues/2692) Fix `assert_raises` to include calling location. ### Special thanks @@ -2749,21 +2749,21 @@ Special thanks to our community contributors: - `pop(index)` for removing an element at a particular index. By default, `List.pop()` removes the last element in the list. ([@LJ-9801](https://github.com/LJ-9801), fixes - [#2017](https://github.com/modularml/mojo/issues/2017)) + [#2017](https://github.com/modular/mojo/issues/2017)) - `resize(new_size)` for resizing the list without the need to specify an additional value. ([@mikowals](https://github.com/mikowals), fixes - [#2133](https://github.com/modularml/mojo/issues/2133)) + [#2133](https://github.com/modular/mojo/issues/2133)) - `insert(index, value)` for inserting a value at a specified index into the `List`. ([@whym1here](https://github.com/whym1here), fixes - [#2134](https://github.com/modularml/mojo/issues/2134)) + [#2134](https://github.com/modular/mojo/issues/2134)) - A new constructor `List(ptr, size, capacity)` to to avoid needing to do a deep copy of an existing contiguous memory allocation when constructing a new `List`. ([@StandinKP](https://github.com/StandinKP), fixes - [#2170](https://github.com/modularml/mojo/issues/2170)) + [#2170](https://github.com/modular/mojo/issues/2170)) - [`Dict`](/mojo/stdlib/collections/dict/Dict) now has a `update()` method to update keys/values from another `Dict`. @@ -2804,7 +2804,7 @@ Special thanks to our community contributors: ([@helehex](https://github.com/helehex) and [@jayzhan211](https://github.com/jayzhan211), contributes towards - [#2325](https://github.com/modularml/mojo/issues/2325)) + [#2325](https://github.com/modular/mojo/issues/2325)) - [`Optional`](/mojo/stdlib/collections/optional/Optional) now implements `__is__` and `__isnot__` methods so that you can compare an `Optional` with @@ -2951,7 +2951,7 @@ Special thanks to our community contributors: [`chr`](/mojo/stdlib/collections/string/chr) functions have been improved to accept any Unicode character. ([@mzaks](https://github.com/mzaks), contributes towards - [#1616](https://github.com/modularml/mojo/issues/1616)) + [#1616](https://github.com/modular/mojo/issues/1616)) - [`atol()`](/mojo/stdlib/collections/string/atol) now handles whitespace. The `atol()`function is used internally by `String.__int__()`, so @@ -2960,7 +2960,7 @@ Special thanks to our community contributors: - [`SIMD`](/mojo/stdlib/builtin/simd/SIMD) now implements the `__rmod__()` method. ([@bgreni](https://github.com/bgreni), fixes - [#1482](https://github.com/modularml/mojo/issues/1482)) + [#1482](https://github.com/modular/mojo/issues/1482)) - [`bool(None)`](/mojo/stdlib/builtin/bool/bool-function) is now implemented. ([@zhoujingya](https://github.com/zhoujingya)) @@ -2995,7 +2995,7 @@ Special thanks to our community contributors: division, modulo, and left and right shift operators, including the in-place and reverse variants. ([@LJ-9801](https://github.com/LJ-9801), fixes - [#2224](https://github.com/modularml/mojo/issues/2224)) + [#2224](https://github.com/modular/mojo/issues/2224)) - Added checked arithmetic operations for `SIMD` integers. @@ -3027,7 +3027,7 @@ Special thanks to our community contributors: - Added [`os.remove()`](/mojo/stdlib/os/os/remove) and [`os.unlink()`](/mojo/stdlib/os/os/unlink) for deleting files. ([@artemiogr97](https://github.com/artemiogr97), fixes - [#2306](https://github.com/modularml/mojo/issues/2306)) + [#2306](https://github.com/modular/mojo/issues/2306)) #### 🦋 Changed @@ -3047,15 +3047,15 @@ Special thanks to our community contributors: ``` ([@lsh](https://github.com/lsh), fixes - [#2179](https://github.com/modularml/mojo/issues/2179)) + [#2179](https://github.com/modular/mojo/issues/2179)) - Per the accepted community proposal, [Standardize the representation of byte sequence as a sequence of unsigned - 8-bit integers](https://github.com/modularml/mojo/blob/main/proposals/byte-as-uint8.md), + 8-bit integers](https://github.com/modular/mojo/blob/main/proposals/byte-as-uint8.md), began transition to using `UInt8` by changing the data pointer of `Error` to `DTypePointer[DType.uint8]`. ([@gabrieldemarmiesse](https://github.com/gabrieldemarmiesse), contributes - towards [#2317](https://github.com/modularml/mojo/issues/2317)) + towards [#2317](https://github.com/modular/mojo/issues/2317)) - Continued transition to `UnsafePointer` from the legacy `Pointer` type in various standard library APIs and internals. @@ -3127,56 +3127,56 @@ Special thanks to our community contributors: #### 🛠️ Fixed -- [#516](https://github.com/modularml/mojo/issues/516) and - [#1817](https://github.com/modularml/mojo/issues/1817) and many others, e.g. +- [#516](https://github.com/modular/mojo/issues/516) and + [#1817](https://github.com/modular/mojo/issues/1817) and many others, e.g. "Can't create a function that returns two strings." -- [#1178](https://github.com/modularml/mojo/issues/1178) (os/kern) failure (5). +- [#1178](https://github.com/modular/mojo/issues/1178) (os/kern) failure (5). -- [#1609](https://github.com/modularml/mojo/issues/1609) alias with +- [#1609](https://github.com/modular/mojo/issues/1609) alias with `DynamicVector[Tuple[Int]]` fails. -- [#1987](https://github.com/modularml/mojo/issues/1987) Defining `main` +- [#1987](https://github.com/modular/mojo/issues/1987) Defining `main` in a Mojo package is an error, for now. This is not intended to work yet, erroring for now will help to prevent accidental undefined behavior. -- [#1215](https://github.com/modularml/mojo/issues/1215) and - [#1949](https://github.com/modularml/mojo/issues/1949) The Mojo LSP server no +- [#1215](https://github.com/modular/mojo/issues/1215) and + [#1949](https://github.com/modular/mojo/issues/1949) The Mojo LSP server no longer cuts off hover previews for functions with functional arguments, parameters, or results. -- [#1901](https://github.com/modularml/mojo/issues/1901) Fixed Mojo LSP and +- [#1901](https://github.com/modular/mojo/issues/1901) Fixed Mojo LSP and documentation generation handling of inout arguments. -- [#1913](https://github.com/modularml/mojo/issues/1913) - `0__` no longer +- [#1913](https://github.com/modular/mojo/issues/1913) - `0__` no longer crashes the Mojo parser. -- [#1924](https://github.com/modularml/mojo/issues/1924) JIT debugging on Mac +- [#1924](https://github.com/modular/mojo/issues/1924) JIT debugging on Mac has been fixed. -- [#1941](https://github.com/modularml/mojo/issues/1941) Mojo variadic arguments +- [#1941](https://github.com/modular/mojo/issues/1941) Mojo variadic arguments don't work with non-trivial register-only types. -- [#1963](https://github.com/modularml/mojo/issues/1963) `a!=0` is now parsed +- [#1963](https://github.com/modular/mojo/issues/1963) `a!=0` is now parsed and formatted correctly by `mojo format`. -- [#1676](https://github.com/modularml/mojo/issues/1676) Fix a crash related to +- [#1676](https://github.com/modular/mojo/issues/1676) Fix a crash related to `@value` decorator and structs with empty body. -- [#1917](https://github.com/modularml/mojo/issues/1917) Fix a crash after +- [#1917](https://github.com/modular/mojo/issues/1917) Fix a crash after syntax error during tuple creation. -- [#2006](https://github.com/modularml/mojo/issues/2006) The Mojo LSP now +- [#2006](https://github.com/modular/mojo/issues/2006) The Mojo LSP now properly supports signature types with named arguments and parameters. -- [#2007](https://github.com/modularml/mojo/issues/2007) and - [#1997](https://github.com/modularml/mojo/issues/1997) The Mojo LSP no longer +- [#2007](https://github.com/modular/mojo/issues/2007) and + [#1997](https://github.com/modular/mojo/issues/1997) The Mojo LSP no longer crashes on certain types of closures. -- [#1675](https://github.com/modularml/mojo/issues/1675) Ensure `@value` +- [#1675](https://github.com/modular/mojo/issues/1675) Ensure `@value` decorator fails gracefully after duplicate field error. -- [#2068](https://github.com/modularml/mojo/issues/2068) +- [#2068](https://github.com/modular/mojo/issues/2068) Fix `SIMD.reduce()` for size_out == 2. ([@soraros](https://github.com/soraros)) @@ -3189,7 +3189,7 @@ This release doesn't include any changes to Mojo. ### 🔥 Legendary - The Mojo standard library is now open source! Check out the - [README](https://github.com/modularml/mojo/blob/nightly/stdlib/README.md) + [README](https://github.com/modular/mojo/blob/nightly/stdlib/README.md) for everything you need to get started. - Structs and other nominal types are now allowed to implicitly conform to @@ -3258,7 +3258,7 @@ This release doesn't include any changes to Mojo. - `let` declarations now produce a compile time error instead of a warning, our next step in [removing let - declarations](https://github.com/modularml/mojo/blob/main/proposals/remove-let-decls.md). + declarations](https://github.com/modular/mojo/blob/main/proposals/remove-let-decls.md). The compiler still recognizes the `let` keyword for now in order to produce a good error message, but that will be removed in subsequent releases. @@ -3562,27 +3562,27 @@ fixed in a future release. #### 🛠️ Fixed -- [#1362](https://github.com/modularml/mojo/issues/1362) - Parameter inference +- [#1362](https://github.com/modular/mojo/issues/1362) - Parameter inference now recursively matches function types. -- [#951](https://github.com/modularml/mojo/issues/951) - Functions that were +- [#951](https://github.com/modular/mojo/issues/951) - Functions that were both `async` and `@always_inline` incorrectly errored. -- [#1858](https://github.com/modularml/mojo/issues/1858) - Trait with parametric +- [#1858](https://github.com/modular/mojo/issues/1858) - Trait with parametric methods regression. -- [#1892](https://github.com/modularml/mojo/issues/1892) - Forbid unsupported +- [#1892](https://github.com/modular/mojo/issues/1892) - Forbid unsupported decorators on traits. -- [#1735](https://github.com/modularml/mojo/issues/1735) - Trait-typed values +- [#1735](https://github.com/modular/mojo/issues/1735) - Trait-typed values are incorrectly considered equal. -- [#1909](https://github.com/modularml/mojo/issues/1909) - Crash due to nested +- [#1909](https://github.com/modular/mojo/issues/1909) - Crash due to nested import in unreachable block. -- [#1921](https://github.com/modularml/mojo/issues/1921) - Parser crashes +- [#1921](https://github.com/modular/mojo/issues/1921) - Parser crashes binding Reference to lvalue with subtype lifetime. -- [#1945](https://github.com/modularml/mojo/issues/1945) - `Optional[T].or_else()` +- [#1945](https://github.com/modular/mojo/issues/1945) - `Optional[T].or_else()` should return `T` instead of `Optional[T]`. -- [#1940](https://github.com/modularml/mojo/issues/1940) - Constrain +- [#1940](https://github.com/modular/mojo/issues/1940) - Constrain `math.copysign` to floating point or integral types. -- [#1838](https://github.com/modularml/mojo/issues/1838) - Variadic `print` +- [#1838](https://github.com/modular/mojo/issues/1838) - Variadic `print` does not work when specifying `end=""` -- [#1826](https://github.com/modularml/mojo/issues/1826) - The `SIMD.reduce` +- [#1826](https://github.com/modular/mojo/issues/1826) - The `SIMD.reduce` methods correctly handle edge cases where `size_out >= size`. ## v24.1.1 (2024-03-18) @@ -3936,7 +3936,7 @@ installation issues. Otherwise it is functionally identical to Mojo 24.1. ### 🦋 Changed - As another step towards [removing let - declarations](https://github.com/modularml/mojo/blob/main/proposals/remove-let-decls.md) + declarations](https://github.com/modular/mojo/blob/main/proposals/remove-let-decls.md) we have removed support for let declarations inside the compiler. To ease migration, we parse `let` declarations as a `var` declaration so your code won't break. We emit a warning about this, but please switch your code to @@ -4036,72 +4036,72 @@ experience without dedicated sugar. ### 🛠️ Fixed -- [#435](https://github.com/modularml/mojo/issues/435) +- [#435](https://github.com/modular/mojo/issues/435) Structs with Self type don't always work. -- [#1540](https://github.com/modularml/mojo/issues/1540) +- [#1540](https://github.com/modular/mojo/issues/1540) Crash in register_passable self referencing struct. -- [#1664](https://github.com/modularml/mojo/issues/1664) - Improve error +- [#1664](https://github.com/modular/mojo/issues/1664) - Improve error message when `StaticTuple` is constructed with a negative size for the number of elements. -- [#1679](https://github.com/modularml/mojo/issues/1679) - crash on SIMD of zero +- [#1679](https://github.com/modular/mojo/issues/1679) - crash on SIMD of zero elements. - Various crashes on invalid code: - [#1230](https://github.com/modularml/mojo/issues/1230), - [#1699](https://github.com/modularml/mojo/issues/1699), - [#1708](https://github.com/modularml/mojo/issues/1708) -- [#1223](https://github.com/modularml/mojo/issues/1223) - Crash when parametric + [#1230](https://github.com/modular/mojo/issues/1230), + [#1699](https://github.com/modular/mojo/issues/1699), + [#1708](https://github.com/modular/mojo/issues/1708) +- [#1223](https://github.com/modular/mojo/issues/1223) - Crash when parametric function is passed as (runtime) argument. The parser now errors out instead. -- [#1530](https://github.com/modularml/mojo/issues/1530) - Crash during +- [#1530](https://github.com/modular/mojo/issues/1530) - Crash during diagnostic emission for parameter deduction failure. -- [#1538](https://github.com/modularml/mojo/issues/1538) and [#1607]( - https://github.com/modularml/mojo/issues/1607) - Crash when returning type +- [#1538](https://github.com/modular/mojo/issues/1538) and [#1607]( + https://github.com/modular/mojo/issues/1607) - Crash when returning type value instead of instance of expected type. This is a common mistake and the error now includes a hint to point users to the problem. -- [#1613](https://github.com/modularml/mojo/issues/1613) - Wrong type name in +- [#1613](https://github.com/modular/mojo/issues/1613) - Wrong type name in error for incorrect `self` argument type in trait method declaration. -- [#1670](https://github.com/modularml/mojo/issues/1670) - Crash on implicit +- [#1670](https://github.com/modular/mojo/issues/1670) - Crash on implicit conversion in a global variable declaration. -- [#1741](https://github.com/modularml/mojo/issues/1741) - Mojo documentation +- [#1741](https://github.com/modular/mojo/issues/1741) - Mojo documentation generation doesn't show `inout`/`owned` on variadic arguments. -- [#1621](https://github.com/modularml/mojo/issues/1621) - VS Code does not +- [#1621](https://github.com/modular/mojo/issues/1621) - VS Code does not highlight `raises` and `capturing` in functional type expressions. -- [#1617](https://github.com/modularml/mojo/issues/1617) - VS Code does not +- [#1617](https://github.com/modular/mojo/issues/1617) - VS Code does not highlight `fn` in specific contexts. -- [#1740](https://github.com/modularml/mojo/issues/1740) - LSP shows unrelated +- [#1740](https://github.com/modular/mojo/issues/1740) - LSP shows unrelated info when hovering over a struct. -- [#1238](https://github.com/modularml/mojo/issues/1238) - File shadows Mojo +- [#1238](https://github.com/modular/mojo/issues/1238) - File shadows Mojo package path. -- [#1429](https://github.com/modularml/mojo/issues/1429) - Crash when using +- [#1429](https://github.com/modular/mojo/issues/1429) - Crash when using nested import statement. -- [#1322](https://github.com/modularml/mojo/issues/1322) - Crash when missing +- [#1322](https://github.com/modular/mojo/issues/1322) - Crash when missing types in variadic argument. -- [#1314](https://github.com/modularml/mojo/issues/1314) - Typecheck error when +- [#1314](https://github.com/modular/mojo/issues/1314) - Typecheck error when binding alias to parametric function with default argument. -- [#1248](https://github.com/modularml/mojo/issues/1248) - Crash when importing +- [#1248](https://github.com/modular/mojo/issues/1248) - Crash when importing from file the same name as another file in the search path. -- [#1354](https://github.com/modularml/mojo/issues/1354) - Crash when importing +- [#1354](https://github.com/modular/mojo/issues/1354) - Crash when importing from local package. -- [#1488](https://github.com/modularml/mojo/issues/1488) - Crash when setting +- [#1488](https://github.com/modular/mojo/issues/1488) - Crash when setting generic element field. -- [#1476](https://github.com/modularml/mojo/issues/1476) - Crash in interpreter +- [#1476](https://github.com/modular/mojo/issues/1476) - Crash in interpreter when calling functions in parameter context. -- [#1537](https://github.com/modularml/mojo/issues/1537) - Crash when copying +- [#1537](https://github.com/modular/mojo/issues/1537) - Crash when copying parameter value. -- [#1546](https://github.com/modularml/mojo/issues/1546) - Modify nested vector +- [#1546](https://github.com/modular/mojo/issues/1546) - Modify nested vector element crashes parser. -- [#1558](https://github.com/modularml/mojo/issues/1558) - Invalid import causes +- [#1558](https://github.com/modular/mojo/issues/1558) - Invalid import causes parser to crash. -- [#1562](https://github.com/modularml/mojo/issues/1562) - Crash when calling +- [#1562](https://github.com/modular/mojo/issues/1562) - Crash when calling parametric type member function. -- [#1577](https://github.com/modularml/mojo/issues/1577) - Crash when using +- [#1577](https://github.com/modular/mojo/issues/1577) - Crash when using unresolved package as a variable. -- [#1579](https://github.com/modularml/mojo/issues/1579) - Member access into +- [#1579](https://github.com/modular/mojo/issues/1579) - Member access into type instances causes a crash. -- [#1602](https://github.com/modularml/mojo/issues/1602) - Interpreter failure +- [#1602](https://github.com/modular/mojo/issues/1602) - Interpreter failure when constructing strings at compile time. -- [#1696](https://github.com/modularml/mojo/issues/1696) - Fixed an issue that +- [#1696](https://github.com/modular/mojo/issues/1696) - Fixed an issue that caused syntax highlighting to occasionally fail. -- [#1549](https://github.com/modularml/mojo/issues/1549) - Fixed an issue when +- [#1549](https://github.com/modular/mojo/issues/1549) - Fixed an issue when the shift amount is out of range in `SIMD.shift_left` and `SIMD.shift_right`. ## v0.7.0 (2024-01-25) @@ -4447,7 +4447,7 @@ experience without dedicated sugar. - The `simd_width` and `dtype` parameters of `polynomial_evaluate` have been switched. Based on the request in - [#1587](https://github.com/modularml/mojo/issues/1587), the + [#1587](https://github.com/modular/mojo/issues/1587), the `polynomial_evaluate` function has also been extended so that the `coefficients` parameter can take either a either a [`StaticTuple`](/mojo/stdlib/utils/static_tuple/StaticTuple) or a @@ -4458,50 +4458,50 @@ experience without dedicated sugar. ### 🛠️ Fixed -- [#1595](https://github.com/modularml/mojo/issues/1595) - Improve error message +- [#1595](https://github.com/modular/mojo/issues/1595) - Improve error message when trying to materialize `IntLiteral` in runtime code. - Raising an error from the initializer of a memory-only type now works correctly in the presence of complex control flow. Previously Mojo could run the destructor on `self` before it was initialized when exiting with an error. -- [#1096](https://github.com/modularml/mojo/issues/1096) - Improve warning +- [#1096](https://github.com/modular/mojo/issues/1096) - Improve warning messages for dead code in conditionals like `or` expressions. -- [#1419](https://github.com/modularml/mojo/issues/1419) - Fix assertion failure +- [#1419](https://github.com/modular/mojo/issues/1419) - Fix assertion failure with uninitialized lattice values. -- [#1402](https://github.com/modularml/mojo/issues/1402) - Fix movable trait not +- [#1402](https://github.com/modular/mojo/issues/1402) - Fix movable trait not detected on recursive struct implemented with `AnyPointer`. -- [#1399](https://github.com/modularml/mojo/issues/1399) - Fix parser crash when +- [#1399](https://github.com/modular/mojo/issues/1399) - Fix parser crash when a parameter type in a struct that implements a trait is misspelled. -- [#1152](https://github.com/modularml/mojo/issues/1152) - Allow mutable `self` +- [#1152](https://github.com/modular/mojo/issues/1152) - Allow mutable `self` argument when overloading operators using dunder methods. -- [#1493](https://github.com/modularml/mojo/issues/1493) - Fix crash in +- [#1493](https://github.com/modular/mojo/issues/1493) - Fix crash in `DynamicVector` copy constructor in certain situations. -- [#1316](https://github.com/modularml/mojo/issues/1316) - The `benchmark.keep` +- [#1316](https://github.com/modular/mojo/issues/1316) - The `benchmark.keep` function now properly handles vector types. -- [#1505](https://github.com/modularml/mojo/issues/1505) - The `simd.shuffle` +- [#1505](https://github.com/modular/mojo/issues/1505) - The `simd.shuffle` operation now works on 64 element permutations. -- [#1355](https://github.com/modularml/mojo/issues/1355) - Fix `String.find()` +- [#1355](https://github.com/modular/mojo/issues/1355) - Fix `String.find()` returning wrong value when starting index is non-zero. -- [#1367](https://github.com/modularml/mojo/issues/1367) - Fix `String.replace()` +- [#1367](https://github.com/modular/mojo/issues/1367) - Fix `String.replace()` returning incorrect results for multi-character search strings. -- [#1535](https://github.com/modularml/mojo/issues/1535) - Invalid error `field +- [#1535](https://github.com/modular/mojo/issues/1535) - Invalid error `field 'w.x.y' destroyed out of the middle of a value, preventing the overall value from being destroyed`. -- [#1475](https://github.com/modularml/mojo/issues/1475) - Assertion failure in +- [#1475](https://github.com/modular/mojo/issues/1475) - Assertion failure in nested loop. -- [#1591](https://github.com/modularml/mojo/issues/1591) - Assertion failure +- [#1591](https://github.com/modular/mojo/issues/1591) - Assertion failure when using `AnyType` struct member. -- [#1503](https://github.com/modularml/mojo/issues/1503) - Rename the mojo build +- [#1503](https://github.com/modular/mojo/issues/1503) - Rename the mojo build of LLDB to `mojo-lldb`, to prevent name collisions with the system's LLDB. -- [#1542](https://github.com/modularml/mojo/issues/1542) - `@unroll` does not +- [#1542](https://github.com/modular/mojo/issues/1542) - `@unroll` does not accept alias as unroll factor. -- [#1443](https://github.com/modularml/mojo/issues/1443) - Compiler crash on +- [#1443](https://github.com/modular/mojo/issues/1443) - Compiler crash on variadic list of traits. -- [#1604](https://github.com/modularml/mojo/issues/1604) - Variable of trivial +- [#1604](https://github.com/modular/mojo/issues/1604) - Variable of trivial type not destroyed by transferring ownership. -- [#1341](https://github.com/modularml/mojo/issues/1341) - Segmentation fault +- [#1341](https://github.com/modular/mojo/issues/1341) - Segmentation fault when passing closures around. -- [#217](https://github.com/modularml/mojo/issues/217) - Closure state is +- [#217](https://github.com/modular/mojo/issues/217) - Closure state is stack allocated. ## v0.6.1 (2023-12-18) @@ -4563,23 +4563,23 @@ experience without dedicated sugar. ### 🛠️ Fixed -- [#1421](https://github.com/modularml/mojo/issues/1421) - Fixed a crash when +- [#1421](https://github.com/modular/mojo/issues/1421) - Fixed a crash when using Tuples in the REPL. -- [#222](https://github.com/modularml/mojo/issues/222) - Generate an error +- [#222](https://github.com/modular/mojo/issues/222) - Generate an error for obviously self recursive functions. -- [#1408](https://github.com/modularml/mojo/issues/1408) - Fix overload +- [#1408](https://github.com/modular/mojo/issues/1408) - Fix overload resolution when candidates can return generic types. -- [#1413](https://github.com/modularml/mojo/issues/1413) and - [#1395](https://github.com/modularml/mojo/issues/1395) - Do not crash when +- [#1413](https://github.com/modular/mojo/issues/1413) and + [#1395](https://github.com/modular/mojo/issues/1395) - Do not crash when re-declaring a builtin declaration. -- [#1307](https://github.com/modularml/mojo/issues/1307) - Fix compatibility of +- [#1307](https://github.com/modular/mojo/issues/1307) - Fix compatibility of function signatures that only differ in default argument values. -- [#1380](https://github.com/modularml/mojo/issues/1380) - Fix printing +- [#1380](https://github.com/modular/mojo/issues/1380) - Fix printing of empty `String`. ## v0.6.0 (2023-12-04) @@ -4714,7 +4714,7 @@ experience without dedicated sugar. manual (now deprecated). Plus, the entire Mojo Manual and other Mojo docs are now [open-sourced on - GitHub](https://github.com/modularml/mojo/tree/main/docs), and we'd love + GitHub](https://github.com/modular/mojo/tree/main/docs), and we'd love to accept contributions to help us improve them! - Mojo now supports partial automatic parameterization: when a function is @@ -4882,7 +4882,7 @@ the previous "read to EOF" behavior when size is negative. - The Mojo Language Server now implements the Document Symbols request. IDEs use this to provide support for **Outline View** and **Go to Symbol**. This - addresses [Issue #960](https://github.com/modularml/mojo/issues/960). + addresses [Issue #960](https://github.com/modular/mojo/issues/960). - The Mojo Language Server now shows documentation when code completing modules or packages in `import` statements. @@ -4946,31 +4946,31 @@ the previous "read to EOF" behavior when size is negative. ### 🛠️ Fixed -- [#734](https://github.com/modularml/mojo/issues/734) - Consumption of struct +- [#734](https://github.com/modular/mojo/issues/734) - Consumption of struct works only for types with a `__del__` method. -- [#910](https://github.com/modularml/mojo/issues/910) - Parser crash when +- [#910](https://github.com/modular/mojo/issues/910) - Parser crash when using memory-only generic type as return of function that `raise`s. -- [#1060](https://github.com/modularml/mojo/issues/1060) - Mojo happily parses +- [#1060](https://github.com/modular/mojo/issues/1060) - Mojo happily parses code that has messed up indentation -- [#1159](https://github.com/modularml/mojo/issues/1159) - The language server +- [#1159](https://github.com/modular/mojo/issues/1159) - The language server doesn't warn about bad return type. -- [#1166](https://github.com/modularml/mojo/issues/1166) - warning: unreachable +- [#1166](https://github.com/modular/mojo/issues/1166) - warning: unreachable code after return statement with context manager -- [#1098](https://github.com/modularml/mojo/issues/1098) - The language server +- [#1098](https://github.com/modular/mojo/issues/1098) - The language server doesn't highlight properties of PythonObjects correctly. -- [#1153](https://github.com/modularml/mojo/issues/1153) - The language server +- [#1153](https://github.com/modular/mojo/issues/1153) - The language server crashes when parsing an invalid multi-nested module import. -- [#1236](https://github.com/modularml/mojo/issues/1236) - The language server +- [#1236](https://github.com/modular/mojo/issues/1236) - The language server doesn't show autocomplete in if statements. -- [#1246](https://github.com/modularml/mojo/issues/1246) - Warning diagnostics +- [#1246](https://github.com/modular/mojo/issues/1246) - Warning diagnostics are transient in the presence of caching. ### Known Issue @@ -5225,32 +5225,32 @@ the previous "read to EOF" behavior when size is negative. ### 🛠️ Fixed -- [#532](https://github.com/modularml/mojo/issues/532) - Compiler optimizing +- [#532](https://github.com/modular/mojo/issues/532) - Compiler optimizing while True loop away -- [#760](https://github.com/modularml/mojo/issues/760) - Compilation error: +- [#760](https://github.com/modular/mojo/issues/760) - Compilation error: 'hlcf.for.yield' op specifies 0 branch inputs but target expected 1 along control-flow edge from here -- [#849](https://github.com/modularml/mojo/issues/849) - The `Tensor` type is +- [#849](https://github.com/modular/mojo/issues/849) - The `Tensor` type is now initialized with zeros at construction time. -- [#912](https://github.com/modularml/mojo/issues/912) - Invalid load for +- [#912](https://github.com/modular/mojo/issues/912) - Invalid load for `__get_address_as_lvalue`. -- [#916](https://github.com/modularml/mojo/issues/916) - Parser crash when +- [#916](https://github.com/modular/mojo/issues/916) - Parser crash when specifying default values for `inout` arguments. -- [#943](https://github.com/modularml/mojo/issues/943) - Mojo hangs if you +- [#943](https://github.com/modular/mojo/issues/943) - Mojo hangs if you use continue in the nested loop -- [#957](https://github.com/modularml/mojo/issues/957) - Parser crash when a +- [#957](https://github.com/modular/mojo/issues/957) - Parser crash when a function call with variadic arguments of a memory-only type is evaluated at compile time. -- [#990](https://github.com/modularml/mojo/issues/990) - Fixes rounding +- [#990](https://github.com/modular/mojo/issues/990) - Fixes rounding issue with floor division with negative numerator. -- [#1018](https://github.com/modularml/mojo/issues/1018) - In some cases the +- [#1018](https://github.com/modular/mojo/issues/1018) - In some cases the sort function was returning invalid results. This release fixes some of these corner cases. -- [#1010](https://github.com/modularml/mojo/issues/1010) - Initializing tensor +- [#1010](https://github.com/modular/mojo/issues/1010) - Initializing tensor in alias declaration results in crash. -- [#1110](https://github.com/modularml/mojo/issues/1110) - The `time.now()` +- [#1110](https://github.com/modular/mojo/issues/1110) - The `time.now()` function now returns nanoseconds across all operating systems. -- [#1115](https://github.com/modularml/mojo/issues/1115) - cannot load +- [#1115](https://github.com/modular/mojo/issues/1115) - cannot load non-register passable type into SSA register. ## v0.4.0 for Mac (2023-10-19) @@ -5429,33 +5429,33 @@ the previous "read to EOF" behavior when size is negative. ### 🛠️ Fixed -- [#794](https://github.com/modularml/mojo/issues/794) - Parser crash when +- [#794](https://github.com/modular/mojo/issues/794) - Parser crash when using the `in` operator. -- [#936](https://github.com/modularml/mojo/issues/936) - The `Int` constructor +- [#936](https://github.com/modular/mojo/issues/936) - The `Int` constructor now accepts other `Int` instances. -- [#921](https://github.com/modularml/mojo/issues/921) - Better error message +- [#921](https://github.com/modular/mojo/issues/921) - Better error message when running `mojo` on a module with no `main` function. -- [#556](https://github.com/modularml/mojo/issues/556) - UInt64s are now +- [#556](https://github.com/modular/mojo/issues/556) - UInt64s are now printed correctly. -- [#804](https://github.com/modularml/mojo/issues/804) - Emit error instead of +- [#804](https://github.com/modular/mojo/issues/804) - Emit error instead of crashing when passing variadic arguments of unsupported types. -- [#833](https://github.com/modularml/mojo/issues/833) - Parser crash when +- [#833](https://github.com/modular/mojo/issues/833) - Parser crash when assigning module value. -- [#752](https://github.com/modularml/mojo/issues/752) - Parser crash when +- [#752](https://github.com/modular/mojo/issues/752) - Parser crash when calling async def. -- [#711](https://github.com/modularml/mojo/issues/711) - The overload resolution +- [#711](https://github.com/modular/mojo/issues/711) - The overload resolution logic now correctly prioritizes instance methods over static methods (if candidates are an equally good match otherwise), and no longer crashed if a static method has a `Self` type as its first argument. -- [#859](https://github.com/modularml/mojo/issues/859) - Fix confusing error and +- [#859](https://github.com/modular/mojo/issues/859) - Fix confusing error and documentation of the `rebind` builtin. -- [#753](https://github.com/modularml/mojo/issues/753) - Direct use of LLVM +- [#753](https://github.com/modular/mojo/issues/753) - Direct use of LLVM dialect produces strange errors in the compiler. -- [#926](https://github.com/modularml/mojo/issues/926) - Fixes an issue that +- [#926](https://github.com/modular/mojo/issues/926) - Fixes an issue that occurred when a function with a return type of `StringRef` raised an error. When the function raised an error, it incorrectly returned the string value of that error. -- [#536](https://github.com/modularml/mojo/issues/536) - Report More information +- [#536](https://github.com/modular/mojo/issues/536) - Report More information on python exception. ## v0.3.1 (2023-09-28) @@ -5466,15 +5466,15 @@ installing the previous versions of the SDK, this release may be for you. ### 🛠️ Fixed -- [#538](https://github.com/modularml/mojo/issues/538) - Installation hangs +- [#538](https://github.com/modular/mojo/issues/538) - Installation hangs during the testing phase. This issue occurs on machines with a low number of CPU cores, such as free AWS EC2 instances and GitHub Codespaces. -- [#590](https://github.com/modularml/mojo/issues/590) - Installation fails +- [#590](https://github.com/modular/mojo/issues/590) - Installation fails with a “failed to run python” message. -- [#672](https://github.com/modularml/mojo/issues/672) - Language server hangs +- [#672](https://github.com/modular/mojo/issues/672) - Language server hangs on code completion. Related to #538, this occurs on machines with a low number of CPU cores. -- [#913](https://github.com/modularml/mojo/issues/913) - In the REPL and Jupyter +- [#913](https://github.com/modular/mojo/issues/913) - In the REPL and Jupyter notebooks, inline comments were being parsed incorrectly. ## v0.3.0 (2023-09-21) @@ -5576,7 +5576,7 @@ Code](https://marketplace.visualstudio.com/items?itemName=modular-mojotools.vsco - The Mojo Language Server now supports top-level code completions, enabling completion when typing a reference to a variable, type, etc. This resolves - [#679](https://github.com/modularml/mojo/issues/679). + [#679](https://github.com/modular/mojo/issues/679). - The Mojo REPL now colorizes the resultant variables to help distinguish input expressions from the output variables. @@ -5615,19 +5615,19 @@ Code](https://marketplace.visualstudio.com/items?itemName=modular-mojotools.vsco ### 🛠️ Fixed -- [#503](https://github.com/modularml/mojo/issues/503) - Improve error message +- [#503](https://github.com/modular/mojo/issues/503) - Improve error message for failure lowering `kgen.param.constant`. -- [#554](https://github.com/modularml/mojo/issues/554) - Alias of static tuple +- [#554](https://github.com/modular/mojo/issues/554) - Alias of static tuple fails to expand. -- [#500](https://github.com/modularml/mojo/issues/500) - Call expansion failed +- [#500](https://github.com/modular/mojo/issues/500) - Call expansion failed due to verifier error. -- [#422](https://github.com/modularml/mojo/issues/422) - Incorrect comment +- [#422](https://github.com/modular/mojo/issues/422) - Incorrect comment detection in multiline strings. -- [#729](https://github.com/modularml/mojo/issues/740) - Improve messaging on +- [#729](https://github.com/modular/mojo/issues/740) - Improve messaging on how to exit the REPL. -- [#756](https://github.com/modularml/mojo/issues/756) - Fix initialization +- [#756](https://github.com/modular/mojo/issues/756) - Fix initialization errors of the VS Code extension. -- [#575](https://github.com/modularml/mojo/issues/575) - Build LLDB/REPL with +- [#575](https://github.com/modular/mojo/issues/575) - Build LLDB/REPL with libedit for a nicer editing experience in the terminal. ## v0.2.1 (2023-09-07) @@ -5690,17 +5690,17 @@ All earlier releases were considered version 0.1. been changed to enable type inference. Now it's possible to write `rotate_right[shift_val](simd_val)` and have the `dtype` and `simd_width` inferred from the argument. This addresses - [Issue #528](https://github.com/modularml/mojo/issues/528). + [Issue #528](https://github.com/modular/mojo/issues/528). ### 🛠️ Fixed - Fixed a bug causing the parser to crash when the `with` statement was written without a colon. - This addresses [Issue #529](https://github.com/modularml/mojo/issues/529). + This addresses [Issue #529](https://github.com/modular/mojo/issues/529). - Incorrect imports no longer crash when there are other errors at the top level of a module. This fixes [Issue - #531](https://github.com/modularml/mojo/issues/531). + #531](https://github.com/modular/mojo/issues/531). ## August 2023 @@ -5775,15 +5775,15 @@ All earlier releases were considered version 0.1. #### 🛠️ Fixed - Fixed issues with print formatting for `DType.uint16` and `DType.int16`. -- [Issue #499](https://github.com/modularml/mojo/issues/499) - Two new +- [Issue #499](https://github.com/modular/mojo/issues/499) - Two new `rotate_right` and `rotate_left` functions have been added to the SIMD module. -- [Issue #429](https://github.com/modularml/mojo/issues/429) - You can now +- [Issue #429](https://github.com/modular/mojo/issues/429) - You can now construct a `Bool` from a `SIMD` type whose element-type is `DType.bool`. -- [Issue #350](https://github.com/modularml/mojo/issues/350) - Confusing Matrix +- [Issue #350](https://github.com/modular/mojo/issues/350) - Confusing Matrix implementation -- [Issue #349](https://github.com/modularml/mojo/issues/349) - Missing load_tr +- [Issue #349](https://github.com/modular/mojo/issues/349) - Missing load_tr in struct Matrix -- [Issue #501](https://github.com/modularml/mojo/issues/501) - Missing syntax +- [Issue #501](https://github.com/modular/mojo/issues/501) - Missing syntax error messages in Python expressions. ### 2023-08-09 @@ -5847,7 +5847,7 @@ All earlier releases were considered version 0.1. #### 🛠️ Fixed -- [Issue #53](https://github.com/modularml/mojo/issues/53) - `Int` now +- [Issue #53](https://github.com/modular/mojo/issues/53) - `Int` now implements true division with the `/` operator. Similar to Python, this returns a 64-bit floating point number. The corresponding in-place operator, `/=`, has the same semantics as `//=`. @@ -5887,10 +5887,10 @@ All earlier releases were considered version 0.1. #### 🛠️ Fixed -- [Issue #437](https://github.com/modularml/mojo/issues/437) - Range can now +- [Issue #437](https://github.com/modular/mojo/issues/437) - Range can now be instantiated with a PythonObject. -- [Issue #288](https://github.com/modularml/mojo/issues/288) - Python strings +- [Issue #288](https://github.com/modular/mojo/issues/288) - Python strings can now be safely copied. ### 2023-07-20 @@ -5899,7 +5899,7 @@ All earlier releases were considered version 0.1. - Mojo now includes a `Limits` module, which contains functions to get the max and min values representable by a type, as requested in [Issue - #51](https://github.com/modularml/mojo/issues/51). The following functions + #51](https://github.com/modular/mojo/issues/51). The following functions moved from `Math` to `Limits`: `inf()`, `neginf()`, `isinf()`, `isfinite()`. - Mojo decorators are now distinguished between "signature" and "body" @@ -5966,14 +5966,14 @@ All earlier releases were considered version 0.1. - Reverted the feature from 2023-02-13 that allowed unqualified struct members. Use the `Self` keyword to conveniently access struct members with bound parameters instead. This was required to fix - [Issue #260](https://github.com/modularml/mojo/issues/260). + [Issue #260](https://github.com/modular/mojo/issues/260). - Updated the RayTracing notebook: added step 5 to create specular lighting for more realistic images and step 6 to add a background image. #### 🛠️ Fixed -- [Issue #260](https://github.com/modularml/mojo/issues/260) - Definitions +- [Issue #260](https://github.com/modular/mojo/issues/260) - Definitions inside structs no longer shadow definitions outside of struct definitions. ### 2023-07-12 @@ -6010,7 +6010,7 @@ All earlier releases were considered version 0.1. - The walrus operator now works in if/while statements without parentheses, e.g. `if x := function():`. -- [Issue #428](https://github.com/modularml/mojo/issues/428) - The +- [Issue #428](https://github.com/modular/mojo/issues/428) - The `FloatLiteral` and `SIMD` types now support conversion to `Int` via the `to_int` or `__int__` method calls. The behavior matches that of Python, which rounds towards zero. @@ -6040,21 +6040,21 @@ All earlier releases were considered version 0.1. #### 🛠️ Fixed -- [Issue #253](https://github.com/modularml/mojo/issues/253) - Issue +- [Issue #253](https://github.com/modular/mojo/issues/253) - Issue when accessing a struct member alias without providing parameters. -- [Issue #404](https://github.com/modularml/mojo/issues/404) - The docs now use +- [Issue #404](https://github.com/modular/mojo/issues/404) - The docs now use `snake_case` for variable names, which more closely conforms to Python's style. -- [Issue #379](https://github.com/modularml/mojo/issues/379) - Tuple +- [Issue #379](https://github.com/modular/mojo/issues/379) - Tuple limitations have been addressed and multiple return values are now supported, even without parentheses. -- [Issue #347](https://github.com/modularml/mojo/issues/347) - Tuples no longer +- [Issue #347](https://github.com/modular/mojo/issues/347) - Tuples no longer require parentheses. -- [Issue #320](https://github.com/modularml/mojo/issues/320) - Python objects +- [Issue #320](https://github.com/modular/mojo/issues/320) - Python objects are now traversable via `for` loops. ## June 2023 @@ -6080,18 +6080,18 @@ All earlier releases were considered version 0.1. #### 🛠️ Fixed -- [Issue #229](https://github.com/modularml/mojo/issues/229) - Issue when +- [Issue #229](https://github.com/modular/mojo/issues/229) - Issue when throwing an exception from `__init__` before all fields are initialized. -- [Issue #74](https://github.com/modularml/mojo/issues/74) - Struct +- [Issue #74](https://github.com/modular/mojo/issues/74) - Struct definition with recursive reference crashes. -- [Issue #285](https://github.com/modularml/mojo/issues/285) - The +- [Issue #285](https://github.com/modular/mojo/issues/285) - The [`TargetInfo`](/mojo/stdlib/sys/info) module now includes `is_little_endian()` and `is_big_endian()` to check if the target host uses either little or big endian. -- [Issue #254](https://github.com/modularml/mojo/issues/254) - Parameter name +- [Issue #254](https://github.com/modular/mojo/issues/254) - Parameter name shadowing in nested scopes is now handled correctly. ### 2023-06-21 @@ -6148,14 +6148,14 @@ only in declared parameter names, e.g. the following now works correctly: fn foobar[w: Int, S: DType]() -> SIMD[S, w]: ... ``` -- [Issue #219](https://github.com/modularml/mojo/issues/219) - Issue when +- [Issue #219](https://github.com/modular/mojo/issues/219) - Issue when redefining a function and a struct defined in the same cell. -- [Issue #355](https://github.com/modularml/mojo/issues/355) - The loop order +- [Issue #355](https://github.com/modular/mojo/issues/355) - The loop order in the Matmul notebook for Python and naive mojo have been reordered for consistency. The loop order now follows (M, K, N) ordering. -- [Issue #309](https://github.com/modularml/mojo/issues/309) - Use snake case +- [Issue #309](https://github.com/modular/mojo/issues/309) - Use snake case naming within the testing package and move the asserts out of the TestSuite struct. @@ -6177,11 +6177,11 @@ only in declared parameter names, e.g. the following now works correctly: #### 🛠️ Fixed -- [Issue #354](https://github.com/modularml/mojo/issues/354) - Returning a tuple +- [Issue #354](https://github.com/modular/mojo/issues/354) - Returning a tuple doesn't work even with parens. -- [Issue #365](https://github.com/modularml/mojo/issues/365) - Copy-paste error +- [Issue #365](https://github.com/modular/mojo/issues/365) - Copy-paste error in `FloatLiteral` docs. -- [Issue #357](https://github.com/modularml/mojo/issues/357) - Crash when +- [Issue #357](https://github.com/modular/mojo/issues/357) - Crash when missing input parameter to variadic parameter struct member function. ### 2023-06-07 @@ -6198,7 +6198,7 @@ only in declared parameter names, e.g. the following now works correctly: - Mojo Playground no longer includes the following Python packages (due to size, compute costs, and - [environment complications](https://github.com/modularml/mojo/issues/300)): + [environment complications](https://github.com/modular/mojo/issues/300)): `torch`, `tensorflow`, `keras`, `transformers`. #### 🦋 Changed @@ -6206,19 +6206,19 @@ only in declared parameter names, e.g. the following now works correctly: - The data types and scalar names now conform to the naming convention used by numpy. So we use `Int32` instead of `SI32`, similarly using `Float32` instead of `F32`. Closes - [Issue #152](https://github.com/modularml/mojo/issues/152). + [Issue #152](https://github.com/modular/mojo/issues/152). #### 🛠️ Fixed -- [Issue #287](https://github.com/modularml/mojo/issues/287) - computed +- [Issue #287](https://github.com/modular/mojo/issues/287) - computed lvalues don't handle raising functions correctly -- [Issue #318](https://github.com/modularml/mojo/issues/318) - Large integers +- [Issue #318](https://github.com/modular/mojo/issues/318) - Large integers are not being printed correctly -- [Issue #326](https://github.com/modularml/mojo/issues/326) - Float modulo +- [Issue #326](https://github.com/modular/mojo/issues/326) - Float modulo operator is not working as expected -- [Issue #282](https://github.com/modularml/mojo/issues/282) - Default arguments +- [Issue #282](https://github.com/modular/mojo/issues/282) - Default arguments are not working as expected -- [Issue #271](https://github.com/modularml/mojo/issues/271) - Confusing error +- [Issue #271](https://github.com/modular/mojo/issues/271) - Confusing error message when converting between function types with different result semantics ## May 2023 @@ -6228,7 +6228,7 @@ only in declared parameter names, e.g. the following now works correctly: #### ⭐️ New - Mojo Playground now includes the following Python packages (in response to - [popular demand](https://github.com/modularml/mojo/discussions/173)): + [popular demand](https://github.com/modular/mojo/discussions/173)): `torch`, `tensorflow`, `polars`, `opencv-python`, `keras`, `Pillow`, `plotly`, `seaborn`, `sympy`, `transformers`. @@ -6292,9 +6292,9 @@ only in declared parameter names, e.g. the following now works correctly: #### 🛠️ Fixed -- [Issue #231](https://github.com/modularml/mojo/issues/231) - Unexpected error +- [Issue #231](https://github.com/modular/mojo/issues/231) - Unexpected error when a Python expression raises an exception -- [Issue #119](https://github.com/modularml/mojo/issues/119) - The REPL fails +- [Issue #119](https://github.com/modular/mojo/issues/119) - The REPL fails when a python variable is redefined ### 2023-05-24 @@ -6319,39 +6319,39 @@ only in declared parameter names, e.g. the following now works correctly: #### 🛠️ Fixed -- [Issue #204](https://github.com/modularml/mojo/issues/204) - Mojo REPL +- [Issue #204](https://github.com/modular/mojo/issues/204) - Mojo REPL crash when returning a String at compile-time -- [Issue #143](https://github.com/modularml/mojo/issues/143) - synthesized +- [Issue #143](https://github.com/modular/mojo/issues/143) - synthesized init in `@register_passable` type doesn't get correct convention. -- [Issue #201](https://github.com/modularml/mojo/issues/201) - String literal +- [Issue #201](https://github.com/modular/mojo/issues/201) - String literal concatenation is too eager. -- [Issue #209](https://github.com/modularml/mojo/issues/209) - [QoI] Terrible +- [Issue #209](https://github.com/modular/mojo/issues/209) - [QoI] Terrible error message trying to convert a type to itself. -- [Issue #32](https://github.com/modularml/mojo/issues/32) - Include struct +- [Issue #32](https://github.com/modular/mojo/issues/32) - Include struct fields in docgen -- [Issue #50](https://github.com/modularml/mojo/issues/50) - Int to string +- [Issue #50](https://github.com/modular/mojo/issues/50) - Int to string conversion crashes due to buffer overflow -- [Issue #132](https://github.com/modularml/mojo/issues/132) - PythonObject +- [Issue #132](https://github.com/modular/mojo/issues/132) - PythonObject `to_int` method has a misleading name -- [Issue #189](https://github.com/modularml/mojo/issues/189) - PythonObject bool +- [Issue #189](https://github.com/modular/mojo/issues/189) - PythonObject bool conversion is incorrect -- [Issue #65](https://github.com/modularml/mojo/issues/65) - Add SIMD +- [Issue #65](https://github.com/modular/mojo/issues/65) - Add SIMD constructor from Bool -- [Issue #153](https://github.com/modularml/mojo/issues/153) - Meaning of +- [Issue #153](https://github.com/modular/mojo/issues/153) - Meaning of `Time.now` function result is unclear -- [Issue #165](https://github.com/modularml/mojo/issues/165) - Type in +- [Issue #165](https://github.com/modular/mojo/issues/165) - Type in `Pointer.free` documentation -- [Issue #210](https://github.com/modularml/mojo/issues/210) - Parameter results +- [Issue #210](https://github.com/modular/mojo/issues/210) - Parameter results cannot be declared outside top-level in function -- [Issue #214](https://github.com/modularml/mojo/issues/214) - Pointer offset +- [Issue #214](https://github.com/modular/mojo/issues/214) - Pointer offset calculations at compile-time are incorrect -- [Issue #115](https://github.com/modularml/mojo/issues/115) - Float printing +- [Issue #115](https://github.com/modular/mojo/issues/115) - Float printing does not include the right number of digits -- [Issue #202](https://github.com/modularml/mojo/issues/202) - +- [Issue #202](https://github.com/modular/mojo/issues/202) - `kgen.unreachable` inside nested functions is illegal -- [Issue #235](https://github.com/modularml/mojo/issues/235) - Crash when +- [Issue #235](https://github.com/modular/mojo/issues/235) - Crash when register passable struct field is not register passable -- [Issue #237](https://github.com/modularml/mojo/issues/237) - Parameter +- [Issue #237](https://github.com/modular/mojo/issues/237) - Parameter closure sharp edges are not documented ### 2023-05-16 @@ -6366,16 +6366,16 @@ only in declared parameter names, e.g. the following now works correctly: #### 🛠️ Fixed -- [Issue #98](https://github.com/modularml/mojo/issues/98): +- [Issue #98](https://github.com/modular/mojo/issues/98): Incorrect error with lifetime tracking in loop. -- [Issue #49](https://github.com/modularml/mojo/issues/49): Type inference +- [Issue #49](https://github.com/modular/mojo/issues/49): Type inference issue (?) in 'ternary assignment' operation (FloatLiteral vs. 'SIMD[f32, 1]'). -- [Issue #48](https://github.com/modularml/mojo/issues/48): +- [Issue #48](https://github.com/modular/mojo/issues/48): and/or don't work with memory-only types. -- [Issue #11](https://github.com/modularml/mojo/issues/11): `setitem` Support +- [Issue #11](https://github.com/modular/mojo/issues/11): `setitem` Support for `PythonObject`. ### 2023-05-11 @@ -6393,7 +6393,7 @@ only in declared parameter names, e.g. the following now works correctly: - The "byref" syntax with the `&` sigil has changed to use an `inout` keyword to be more similar to the `borrowed` and `owned` syntax in arguments. - Please see [Issue #7](https://github.com/modularml/mojo/issues/7) for more + Please see [Issue #7](https://github.com/modular/mojo/issues/7) for more information. - Optimized the Matrix multiplication implementation in the notebook. @@ -6410,10 +6410,10 @@ from "consume" to "transfer." - Fixed missing overloads for `Testing.assertEqual` so that they work on `Integer` and `String` values. -- [Issue #6](https://github.com/modularml/mojo/issues/6): +- [Issue #6](https://github.com/modular/mojo/issues/6): Playground stops evaluating cells when a simple generic is defined. -- [Issue #18](https://github.com/modularml/mojo/issues/18): +- [Issue #18](https://github.com/modular/mojo/issues/18): Memory leak in Python interoperability was removed. ### 2023-05-02 diff --git a/docs/changelog.md b/docs/changelog.md index c9af30e69d..6198d56616 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -34,14 +34,91 @@ what we publish. `ExplicitlyCopyable` trait. This will ease the transition to explicit copyablility requirements by default in the Mojo collection types. +- Indexing into a homogenous tuple now produces the consistent element type + without needing a rebind: + + ```mojo + var x = (1, 2, 3, 3, 4) + var y : Int = x[idx] # Just works! + ``` + +- You can now overload positional arguments with a keyword-only argument, and + keyword-only arguments with different names: + + ```mojo + struct OverloadedKwArgs: + var val: Int + + fn __init__(out self, single: Int): + self.val = single + + fn __init__(out self, *, double: Int): + self.val = double * 2 + + fn __init__(out self, *, triple: Int): + self.val = triple * 3 + + fn main(): + OverloadedKwArgs(1) # val=1 + OverloadedKwArgs(double=1) # val=2 + OverloadedKwArgs(triple=2) # val=3 + ``` + + This also works with indexing operations: + + ```mojo + struct OverloadedKwArgs: + var vals: List[Int] + + fn __init__(out self): + self.vals = List[Int](0, 1, 2) + + fn __getitem__(self, idx: Int) -> Int: + return self.vals[idx] + + fn __getitem__(self, *, idx2: Int) -> Int: + return self.vals[idx2 * 2] + + fn __setitem__(mut self, idx: Int, val: Int): + self.vals[idx] = val + + fn __setitem__(mut self, val: Int, *, idx2: Int): + self.vals[idx2 * 2] = val + + + fn main(): + var x = OverloadedKwArgs() + print(x[1]) # 1 + print(x[idx2=1]) # 2 + + x[1] = 42 + x[idx2=1] = 84 + + print(x[1]) # 42 + print(x[idx2=1]) # 84 + ``` + ### Standard library changes - Add a new `validate` parameter to the `b64decode()` function. -- The `int` function to construct an `Int` has been removed, this was a - temporary workaround when Mojo didn't have a way to distinguish between - implicit and explicit constructors. You can do a search and replace for `int(` - to `Int(` to update your programs. +- The free floating functions for constructing different types have been + deprecated for actual constructors: + + ```plaintext + before after + ------------------ + int() Int() + str() String() + bool() Bool() + float() Float64() + ``` + + These functions were a workaround before Mojo had a way to distinguish between + implicit and explicit constructors. For this release you'll get a deprecation + warning, and in the next release they'll become compiler errors. You can + quickly update your code by doing a `Match Case` and `Match Whole Word` + search and replace for `int(` to `Int(` etc. - `UnsafePointer`'s `bitcast` method has now been split into `bitcast` for changing the type, `origin_cast` for changing mutability, @@ -101,11 +178,26 @@ what we publish. functionality. - Added `Char`, for representing and storing single Unicode characters. + - `Char` implements `CollectionElement`, `EqualityComparable`, `Intable`, and + `Stringable`. + - Added `String` constructor from `Char` + - `Char` can be converted to `UInt32` via `Char.to_u32()`. + - `Char` provides methods for categorizing character types, including: + `Char.is_ascii()`, `Char.is_posix_space()`, `Char.is_python_space()`, + `Char.is_ascii_digit()`, `Char.is_ascii_upper()`, `Char.is_ascii_lower()`, + `Char.is_ascii_printable()`. + +- `chr(Int)` will now abort if given a codepoint value that is not a valid + `Char`. - Added `StringSlice.from_utf()` factor method, for validated construction of a `StringSlice` from a buffer containing UTF-8 encoded data. This method will raise if the buffer contents are not valid UTF-8. +- Added `StringSlice.chars()` which returns an iterator over `Char`s. This is a + compliant UTF-8 decoder that returns each Unicode codepoint encoded in the + string. + - Several standard library functions have been changed to take `StringSlice` instead of `String`. This generalizes them to be used for any appropriately encoded string in memory, without requiring that the string be heap allocated. @@ -122,6 +214,43 @@ what we publish. - `b16encode()` - `b16decode()` +- Added new `String.chars()` and `String.char_slices()` iterator methods, and + deprecated the existing `String.__iter__()` method. + + Different use-cases may prefer iterating over the `Char`s encoded in a string, + or iterating over subslices containing single characters. Neither iteration + semantics is an obvious default, so the existing `__iter__()` method has been + deprecated in favor of writing explicit iteration methods for the time being. + + Code of the form: + + ```mojo + var s: String = ... + for c in s: + # ... + ``` + + can be migrated to using the `.char_slices()` method: + + ```mojo + var s: String = ... + for c in s.char_slices(): + # ... + ``` + +- The `String.__len__()` and `StringSlice.__len__()` methods now return the + length of the string in bytes. + + Previously, these methods were documented to note that they would eventually + return a length in Unicode codepoints. They have been changed to guarantee + a length in bytes, since the length in bytes is how they are most often used + today (for example, as bounds to low-level memory manipulation logic). + Additionally, length in codepoints is a more specialized notion of string + length that is rarely the correct metric. + + Users that know they need the length in codepoints can use the + `str.char_length()` method, or `len(str.chars())`. + - Various functionality has moved from `String` and `StringRef` to the more general `StringSlice` type. @@ -136,6 +265,15 @@ what we publish. has narrower comparison methods that support comparing only with `StringSlice`'s with the exact same origin. +- Added `StringSlice.char_length()` method, to pair with the existing + `StringSlice.byte_length()` method. + + In a future version of Mojo, `StringSlice.__len__()` may be changed to return + the length in bytes, matching the convention of string length methods in + languages like C++ and Rust. Callers that know they need the length in + Unicode codepoints should update to calling `StringSlice.char_length()` + instead. + - Removed `@implicit` decorator from some standard library initializer methods that perform allocation. This reduces places where Mojo code could implicitly allocate where the user may not be aware. @@ -175,6 +313,62 @@ what we publish. return self.i ``` +- You can now cast SIMD types using constructors: + + ```mojo + var val = Int8(42) + var cast = Int32(val) + ``` + + It also works when passing a scalar type to larger vector size: + + ```mojo + var vector = SIMD[DType.int64, 4](cast) # [42, 42, 42, 42] + ``` + + For values other than scalars the size of the SIMD vector needs to be equal: + + ```mojo + var float_vector = SIMD[DType.float64, 4](vector) + ``` + + `SIMD.cast` still exists to infer the size of new vector: + + ```mojo + var inferred_size = float_vector.cast[DType.uint64]() # [42, 42, 42, 42] + ``` + +- You can now use `max()` and `min()` with variadic number of arguments. + +- A new `LinkedList` type has been added to the standard library. + +- The `String.write` static method has moved to a `String` constructor, and + is now buffered. Instead of doing: + + ```mojo + var msg = "my message " + String(x) + " " + String(y) + " " + String(z) + ``` + + Which reallocates the `String` you should do: + + ```mojo + var msg = String("my message", x, y, z, sep=" ") + ``` + + Which is cleaner, and buffers to the stack so the `String` is allocated only + once. + +- You can now pass any `Writer` to `write_buffered`: + + ```mojo + from utils.write import write_buffered + + var string = String("existing string") + write_buffered(string, 42, 42.4, True, sep=" ") + ``` + + This writes to a buffer on the stack before reallocating the `String`. + ### Tooling changes - mblack (aka `mojo format`) no longer formats non-mojo files. This prevents @@ -191,6 +385,8 @@ what we publish. - Added `Path` explicit constructor from `StringSlice`. - removed `StringRef.startswith()` and `StringRef.endswith()` - removed `StringRef.strip()` +- The `Tuple.get[i, T]()` method has been removed. Please use `tup[i]` or + `rebind[T](tup[i])` as needed instead. ### 🛠️ Fixed @@ -199,14 +395,17 @@ what we publish. - The command `mojo debug --vscode` now sets the current working directory properly. -- [Issue #3796](https://github.com/modularml/mojo/issues/3796) - Compiler crash +- [Issue #3796](https://github.com/modular/mojo/issues/3796) - Compiler crash handling for-else statement. -- [Issue #3540](https://github.com/modularml/mojo/issues/3540) - Using named +- [Issue #3540](https://github.com/modular/mojo/issues/3540) - Using named output slot breaks trait conformance -- [Issue #3617](https://github.com/modularml/mojo/issues/3617) - Can't generate +- [Issue #3617](https://github.com/modular/mojo/issues/3617) - Can't generate the constructors for a type wrapping `!lit.ref` - The Mojo Language Server doesn't crash anymore on empty **init**.mojo files. - [Issue #3826](https://github.com/modularml/mojo/issues/3826). + [Issue #3826](https://github.com/modular/mojo/issues/3826). + +- [Issue #3935](https://github.com/modular/mojo/issues/3935) - Confusing OOM + error when using Tuple.get incorrectly. diff --git a/docs/faq.md b/docs/faq.md index d3e11a6a59..32ecb58de7 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -147,7 +147,7 @@ develop AI algorithms, but as we grow Mojo into a superset of Python, you can use it for other things like HPC, data transformations, writing pre/post processing operations, and much more. For examples of how Mojo can be used for other general programming tasks, see our [Mojo -examples](https://github.com/modularml/mojo/tree/main/examples). +examples](https://github.com/modular/mojo/tree/main/examples). ### Is Mojo interpreted or compiled? @@ -245,7 +245,7 @@ multiplication](https://www.modular.com/blog/the-worlds-fastest-unified-matrix-m ### Mojo’s matmul performance in the notebook doesn’t seem that great. What’s going on? The [Mojo Matmul -notebook](https://github.com/modularml/mojo/blob/main/examples/notebooks/Matmul.ipynb) +notebook](https://github.com/modular/mojo/blob/main/examples/notebooks/Matmul.ipynb) uses matrix multiplication to show off some Mojo features in a scenario that you would never attempt in pure Python. So that implementation is like a “toy” matmul implementation and it doesn’t measure up to the state of the art. @@ -270,8 +270,8 @@ dashboard](https://www.modular.com/max/performance). ### How can I get access to the SDK? -Mojo is included with the MAX SDK, which you can [download and use for -free](/max/install). +Mojo is included with the `max` conda package. Try it now by following +the tutorial to [get started with Mojo](/mojo/manual/get-started). Read more about [why Mojo is bundled with MAX](/max/faq#why-bundle-mojo-with-max). @@ -282,7 +282,7 @@ Yes, but it's different. When we first announced Mojo, it was available only through login, in a JupyterLab environment. Now that Mojo is available for local development, we've shut down that service (you can instead [run Mojo notebooks -locally](https://github.com/modularml/mojo/tree/main/examples/notebooks#readme)). +locally](https://github.com/modular/mojo/tree/main/examples/notebooks#readme)). The new [Mojo Playground](/mojo/playground) is built into the docs website and does not require login. @@ -301,7 +301,7 @@ and does not require login. using buttons in the Playground toolbar. - There might be some bugs. Please [report issues and feedback on - GitHub](https://github.com/modularml/mojo/issues/new/choose). + GitHub](https://github.com/modular/mojo/issues/new/choose). ### What are the license terms for the SDK? diff --git a/docs/manual/basics.mdx b/docs/manual/basics.mdx index edeb731899..301dfdb90e 100644 --- a/docs/manual/basics.mdx +++ b/docs/manual/basics.mdx @@ -77,7 +77,7 @@ def main(): You don't need a `main()` function when coding in the [REPL](/mojo/manual/get-started#2-run-code-in-the-repl) or in a [Jupyter -notebook](https://github.com/modularml/mojo/tree/main/examples/notebooks#readme). +notebook](https://github.com/modular/mojo/tree/main/examples/notebooks#readme). ::: @@ -390,14 +390,14 @@ here is [Functions](/mojo/manual/functions). Otherwise, here are some other resources to check out: * If you want to experiment with some code, clone [the Mojo - repo](https://github.com/modularml/mojo/) to try our code examples: + repo](https://github.com/modular/mojo/) to try our code examples: ```sh - git clone https://github.com/modularml/mojo.git + git clone https://github.com/modular/mojo.git ``` In addition to several `.mojo` examples, the repo includes [Jupyter - notebooks](https://github.com/modularml/mojo/tree/main/examples/notebooks#readme) + notebooks](https://github.com/modular/mojo/tree/main/examples/notebooks#readme) that teach advanced Mojo features. * To see all the available Mojo APIs, check out the [Mojo standard library diff --git a/docs/manual/errors.mdx b/docs/manual/errors.mdx index 47e1a23711..ff7512798a 100644 --- a/docs/manual/errors.mdx +++ b/docs/manual/errors.mdx @@ -103,12 +103,12 @@ recovery that's appropriate for your application. If you provide the name of a variable after the `except` keyword, then the `Error` instance is bound to the variable if an error occurs. The `Error` type -implements the [`Writable`](/mojo/stdlib/utils/write/Writable) trait, so -you can pass it as an argument to the [`print()`](/mojo/stdlib/builtin/io/print) +implements the [`Writable`](/mojo/stdlib/utils/write/Writable) trait, so you can +pass it as an argument to the [`print()`](/mojo/stdlib/builtin/io/print) function if you'd like to print its error message to the console. It also implements the [`Stringable`](/mojo/stdlib/builtin/str/Stringable) trait, so you -can pass it to the [`str()`](/mojo/stdlib/builtin/str/str) function if you want -to extract the error message as a `String` for further processing. +can construct a `String` with `String(error)` if you want to extract the error +message as a `String` for further processing. If desired, you can re-raise an error condition from your `except` clause simply by executing a `raise` statement from within its code block. This can be either @@ -152,7 +152,7 @@ def main(): print("try =>", value[]) if value[] == 1: continue - result = str("{} incremented is {}").format(value[], incr(value[])) + result = String("{} incremented is {}").format(value[], incr(value[])) except e: print("except =>", e) else: @@ -384,7 +384,7 @@ struct ConditionalTimer: print("Elapsed time:", elapsed_time_ms, "milliseconds") fn __exit__(mut self, e: Error) raises -> Bool: - if str(e) == "just a warning": + if String(e) == "just a warning": print("Suppressing error:", e) self.__exit__() return True diff --git a/docs/manual/functions.mdx b/docs/manual/functions.mdx index 46cd3f5aaa..c6f51aeaf9 100644 --- a/docs/manual/functions.mdx +++ b/docs/manual/functions.mdx @@ -331,7 +331,7 @@ fn count_many_things[*ArgTypes: Intable](*args: *ArgTypes) -> Int: @parameter fn add[Type: Intable](value: Type): - total += int(value) + total += Int(value) args.each[add]() return total @@ -364,12 +364,12 @@ fn print_string(s: String): print(s, end="") fn print_many[T: Stringable, *Ts: Stringable](first: T, *rest: *Ts): - print_string(str(first)) + print_string(String(first)) @parameter fn print_elt[T: Stringable](a: T): print_string(" ") - print_string(str(a)) + print_string(String(a)) rest.each[print_elt]() print_many("Bob") ``` diff --git a/docs/manual/get-started.mdx b/docs/manual/get-started.mdx index 0495016925..94d6a02348 100644 --- a/docs/manual/get-started.mdx +++ b/docs/manual/get-started.mdx @@ -2,7 +2,8 @@ title: "Get started with Mojo" sidebar_label: "Tutorial: Get started with Mojo" description: "Install Mojo and learn the language basics by building a complete Mojo program" -github_url: https://github.com/modularml/mojo/tree/nightly/examples/life +github_url: https://github.com/modular/mojo/tree/nightly/examples/life +image: /images/artwork/mojo-get-started.jpg --- import GetMagic from '@site/src/includes/get_magic.mdx'; @@ -28,7 +29,7 @@ tried to keep the explanations simple, and we included links along the way for you to go learn more about each topic. And if you just want to see the finished code, you can [get it on -GitHub](https://github.com/modularml/mojo/tree/nightly/examples/life). +GitHub](https://github.com/modular/mojo/tree/nightly/examples/life). ## 1. Create a Mojo project with `magic` @@ -344,7 +345,7 @@ def main(): ## 5. Create and use a function to print the grid Now let's create a function to generate a string representation of the game grid -that we can print it to the terminal. +that we can print to the terminal. There are actually two different keywords that we can use to define functions in Mojo: `def` and `fn`. Using `fn` gives us finer level control over the function @@ -362,7 +363,7 @@ def grid_str(rows: Int, cols: Int, grid: List[List[Int]]) -> String: # Iterate through rows 0 through rows-1 for row in range(rows): - # Iterate through columns 0 through cols-1 + # Iterate through columns 0 through cols-1 for col in range(cols): if grid[row][col] == 1: str += "*" # If cell is populated, append an asterisk @@ -540,7 +541,7 @@ def grid_str(grid: Grid) -> String: # Iterate through rows 0 through rows-1 for row in range(grid.rows): - # Iterate through columns 0 through cols-1 + # Iterate through columns 0 through cols-1 for col in range(grid.cols): if grid.data[row][col] == 1: str += "*" # If cell is populated, append an asterisk @@ -646,11 +647,11 @@ produces the same output. You can verify that by running the program again. ## 9. Implement support for the `StringableRaising` trait -You can pass most Mojo types to the built-in `str()` function to produce a +You can convert most Mojo types to `String` using `String(my_val)` to produce a `String` representation of that instance. But you'll get an error if you try to do that with our current implementation of `Grid`. So let's fix that. -Because the Mojo compiler performs static type checking, a function like `str()` +Because the Mojo compiler performs static type checking, a `String` constructor can accept a value only if its type implements some required behavior—in this case, it only accepts types that can generate a `String` representation. @@ -662,7 +663,7 @@ any type that conform to a specified trait. (This type of function is sometimes referred to as a [*generic* function](/mojo/manual/parameters/#parameters-and-generics).) -In the case of `str()`, it requires a type to conform to either the `Stringable` +In the case of `String()`, it requires a type to conform to either the `Stringable` or `StringableRaising` trait. Each trait requires a conforming type to implement a `__str__()` method that returns a `String` representation. The only difference between the two traits is that `Stringable` requires that the method *cannot* @@ -691,13 +692,13 @@ struct Grid(StringableRaising): ... ``` -Now let's verify that `str()` works with an instance of `Grid`. +Now let's verify that `String()` works with an instance of `Grid`. ```mojo title="life.mojo" def main(): ... start = Grid(8, 8, glider) - print(str(start)) + print(String(start)) ``` If you run the program again, you should still see the same glider pattern as before. @@ -850,7 +851,7 @@ struct Grid(StringableRaising): row_data = List[Int]() for col in range(cols): # Generate a random 0 or 1 and append it to the row. - row_data.append(int(random.random_si64(0, 1))) + row_data.append(Int(random.random_si64(0, 1))) data.append(row_data) return Self(rows, cols, data) @@ -876,8 +877,8 @@ respectively. This function actually returns a value of type `Int64`, which is a signed 64-bit integer value. As described in [Numeric types](/mojo/manual/types#numeric-types), this is *not* the same as the `Int` type whose precision is dependent on the native word size of the system. -Therefore we're passing this value to the built-in -[`int()`](/mojo/stdlib/builtin/int/int-function/) function, which explicitly +Therefore we're passing this value to the +[`Int()`](/mojo/stdlib/builtin/int/Int/#__init__) constructor, which explicitly converts a numeric value to an `Int`. The return type of the method is `Self`, which is an alias for the type of the @@ -895,7 +896,7 @@ and print it. def main(): start = Grid.random(8, 16) - print(str(start)) + print(String(start)) ``` Run the program a few times to verify that it generates a different grid each @@ -1008,7 +1009,7 @@ from gridv1 import Grid def run_display(owned grid: Grid) -> None: while True: - print(str(grid)) + print(String(grid)) print() if input("Enter 'q' to quit or press to continue: ") == "q": break diff --git a/docs/manual/operators.mdx b/docs/manual/operators.mdx index b4ac20d127..baaf9f5d8f 100644 --- a/docs/manual/operators.mdx +++ b/docs/manual/operators.mdx @@ -1030,7 +1030,7 @@ operations like printing complex values. We'll also allow mixing `Complex` and This example builds our `Complex` struct incrementally. You can also find the [complete example in the public Mojo GitHub -repo](https://github.com/modularml/mojo/tree/nightly/examples/operators). +repo](https://github.com/modular/mojo/tree/nightly/examples/operators). :::note @@ -1100,7 +1100,7 @@ c2: Real: 3.1415899999999999; Imaginary: 0.0 To make it simpler to print `Complex` values, let's implement the [Writable](/mojo/stdlib/utils/write/Writable) trait. While we're at it, let's also implement the [`Stringable`](/mojo/stdlib/builtin/str/Stringable) trait so -that we can use the `str()` function to generate a `String` representation of a +that we can use the `String()` constructor to generate a `String` representation of a `Complex` value. You can find out more about these traits and their associated methods in [The `Stringable`, `Representable`, and `Writable` traits](/mojo/manual/traits#the-stringable-representable-and-writable-traits). @@ -1137,13 +1137,14 @@ between defining functions with `def` and `fn`. ::: Now we can print a `Complex` value directly, and we can explicitly generate a -`String` representation by passing a `Complex` value to `str()`. +`String` representation by passing a `Complex` value to `String()` which +constructs a new `String` from all the arguments passed to it. ```mojo c3 = Complex(3.14159, -2.71828) print("c3 =", c3) -var msg: String = "The value is: " + str(c3) +var msg = String("The value is: ", c3) print(msg) ``` diff --git a/docs/manual/parameters/index.mdx b/docs/manual/parameters/index.mdx index fae5e5f72c..169ce7db48 100644 --- a/docs/manual/parameters/index.mdx +++ b/docs/manual/parameters/index.mdx @@ -103,7 +103,7 @@ conforms to the [`Stringable`](/mojo/stdlib/builtin/str/Stringable) trait: fn repeat[MsgType: Stringable, count: Int](msg: MsgType): @parameter for i in range(count): - print(str(msg)) + print(String(msg)) # Must use keyword parameter for `count` repeat[count=2](42) @@ -125,7 +125,7 @@ by the argument. Now you can pass the following parameter `count` positionally: fn repeat[MsgType: Stringable, //, count: Int](msg: MsgType): @parameter for i in range(count): - print(str(msg)) + print(String(msg)) # MsgType is always inferred, so first positional keyword `2` is passed to `count` repeat[2](42) @@ -140,7 +140,7 @@ Mojo's support for generics is still early. You can write generic functions like this using traits and parameters. You can also write generic collections like `List` and `Dict`. If you're interested in learning how these types work, you can find the source code for the standard library collection types -[on GitHub](https://github.com/modularml/mojo/blob/nightly/stdlib/src/collections/). +[on GitHub](https://github.com/modular/mojo/blob/nightly/stdlib/src/collections/). ## Parameterized structs @@ -252,7 +252,7 @@ struct Container[ElementType: CollectionElement]: def __str__[StrElementType: StringableCollectionElement, //]( self: Container[StrElementType]) -> String: - return str(self.element) + return String(self.element) def use_container(): float_container = Container(5) @@ -282,7 +282,7 @@ This trait must be a superset of `ElementType`'s original trait: for example, all of requirements of the original trait. Note that the `use_container()` function calls the `__str__()` method directly, -rather than calling `str(float_container)`. One current limitation of +rather than calling `String(float_container)`. One current limitation of conditional conformance is that Mojo can't recognize the struct `Container[Int]` as conforming to `Stringable`, even though the `__str__()` method is implemented for any `ElementType` that's also `Stringable`. @@ -545,11 +545,11 @@ struct Two[Type: StringableCollectionElement]: fn __init__(out self, one: One[Type], another: One[Type]): self.val1 = one.value self.val2 = another.value - print(str(self.val1), str(self.val2)) + print(String(self.val1), String(self.val2)) @staticmethod fn fire(thing1: One[Type], thing2: One[Type]): - print("🔥", str(thing1.value), str(thing2.value)) + print("🔥", String(thing1.value), String(thing2.value)) def use_two(): s3 = Two(One("infer"), One("me")) @@ -808,9 +808,9 @@ fn slice[ty: DType, new_size: Int, size: Int]( fn reduce_add[ty: DType, size: Int](x: SIMD[ty, size]) -> Int: @parameter if size == 1: - return int(x[0]) + return Int(x[0]) elif size == 2: - return int(x[0]) + int(x[1]) + return Int(x[0]) + Int(x[1]) # Extract the top/bottom halves, add them, sum the elements. alias half_size = size // 2 @@ -1163,9 +1163,7 @@ For example, suppose we have a `Fudge` struct with three parameters: @value struct Fudge[sugar: Int, cream: Int, chocolate: Int = 7](Stringable): fn __str__(self) -> String: - return str("Fudge (") + str(sugar) + "," + - str(cream) + "," + str(chocolate) + ")" - + return String.write("Fudge (", sugar, ",", cream, ",", chocolate, ")") ``` We can write a function that takes a `Fudge` argument with just one bound @@ -1173,7 +1171,7 @@ parameter (it's *partially bound*): ```mojo fn eat(f: Fudge[5, *_]): - print("Ate " + str(f)) + print("Ate " + String(f)) ``` The `eat()` function takes a `Fudge` struct with the first parameter (`sugar`) @@ -1185,7 +1183,7 @@ on the `eat` function. In practice, this is roughly equivalent to writing: ```mojo fn eat[cr: Int, ch: Int](f: Fudge[5, cr, ch]): - print("Ate", str(f)) + print("Ate", String(f)) ``` In both cases, we can call the function by passing in an instance with the @@ -1218,7 +1216,7 @@ parameter value with a single underscore (`_`): ```mojo fn devour(f: Fudge[_, 6, _]): - print("Devoured", str(f)) + print("Devoured", String(f)) ``` Again, the unbound parameters (`sugar` and `chocolate`) are added as implicit @@ -1228,7 +1226,7 @@ parameters, `su` and `ch`: ```mojo fn devour[su: Int, ch: Int](f: Fudge[su, 6, ch]): - print("Devoured", str(f)) + print("Devoured", String(f)) ``` You can also specify parameters by keyword, or mix positional and keyword @@ -1239,7 +1237,7 @@ And `cream` is explicitly bound to the value 6: ```mojo fn devour(f: Fudge[_, chocolate=_, cream=6]): - print("Devoured", str(f)) + print("Devoured", String(f)) ``` All three versions of the `devour()` function work with the following calls: @@ -1261,7 +1259,7 @@ for example: ```mojo fn nibble(f: Fudge[5]): - print("Ate", str(f)) + print("Ate", String(f)) nibble(Fudge[5, 4, 7]()) diff --git a/docs/manual/pointers/unsafe-pointers.mdx b/docs/manual/pointers/unsafe-pointers.mdx index a2a5f04acd..69acb084b0 100644 --- a/docs/manual/pointers/unsafe-pointers.mdx +++ b/docs/manual/pointers/unsafe-pointers.mdx @@ -168,7 +168,7 @@ type](/mojo/manual/types#register-passable-memory-only-and-trivial-types) (like `Int`) or a newly-constructed, "owned" value: ```mojo -str_ptr.init_pointee_move(str("Owned string")) +str_ptr.init_pointee_move(String("Owned string")) ``` Alternately, you can get a pointer to an existing value using the static @@ -403,7 +403,7 @@ in the chunk. def read_chunks(owned ptr: UnsafePointer[UInt8]) -> List[List[UInt32]]: chunks = List[List[UInt32]]() # A chunk size of 0 indicates the end of the data - chunk_size = int(ptr[]) + chunk_size = Int(ptr[]) while (chunk_size > 0): # Skip the 1 byte chunk_size and get a pointer to the first # UInt32 in the chunk @@ -415,7 +415,7 @@ def read_chunks(owned ptr: UnsafePointer[UInt8]) -> List[List[UInt32]]: # Move our pointer to the next byte after the current chunk ptr += (1 + 4 * chunk_size) # Read the size of the next chunk - chunk_size = int(ptr[]) + chunk_size = Int(ptr[]) return chunks ``` diff --git a/docs/manual/python/types.mdx b/docs/manual/python/types.mdx index 4ef8bee6aa..28ff8ffb6a 100644 --- a/docs/manual/python/types.mdx +++ b/docs/manual/python/types.mdx @@ -145,24 +145,25 @@ Some Mojo APIs handle `PythonObject` just fine, but sometimes you'll need to explicitly convert a Python value into a native Mojo value. Currently `PythonObject` conforms to the -[`Intable`](/mojo/stdlib/builtin/int/Intable), -[`Stringable`](/mojo/stdlib/builtin/str/Stringable), and -[`Boolable`](/mojo/stdlib/builtin/bool/Boolable) traits, which means you can -convert Python values to Mojo `Int`, `String`, and `Bool` types using the -built-in [`int()`](/mojo/stdlib/builtin/int/int-function), -[`str()`](/mojo/stdlib/builtin/str/str), and -[`bool()`](/mojo/stdlib/builtin/bool/bool-function) functions, and print Python -values using the built-in [`print()`](/mojo/stdlib/builtin/io/print) function. - -`PythonObject` also provides the -[`to_float64()`](/mojo/stdlib/python/python_object/PythonObject#to_float64) for -converting to a Mojo floating point value. +[`Stringable`](/mojo/stdlib/builtin/str/Stringable), +[`Boolable`](/mojo/stdlib/builtin/bool/Boolable), +[`Intable`](/mojo/stdlib/builtin/int/Intable), and +[`Floatable`](/mojo/stdlib/builtin/floatable/Floatable/) traits. This allows you +to convert a `PythonObject` to the corresponding Mojo types. ```mojo -var i: Int = int(py_int) -var s: String = str(py_string) -var b: Bool = bool(py_bool) -var f: Float64 = py_float.to_float64() +var s = String(py_string) +var b = Bool(py_bool) +var i = Int(py_int) +var f = Float64(py_float) +``` + +PythonObject also implements the [`Writable`](/mojo/stdlib/utils/write/Writable) +trait, so that you can print Python values using the built-in +[`print()`](/mojo/stdlib/builtin/io/print) function. + +```mojo +print(python_object) ``` ### Comparing Python types in Mojo diff --git a/docs/manual/traits.mdx b/docs/manual/traits.mdx index 4c33a10578..0d13119942 100644 --- a/docs/manual/traits.mdx +++ b/docs/manual/traits.mdx @@ -375,7 +375,7 @@ struct Foo(Intable): return self.i var foo = Foo(42) -print(int(foo) == 42) +print(Int(foo) == 42) ``` ```output @@ -385,13 +385,11 @@ True ### The `Stringable`, `Representable`, and `Writable` traits The [`Stringable`](/mojo/stdlib/builtin/str/Stringable) trait identifies a type -that can be implicitly converted to +that can be explicitly converted to [`String`](/mojo/stdlib/collections/string/String). The [`StringableRaising`](/mojo/stdlib/builtin/str/StringableRaising) trait describes a type that can be converted to a `String`, but the conversion might -raise an error. Any type that conforms to `Stringable` or `StringableRaising` -also works with the built-in [`str()`](/mojo/stdlib/builtin/str/str) function to -explicitly return a `String`. These traits also mean that the type can support +raise an error. These traits also mean that the type can support both the `{!s}` and `{}` format specifiers of the `String` class's [`format()`](/mojo/stdlib/collections/string/String#format) method. These traits require the type to define the @@ -439,14 +437,17 @@ struct Dog(Stringable, Representable, Writable): var name: String var age: Int - fn __repr__(self) -> String: - return "Dog(name=" + repr(self.name) + ", age=" + repr(self.age) + ")" + # Allows the type to be written into any `Writer` + fn write_to[W: Writer](self, mut writer: W) -> None: + writer.write("Dog(", self.name, ", ", self.age, ")") + # Construct and return a `String` using the previous method fn __str__(self) -> String: return String.write(self) - fn write_to[W: Writer](self, mut writer: W) -> None: - writer.write("Dog(", self.name, ", ", self.age, ")") + # Alternative full representation when calling `repr` + fn __repr__(self) -> String: + return String("Dog(name=", repr(self.name)", age=", repr(self.age), ")") var dog = Dog("Rex", 5) print(repr(dog)) diff --git a/docs/manual/types.mdx b/docs/manual/types.mdx index ee6ddcf586..e45e1b627b 100644 --- a/docs/manual/types.mdx +++ b/docs/manual/types.mdx @@ -322,11 +322,23 @@ Testing Mojo strings Most standard library types conform to the [`Stringable`](/mojo/stdlib/builtin/str/Stringable) trait, which represents -a type that can be converted to a string. Use `str(value)` to +a type that can be converted to a string. Use `String(value)` to explicitly convert a value to a string: ```mojo -var s = str("Items in list: ") + str(5) +var s = String("Items in list: ") + String(5) +print(s) +``` + +```output +Items in list: 5 +``` + +Or use `String.write` to take variadic `Stringable` types, so you don't have to +call `String()` on each value: + +```mojo +var s = String("Items in list: ", 5) print(s) ``` @@ -362,9 +374,8 @@ Note that the triple double quote form is also used for API documentation strings. Unlike `IntLiteral` and `FloatLiteral`, `StringLiteral` doesn't automatically -materialize to a runtime type. In some cases, you may need to manually convert -`StringLiteral` values to `String` using the built-in -[`str()`](/mojo/stdlib/builtin/str/str) method. +materialize to a runtime type. In some cases, you may need to explicitly convert +`StringLiteral` values to `String`. ```mojo # Variable is type `StringLiteral` @@ -374,7 +385,7 @@ var s1 = "Example" var s2: String = "Example" # Variable is type `String` -var s3 = str("Example") +var s3 = String("Example") ``` ## Booleans @@ -428,7 +439,7 @@ same tuple from the previous example with implicit typing instead of explicit, we must also convert `"Example"` from type `StringLiteral` to type `String`. ```mojo -example_tuple = (1, str("Example")) +example_tuple = (1, String("Example")) s = example_tuple.get[1, String]() print(s) ``` @@ -672,7 +683,7 @@ results in undefined behavior, so you should always guard a call to `value()` inside a conditional that checks whether a value exists. ```mojo -var opt: Optional[String] = str("Testing") +var opt: Optional[String] = String("Testing") if opt: var value_ref = opt.value() print(value_ref) @@ -689,7 +700,7 @@ value if there is one, or a user-specified default value otherwise: var custom_greeting: Optional[String] = None print(custom_greeting.or_else("Hello")) -custom_greeting = str("Hi") +custom_greeting = String("Hi") print(custom_greeting.or_else("Hello")) ``` diff --git a/docs/manual/values/lifetimes.mdx b/docs/manual/values/lifetimes.mdx index 3c1871c0d7..bd96d45b95 100644 --- a/docs/manual/values/lifetimes.mdx +++ b/docs/manual/values/lifetimes.mdx @@ -425,7 +425,7 @@ for i in range(len(nums)): (You can find the code for the `List` iterator in the [Mojo -repo](https://github.com/modularml/mojo/blob/main/stdlib/src/collections/list.mojo#L63).) +repo](https://github.com/modular/mojo/blob/main/stdlib/src/collections/list.mojo#L63).) #### Parametric mutability of return values diff --git a/docs/manual/values/ownership.mdx b/docs/manual/values/ownership.mdx index e8d201e8b6..817f43ef4c 100644 --- a/docs/manual/values/ownership.mdx +++ b/docs/manual/values/ownership.mdx @@ -256,7 +256,7 @@ fn append_twice(mut s: String, other: String): s += other fn invalid_access(): - var my_string = str("o") + var my_string = String("o") # error: passing `my_string` mut is invalid since it is also passed # read. @@ -274,8 +274,8 @@ reference (or need to pass the same value to two arguments) is to make a copy: ```mojo fn valid_access(): - var my_string = str("o") - var other_string = str(my_string) + var my_string = String("o") + var other_string = String(my_string) append_twice(my_string, other_string) print(my_string) ``` diff --git a/docs/notebooks/index.mdx b/docs/notebooks/index.mdx index 636b8e4a25..0b88575238 100644 --- a/docs/notebooks/index.mdx +++ b/docs/notebooks/index.mdx @@ -17,7 +17,7 @@ listing: --- The following pages are rendered from the Jupyter notebooks that are [available -on GitHub](https://github.com/modularml/mojo/tree/main/examples/notebooks). +on GitHub](https://github.com/modular/mojo/tree/main/examples/notebooks).


diff --git a/docs/roadmap.md b/docs/roadmap.md index 46df347afd..764e99495e 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -29,7 +29,7 @@ In the near-term, we will **not** prioritize "general goodness" work such as: - Tackling broad Python ecosystem challenges like packaging. If you have encountered any bugs with current Mojo behavior, please -[submit an issue on GitHub](https://github.com/modularml/mojo/issues). +[submit an issue on GitHub](https://github.com/modular/mojo/issues). If you have ideas about how to improve the core Mojo features, we prefer that you first look for similar topics or start a new conversation about it @@ -148,7 +148,7 @@ When we get here, we will discuss what the right default is: for example, is full Python hash-table dynamism the default? Or do we use a more efficient model by default (e.g. vtable-based dispatch and explicitly declared stored properties) and allow opt'ing into dynamism with a `@dynamic` decorator on the -class. More discussion is [in this proposal](https://github.com/modularml/mojo/blob/main/proposals/mojo-and-dynamism.md). +class. More discussion is [in this proposal](https://github.com/modular/mojo/blob/main/proposals/mojo-and-dynamism.md). ## C/C++ Interop @@ -472,5 +472,5 @@ converting string literals to `String` values. For example: ```mojo var h: String = "hello" # or -print(g or str("hello")) +print(g or String("hello")) ``` diff --git a/docs/tools/debugging.mdx b/docs/tools/debugging.mdx index 6672ded32d..2a761c6f88 100644 --- a/docs/tools/debugging.mdx +++ b/docs/tools/debugging.mdx @@ -26,7 +26,7 @@ There are several ways to start a debug session in VS Code. To start debugging, you'll need to have a Mojo project to debug. There are a number of examples ranging from simple to complex in the [Mojo repo on -GitHub](https://github.com/modularml/mojo). +GitHub](https://github.com/modular/mojo). :::note **VS Code veteran?** diff --git a/docs/tools/testing.mdx b/docs/tools/testing.mdx index 287e40c690..f444d44d5a 100644 --- a/docs/tools/testing.mdx +++ b/docs/tools/testing.mdx @@ -2,6 +2,7 @@ title: Testing sidebar_position: 2 description: Testing Mojo programs. +github_url: https://github.com/modular/mojo/tree/nightly/examples/testing --- Mojo includes a framework for developing and executing unit tests. The framework @@ -66,7 +67,7 @@ mojo test test_quickstart.mojo You should see output similar to this (note that this example elides the full filesystem paths from the output shown): -``` +```output Testing Time: 1.193s Total Discovered Tests: 2 @@ -92,15 +93,20 @@ its error message. ### Next steps -* [The `testing` module](#the-testing-module) describes the assertion +- [The `testing` module](#the-testing-module) describes the assertion functions available to help implement tests. -* [Writing unit tests](#writing-unit-tests) shows how to write unit tests and +- [Writing unit tests](#writing-unit-tests) shows how to write unit tests and organize them into test files. -* [The `mojo test` command](#the-mojo-test-command) describes how to execute +- [The `mojo test` command](#the-mojo-test-command) describes how to execute and collect lists of tests. -* [Writing API documentation tests](#writing-api-documentation-tests) +- [Writing API documentation tests](#writing-api-documentation-tests) discusses how to use the Mojo testing framework to test code examples in your API documentation. +- The public [GitHub repo](https://github.com/modular/mojo/tree/nightly) + contains an [example + project](https://github.com/modular/mojo/tree/nightly/examples/testing) to + demonstrate both unit testing and docstring testing. Several of the examples + shown later are based on this project. ## The `testing` module @@ -108,15 +114,15 @@ The Mojo standard library includes a [`testing`](/mojo/stdlib/testing/testing/) module that defines several assertion functions for implementing tests. Each assertion returns `None` if its condition is met or raises an error if it isn't. -* [`assert_true()`](/mojo/stdlib/testing/testing/assert_true): +- [`assert_true()`](/mojo/stdlib/testing/testing/assert_true): Asserts that the input value is `True`. -* [`assert_false()`](/mojo/stdlib/testing/testing/assert_false): +- [`assert_false()`](/mojo/stdlib/testing/testing/assert_false): Asserts that the input value is `False`. -* [`assert_equal()`](/mojo/stdlib/testing/testing/assert_equal): +- [`assert_equal()`](/mojo/stdlib/testing/testing/assert_equal): Asserts that the input values are equal. -* [`assert_not_equal()`](/mojo/stdlib/testing/testing/assert_not_equal): +- [`assert_not_equal()`](/mojo/stdlib/testing/testing/assert_not_equal): Asserts that the input values are not equal. -* [`assert_almost_equal()`](/mojo/stdlib/testing/testing/assert_almost_equal): +- [`assert_almost_equal()`](/mojo/stdlib/testing/testing/assert_almost_equal): Asserts that the input values are equal up to a tolerance. The boolean assertions report a basic error message when they fail. @@ -191,8 +197,7 @@ Error: AssertionError: Didn't raise at Expression [4] wrapper:18:23 The example above assigns the return value from `inc()` to a [*discard pattern*](/mojo/manual/lifecycle/death#explicit-lifetimes). -Without it, the Mojo compiler detects that the return value is unused and -optimizes the code to eliminate the function call. +Without it, the Mojo compiler reports a warning that the return value is unused. ::: @@ -222,11 +227,11 @@ Error: invalid value A Mojo unit test is simply a function that fulfills all of these requirements: -* Has a name that starts with `test_`. -* Accepts no arguments. -* Returns either `None` or a value of type `object`. -* Raises an error to indicate test failure. -* Is defined at the module scope, not as a Mojo struct method. +- Has a name that starts with `test_`. +- Accepts no arguments. +- Returns either `None` or a value of type `object`. +- Raises an error to indicate test failure. +- Is defined at the module scope, not as a Mojo struct method. You can use either `def` or `fn` to define a test function. Because a test function always raises an error to indicate failure, any test function defined @@ -269,9 +274,9 @@ The unique identity of a unit test consists of the path of the test file and the name of the test function, separated by `::`. So the test IDs from the example above are: -* `test_my_target_module.mojo::test_validate_input()` -* `test_my_target_module.mojo::test_convert_input()` -* `test_my_target_module.mojo::test_convert_error()` +- `test_my_target_module.mojo::test_validate_input()` +- `test_my_target_module.mojo::test_convert_input()` +- `test_my_target_module.mojo::test_convert_error()` ## The `mojo test` command @@ -283,18 +288,19 @@ command for running tests or collecting a list of tests. By default, the `mojo test` command runs the tests that you specify using one of the following: -* A single test ID with either an absolute or relative file path, to run only +- A single test ID with either an absolute or relative file path, to run only that test. -* A single absolute or relative file path, to run all tests in that file. -* A single absolute or relative directory path, to recurse through that +- A single absolute or relative file path, to run all tests in that file. +- A single absolute or relative directory path, to recurse through that directory hierarchy and run all tests found. If needed, you can optionally use the `-I` option one or more times to append additional paths to the list of directories searched to import Mojo modules and -packages. For example, consider a project with the following directory -structure: +packages. Consider the [example testing +project](https://github.com/modular/mojo/tree/nightly/examples/testing) in +GitHub, which has the following directory structure: -``` +```output . ├── src │   ├── example.mojo @@ -307,11 +313,14 @@ structure: └── test_inc.mojo ``` -From the project root directory, you could execute all of the tests in the -`test` directory like this: +From the project root directory, you can execute all of the tests in the `test` +directory like this: +```bash +mojo test -I src test ``` -$ mojo test -I src test + +```output Testing Time: 3.433s Total Discovered Tests: 4 @@ -321,10 +330,13 @@ Failed : 0 (0.00%) Skipped: 0 (0.00%) ``` -You could run the tests contained in only the `test_dec.mojo` file like this: +You can run the tests contained in only the `test_dec.mojo` file like this: +```bash +mojo test -I src test/my_math/test_dec.mojo ``` -$ mojo test -I src test/my_math/test_dec.mojo + +```output Testing Time: 1.175s Total Discovered Tests: 2 @@ -334,11 +346,14 @@ Failed : 0 (0.00%) Skipped: 0 (0.00%) ``` -And you could run a single test from a file by providing its fully qualified +And you can run a single test from a file by providing its fully qualified ID like this: +```bash +mojo test -I src 'test/my_math/test_dec.mojo::test_dec_valid()' ``` -$ mojo test -I src 'test/my_math/test_dec.mojo::test_dec_valid()' + +```output Testing Time: 0.66s Total Discovered Tests: 1 @@ -353,9 +368,11 @@ Skipped: 0 (0.00%) By including the `--collect-only` or `--co` option, you can use `mojo test` to discover and print a list of tests. -As an example, consider the project structure shown in the -[Running tests](#running-tests) section. The following command produces a list -of all of the tests defined in the `test` directory hierarchy. +Consider the [example testing +project](https://github.com/modular/mojo/tree/nightly/examples/testing) +directory structure shown in the [Running tests](#running-tests) section. The +following command produces a list of all of the tests defined in the `test` +directory hierarchy. ```bash mojo test --co test @@ -364,7 +381,7 @@ mojo test --co test The output shows the hierarchy of directories, test files, and individual tests (note that this example elides the full filesystem paths from the output shown): -``` +```output @@ -380,7 +397,7 @@ By default `mojo test` produces concise, human-readable output. Alternatively you can produce JSON formatted output more suitable for input to other tools by including the `--diagnostic-format json` option. -For example, you could run the tests in the `test_quickstart.mojo` file shown +For example, you can run the tests in the `test_quickstart.mojo` file shown in the [Get started](#get-started) section with JSON formatted output using this command: @@ -392,7 +409,7 @@ The output shows the detailed results for each individual test and summary results (note that this example elides the full filesystem paths from the output shown): -``` +```json { "children": [ { @@ -421,19 +438,21 @@ output shown): } ``` -You can also produce JSON output for test collection as well. As an example, -consider the project structure shown in the [Running tests](#running-tests) -section. The following command collects a list in JSON format of all of the -tests defined in the `test` directory hierarchy: +You can also produce JSON output for test collection as well. Consider the +[example testing +project](https://github.com/modular/mojo/tree/nightly/examples/testing) +directory structure shown in the [Running tests](#running-tests) section. The +following command collects a list in JSON format of all of the tests defined in +the `test` directory hierarchy: ```bash mojo test --diagnostic-format json --co test ``` -The output would appear as follows (note that this example elides the full +The output will appear as follows (note that this example elides the full filesystem paths from the output shown): -``` +```json { "children": [ { @@ -442,18 +461,18 @@ filesystem paths from the output shown): "id": "ROOT_DIR/test/my_math/test_dec.mojo::test_dec_valid()", "location": { "endColumn": 5, - "endLine": 5, + "endLine": 19, "startColumn": 5, - "startLine": 5 + "startLine": 19 } }, { "id": "ROOT_DIR/test/my_math/test_dec.mojo::test_dec_min()", "location": { "endColumn": 5, - "endLine": 9, + "endLine": 24, "startColumn": 5, - "startLine": 9 + "startLine": 24 } } ], @@ -465,18 +484,18 @@ filesystem paths from the output shown): "id": "ROOT_DIR/test/my_math/test_inc.mojo::test_inc_valid()", "location": { "endColumn": 5, - "endLine": 5, + "endLine": 19, "startColumn": 5, - "startLine": 5 + "startLine": 19 } }, { "id": "ROOT_DIR/test/my_math/test_inc.mojo::test_inc_max()", "location": { "endColumn": 5, - "endLine": 9, + "endLine": 24, "startColumn": 5, - "startLine": 9 + "startLine": 24 } } ], @@ -539,7 +558,7 @@ assert_equals(b, 2) Sometimes you might want to execute a line of code as part of the test but *not* display that line in the API documentation. To achieve this, prefix the line of -code with `%#`. For example, you could use this technique to omit `import` +code with `%#`. For example, you can use this technique to omit `import` statements and assertion functions from the documentation. ```` @@ -560,7 +579,7 @@ print(c) ### Documentation test suites and scoping The Mojo testing framework treats each docstring as a separate *test suite*. -In other words, a single test suite could correspond to the docstring for an +In other words, a single test suite can correspond to the docstring for an individual package, module, function, struct, struct method, etc. Each executable code block within a given docstring is a single test of the same @@ -606,43 +625,45 @@ suite within the same module. ### Documentation test identifiers The format of a documentation test identifier is `@::`. -This is best explained by an example. Consider the project structure shown in -the [Running tests](#running-tests) section. The source files in the `src` -directory might contain docstrings for the `my_math` package, the `utils.mojo` -module, and the individual functions within that module. You could collect the -full list of tests by executing: +This is best explained by an example. Consider the [example testing +project](https://github.com/modular/mojo/tree/nightly/examples/testing) +directory structure shown in the [Running tests](#running-tests) section. The +source files in the `src` directory might contain docstrings for the `my_math` +package, the `utils.mojo` module, and the individual functions within that +module. You can collect the full list of tests by executing: -``` +```bash mojo test --co src ``` The output shows the hierarchy of directories, test files, and individual tests (note that this example elides the full filesystem paths from the output shown): -``` +```output + - - - - - - + + + + + + ``` Several different test suites appear in this result: -| Test suite scope | File | Test suite name | -| ---------------- | --------------------------- | ---------------------------------------------------- | -| Package | `src/my_math/__init__.mojo` | `__doc__` | -| Module | `src/my_math/utils.mojo` | `__doc__` | -| Function | `src/my_math/utils.mojo` | `inc(stdlib\3A\3Abuiltin\3A\3Aint\3A\3AInt).__doc__` | +| Test suite scope | File | Test suite name | +| ---------------- | --------------------------- | ------------------------ | +| Package | `src/my_math/__init__.mojo` | `__doc__` | +| Module | `src/my_math/utils.mojo` | `__doc__` | +| Function | `src/my_math/utils.mojo` | `inc(\3A\3AInt).__doc__` | Then within a specific test suite, tests are numbered sequentially in the order they appear in the docstring, starting with 0. diff --git a/examples/life/magic.lock b/examples/life/magic.lock index fda145688e..af20cdf69e 100644 --- a/examples/life/magic.lock +++ b/examples/life/magic.lock @@ -17,7 +17,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.8.0-hb921021_15.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.8.0-h205f482_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.8.1-h1a47875_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.10.6-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.0-h4e1184b_5.conda @@ -26,10 +26,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.15.3-h831e299_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.11.0-h11f4f37_12.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.7-hf454442_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.1-h4e1184b_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.2-h4e1184b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.2-h4e1184b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.29.7-hd92328a_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.458-hc430e4a_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.29.8-h8570fcd_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.458-h7001638_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda @@ -78,7 +78,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h59595ed_1003.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-10.1.0-h0b3b770_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-10.2.0-h4bba637_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.7-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/httptools-0.6.4-py312h66e93f0_0.conda @@ -99,10 +99,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20240722.0-cxx17_hbbce691_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-18.1.0-hd595efa_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-18.1.0-h9d9f30d_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.22.5-he8f35ee_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-devel-0.22.5-he8f35ee_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.1.1-h1909e37_2.conda @@ -129,7 +129,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libgettextpo-devel-0.22.5-he02047a_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.33.0-h2b5623c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.33.0-h0121fbd_1.conda @@ -145,13 +145,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.5-h4ab18f5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopus-1.3.1-h7f98852_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.45-h943b412_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.28.3-h6128344_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hbbce691_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc60ed4a_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.2-hee588c1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.48.0-hee588c1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda @@ -160,7 +160,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-hd9ff511_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.9.0-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.50.0-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.5.0-h851e524_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda @@ -170,17 +170,17 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py312h178313f_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/max-core-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/max-python-25.1.0.dev2025011105-3.12release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/max-core-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/max-python-25.1.0.dev2025011705-3.12release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.9-hc50e24c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.1.0-py312h178313f_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/multiprocess-0.70.15-py312h98912ed_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.3-h5fbd93e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda @@ -259,14 +259,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.1-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.0-pyh31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.34.0-h31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/uvloop-0.21.0-py312h66e93f0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/watchfiles-1.0.4-py312h12e396e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/websockets-14.1-py312h66e93f0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.0-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.2-py312h66e93f0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.5-he73a12e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.10-h4f16b4b_1.conda @@ -293,7 +293,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aom-3.9.1-hcccb83c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/attr-2.5.1-h4e544f5_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-auth-0.8.0-h2cb9fb3_15.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-auth-0.8.0-hb7ec8d5_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-cal-0.8.1-h740c5af_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-common-0.10.6-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-compression-0.3.0-h0f0193d_5.conda @@ -302,10 +302,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-io-0.15.3-h1a307af_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-mqtt-0.11.0-h5f50e26_12.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-s3-0.7.7-h2080895_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-sdkutils-0.2.1-h0f0193d_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-sdkutils-0.2.2-h0f0193d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-checksums-0.2.2-h0f0193d_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-crt-cpp-0.29.7-h8a4e35f_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-sdk-cpp-1.11.458-h849ce1a_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-crt-cpp-0.29.8-h92ee776_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-sdk-cpp-1.11.458-h90ecb4a_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/azure-core-cpp-1.14.0-h1887c18_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/azure-identity-cpp-1.10.0-h47b0b28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/azure-storage-blobs-cpp-12.13.0-h185ecfd_1.conda @@ -354,7 +354,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/graphite2-1.3.13-h2f0025b_1003.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/harfbuzz-10.1.0-hbdc1db7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/harfbuzz-10.2.0-h785c1aa_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.7-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/httptools-0.6.4-py312hb2c0f52_0.conda @@ -375,10 +375,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.0.0-h4de3ea5_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20240722.0-cxx17_h18dbdb1_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-18.1.0-hb7781cd_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-acero-18.1.0-h3b568fd_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-dataset-18.1.0-h3b568fd_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-substrait-18.1.0-h1e9d426_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-18.1.0-h47f80e1_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-acero-18.1.0-h3b568fd_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-dataset-18.1.0-h3b568fd_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-substrait-18.1.0-h1e9d426_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libasprintf-0.22.5-h87f4aca_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libasprintf-devel-0.22.5-h87f4aca_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libavif16-1.1.1-h3b0c220_2.conda @@ -405,7 +405,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgettextpo-devel-0.22.5-h0a1ffab_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-14.2.0-he9431aa_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-14.2.0-hb6113d0_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgoogle-cloud-2.33.0-hccf9d24_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgoogle-cloud-storage-2.33.0-hb9b2b65_1.conda @@ -421,13 +421,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libogg-1.3.5-h0b9eccb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.28-pthreads_h9d3fd7e_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopus-1.3.1-hf897c2e_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libparquet-18.1.0-hfc78867_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libparquet-18.1.0-hfc78867_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.45-hec79eb8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-5.28.3-h44a3b7b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libre2-11-2024.07.02-h18dbdb1_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsndfile-1.2.2-h79657aa_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.2-h5eb1b54_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.48.0-h5eb1b54_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libssh2-1.11.1-ha41c0db_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda @@ -436,7 +436,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.0-h88f7998_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libutf8proc-2.9.0-h86ecc28_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.50.0-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvorbis-1.3.7-h01db608_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.5.0-h0886dbf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda @@ -446,17 +446,17 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lz4-c-1.10.0-h5ad3122_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.2-py312h74ce7d3_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/max-core-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/max-python-25.1.0.dev2025011105-3.12release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/max-core-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/max-python-25.1.0.dev2025011705-3.12release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpg123-1.32.9-h65af167_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/multidict-6.1.0-py312hcc812fe_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/multiprocess-0.70.15-py312hdd3e373_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-1.26.4-py312h470d778_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.3-h3f56577_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.4.0-hd08dc88_1.conda @@ -470,7 +470,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/opusfile-0.12-hf55b2d5_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/orc-2.0.3-hdd485aa_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pandas-2.2.3-py312ha2895bd_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pandas-2.2.3-py312ha2895bd_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.44-h070dd5b_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-11.1.0-py312h719f0cf_0.conda @@ -535,14 +535,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.1-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.0-pyh31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.34.0-h31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uvloop-0.21.0-py312hb2c0f52_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/watchfiles-1.0.4-py312h8cbf658_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/websockets-14.1-py312hb2c0f52_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-1.17.0-py312hb2c0f52_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-1.17.2-py312hb2c0f52_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libice-1.1.2-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libsm-1.2.5-h0808dbd_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libx11-1.8.10-hca56bd8_1.conda @@ -566,7 +566,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.9.1-h7bae524_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.8.0-h8bc59a9_15.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.8.0-hfc2798a_16.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.8.1-hc8a0bd2_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.10.6-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.3.0-hc8a0bd2_5.conda @@ -575,10 +575,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.15.3-haba67d1_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.11.0-h24f418c_12.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.7.7-h1be5864_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.1-hc8a0bd2_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.2-hc8a0bd2_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.2.2-hc8a0bd2_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.29.7-h19a973c_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-he0ff2e4_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.29.8-h23176ea_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-h794939a_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-core-cpp-1.14.0-hd50102c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-identity-cpp-1.10.0-hc602bab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.13.0-h7585a09_1.conda @@ -625,7 +625,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/graphite2-1.3.13-hebf3989_1003.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-10.1.0-h9df47df_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-10.2.0-ha0dd535_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.7-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/httptools-0.6.4-py312hea69d52_0.conda @@ -643,10 +643,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.16-ha0e7c42_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20240722.0-cxx17_h07bc746_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-18.1.0-h0ad35bc_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-18.1.0-hf3eb8e5_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libasprintf-0.22.5-h8414b35_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libasprintf-devel-0.22.5-h8414b35_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libavif16-1.1.1-h45b7238_2.conda @@ -657,7 +657,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-26_osxarm64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.11.1-h73640d1_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.6-ha82da77_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.23-hec38601_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20240808-pl5321hafb1f1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda @@ -669,7 +669,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgettextpo-devel-0.22.5-h8414b35_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.82.2-h07bd6cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.82.2-hdff4504_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.33.0-hdbe95d5_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-storage-2.33.0-h7081f7f_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.67.1-h0a426d6_1.conda @@ -684,38 +684,38 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libogg-1.3.5-h99b78c6_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopus-1.3.1-h27ca646_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.45-h3783ad8_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-5.28.3-h3bd63a1_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libre2-11-2024.07.02-h07bc746_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsndfile-1.2.2-h9739721_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.48.0-h3f77e49_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.21.0-h64651cc_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.9.0-h5505292_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.50.0-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libvorbis-1.3.7-h9f76cd9_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.13.5-h178c5d8_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.6-hdb05f8b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.7-hdb05f8b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.2-py312h998013c_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/max-core-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/max-python-25.1.0.dev2025011105-3.12release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/max-core-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/max-python-25.1.0.dev2025011705-3.12release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mpg123-1.32.9-hf642e45_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/multidict-6.1.0-py312hdb8e49c_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/multiprocess-0.70.15-py312h02f2b3b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-1.26.4-py312h8442bc7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.3-h8a3d83b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda @@ -792,14 +792,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.1-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.0-pyh31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.34.0-h31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uvloop-0.21.0-py312h0bf5046_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/watchfiles-1.0.4-py312hcd83bfe_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/websockets-14.1-py312hea69d52_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.0-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.2-py312hea69d52_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xxhash-0.8.2-hb547adb_0.conda @@ -1045,55 +1045,55 @@ packages: license_family: MIT size: 56354 timestamp: 1734348889193 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.8.0-hb921021_15.conda - sha256: 537006ad6d5097c134494166a6a1dc1451d5d050878d7b82cef498bfda40ba8a - md5: c79d50f64cffa5ad51ecc1a81057962f +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.8.0-h205f482_16.conda + sha256: 0695c285b70385913dc7dce05888d3ad1378247b65273bdab509494a2f8f0eea + md5: b0815d37ab812ade9c07239da7c3c369 depends: - __glibc >=2.17,<3.0.a0 - aws-c-cal >=0.8.1,<0.8.2.0a0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-http >=0.9.2,<0.9.3.0a0 - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - libgcc >=13 arch: x86_64 platform: linux license: Apache-2.0 license_family: Apache - size: 107614 - timestamp: 1734021692519 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-auth-0.8.0-h2cb9fb3_15.conda - sha256: 4ce859dc9ff128bf5515604c43f33fb511386022fc9765ca077990f2a3f23df5 - md5: e524686ace966acefb5b8cbc6e8b3daa + size: 107478 + timestamp: 1736592747413 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-auth-0.8.0-hb7ec8d5_16.conda + sha256: 5a2a2691f2e0028e8549b97a340d7e6c502e0d54b7deba00fad505812663a98b + md5: 56f166780076db46c5e273988693d8a3 depends: - aws-c-cal >=0.8.1,<0.8.2.0a0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-http >=0.9.2,<0.9.3.0a0 - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - libgcc >=13 arch: aarch64 platform: linux license: Apache-2.0 license_family: Apache - size: 111854 - timestamp: 1734021745104 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.8.0-h8bc59a9_15.conda - sha256: 0e41e56b662e76e024182adebcd91d09a4d38a83b35217c84e4967354dfff9a2 - md5: f688b8893c20ad9477a19e7ce614014a + size: 112264 + timestamp: 1736592695540 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.8.0-hfc2798a_16.conda + sha256: cdcd932332311db1b614289101b61e32cbae2478ba2bf85763aaf5a5cc7db6f6 + md5: 1e9a41d5296f50c08ae511d61fddef85 depends: - __osx >=11.0 - aws-c-cal >=0.8.1,<0.8.2.0a0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-http >=0.9.2,<0.9.3.0a0 - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 arch: arm64 platform: osx license: Apache-2.0 license_family: Apache - size: 92507 - timestamp: 1734021831330 + size: 92547 + timestamp: 1736592866387 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.8.1-h1a47875_3.conda sha256: 095ac824ea9303eff67e04090ae531d9eb33d2bf8f82eaade39b839c421e16e8 md5: 55a8561fdbbbd34f50f57d9be12ed084 @@ -1436,9 +1436,9 @@ packages: license_family: Apache size: 97598 timestamp: 1734146239038 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.1-h4e1184b_4.conda - sha256: df586f42210af1134b1c88ff4c278c3cb6d6c807c84eac48860062464b28554d - md5: a5126a90e74ac739b00564a4c7ddcc36 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.2-h4e1184b_0.conda + sha256: 0424e380c435ba03b5948d02e8c958866c4eee50ed29e57f99473a5f795a4cfc + md5: dcd498d493818b776a77fbc242fbf8e4 depends: - __glibc >=2.17,<3.0.a0 - aws-c-common >=0.10.6,<0.10.7.0a0 @@ -1447,11 +1447,11 @@ packages: platform: linux license: Apache-2.0 license_family: Apache - size: 56094 - timestamp: 1733994449690 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-sdkutils-0.2.1-h0f0193d_4.conda - sha256: ede8e782467c87ac80ceb9c9af9e917d121b7d8b8c698186d18e3cecd36f2210 - md5: 53e798d720dd78b78847a7b2fdb05fc9 + size: 55911 + timestamp: 1736535960724 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-sdkutils-0.2.2-h0f0193d_0.conda + sha256: fba38e469457764afcb94aa84d4d7788e6b5fa1554d34b05c904d2245fdd3c81 + md5: a78928881c652facde2a13ec6e776f3c depends: - aws-c-common >=0.10.6,<0.10.7.0a0 - libgcc >=13 @@ -1459,11 +1459,11 @@ packages: platform: linux license: Apache-2.0 license_family: Apache - size: 58621 - timestamp: 1733994421495 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.1-hc8a0bd2_4.conda - sha256: de98343ce42d2e569b3380292d20f47bf39bda08aadabcbb8e650d3f38fd742f - md5: 22f72f8cd7ead211304ac17d337d96e0 + size: 58221 + timestamp: 1736536003041 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.2-hc8a0bd2_0.conda + sha256: ea4f0f1e99056293c69615f581a997d65ba7e229e296e402e0d8ef750648a5b5 + md5: e7b5498ac7b7ab921a907be38f3a8080 depends: - __osx >=11.0 - aws-c-common >=0.10.6,<0.10.7.0a0 @@ -1471,8 +1471,8 @@ packages: platform: osx license: Apache-2.0 license_family: Apache - size: 49664 - timestamp: 1733994553014 + size: 49872 + timestamp: 1736536152332 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.2-h4e1184b_4.conda sha256: 1ed9a332d06ad595694907fad2d6d801082916c27cd5076096fda4061e6d24a8 md5: 74e8c3e4df4ceae34aa2959df4b28101 @@ -1510,9 +1510,9 @@ packages: license_family: Apache size: 70186 timestamp: 1733994496998 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.29.7-hd92328a_7.conda - sha256: 094cd81f1e5ba713e9e7a272ee52b5dde3ccc4842ea90f19c0354a00bbdac3d9 - md5: 02b95564257d5c3db9c06beccf711f95 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.29.8-h8570fcd_1.conda + sha256: ff8f08bc615d3ef6d970df80988200b3ecee76ecfa4885109cd82b30176cfda9 + md5: f21296b496cca1c1fa426b9a3b676e79 depends: - __glibc >=2.17,<3.0.a0 - aws-c-auth >=0.8.0,<0.8.1.0a0 @@ -1523,18 +1523,18 @@ packages: - aws-c-io >=0.15.3,<0.15.4.0a0 - aws-c-mqtt >=0.11.0,<0.11.1.0a0 - aws-c-s3 >=0.7.7,<0.7.8.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - libgcc >=13 - libstdcxx >=13 arch: x86_64 platform: linux license: Apache-2.0 license_family: Apache - size: 354703 - timestamp: 1734177883319 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-crt-cpp-0.29.7-h8a4e35f_7.conda - sha256: 5ba9188e0cb4e3faff9bc96774febb040aa3b802aedba29d847e00e7b5eab84e - md5: d77a9e3d7ce15399903e92825fd651b5 + size: 354328 + timestamp: 1736598991291 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-crt-cpp-0.29.8-h92ee776_1.conda + sha256: 114ac89d3936bf801dcbd488ba0b468c7e113a407cb1ee5898259a5202b7e750 + md5: 63546051b5687f793ae977c7994e1339 depends: - aws-c-auth >=0.8.0,<0.8.1.0a0 - aws-c-cal >=0.8.1,<0.8.2.0a0 @@ -1544,18 +1544,18 @@ packages: - aws-c-io >=0.15.3,<0.15.4.0a0 - aws-c-mqtt >=0.11.0,<0.11.1.0a0 - aws-c-s3 >=0.7.7,<0.7.8.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - libgcc >=13 - libstdcxx >=13 arch: aarch64 platform: linux license: Apache-2.0 license_family: Apache - size: 283154 - timestamp: 1734177845248 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.29.7-h19a973c_7.conda - sha256: 8269e6746eb3a5d15b732a3983888bf98dfc1f6594e95250fc8d16b43cfd5ff9 - md5: 95714136bef3e917bd5a2942d4682b20 + size: 284664 + timestamp: 1736598964131 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.29.8-h23176ea_1.conda + sha256: db6a31078bb82fb12044d7706239c003568273729f7ba4971c1479b7926ada82 + md5: 31fdd3ffb00f5472196fa95ef08087b7 depends: - __osx >=11.0 - aws-c-auth >=0.8.0,<0.8.1.0a0 @@ -1566,23 +1566,23 @@ packages: - aws-c-io >=0.15.3,<0.15.4.0a0 - aws-c-mqtt >=0.11.0,<0.11.1.0a0 - aws-c-s3 >=0.7.7,<0.7.8.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - libcxx >=18 arch: arm64 platform: osx license: Apache-2.0 license_family: Apache - size: 236249 - timestamp: 1734178020924 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.458-hc430e4a_4.conda - sha256: 2dc09f6f9c49127b5f96e7535b64a9c521b944d76d8b7d03d48ae80257ac1cea - md5: aeefac461bea1f126653c1285cf5af08 + size: 236269 + timestamp: 1736599024242 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.458-h7001638_5.conda + sha256: 849524b09865e84d6926aa814944cf71511aa4a00fffc5ad174c286d5dfac5f0 + md5: fc01d77a7f383b2915f276c73b7d0934 depends: - __glibc >=2.17,<3.0.a0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-event-stream >=0.5.0,<0.5.1.0a0 - aws-checksums >=0.2.2,<0.2.3.0a0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - libcurl >=8.11.1,<9.0a0 - libgcc >=13 - libstdcxx >=13 @@ -1592,16 +1592,16 @@ packages: platform: linux license: Apache-2.0 license_family: Apache - size: 3060561 - timestamp: 1734093737431 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-sdk-cpp-1.11.458-h849ce1a_4.conda - sha256: 51b9e9df8cbab4a13a1b9d39d6ef5ed162aaa29c09a745810e00bbe92e1045c1 - md5: cda7747f4398be8d1fb37362815917a7 + size: 3088636 + timestamp: 1736598504343 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-sdk-cpp-1.11.458-h90ecb4a_5.conda + sha256: 9467acd0f2df74ea7472aebdfb8b5656a8d403abad2edbce9743d6e88c94fd10 + md5: 33f86f8de1d8cd40f8fe628dc0784437 depends: - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-event-stream >=0.5.0,<0.5.1.0a0 - aws-checksums >=0.2.2,<0.2.3.0a0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - libcurl >=8.11.1,<9.0a0 - libgcc >=13 - libstdcxx >=13 @@ -1611,17 +1611,17 @@ packages: platform: linux license: Apache-2.0 license_family: Apache - size: 2920625 - timestamp: 1734093552712 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-he0ff2e4_4.conda - sha256: 535b970aaa13be45f8cab8205c59f044b17364111c41a227f061775a5c834e18 - md5: 0981ed87098b149bdb7d99a4a3fd0e58 + size: 2925443 + timestamp: 1736598526637 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-h794939a_5.conda + sha256: 2b1e7d5a45e82604bfdb6de63c53cf0e9495f596cfd90e644a1e67910de7f91c + md5: a2374b4182bf5b2d08b2903393d0c487 depends: - __osx >=11.0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-event-stream >=0.5.0,<0.5.1.0a0 - aws-checksums >=0.2.2,<0.2.3.0a0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - libcurl >=8.11.1,<9.0a0 - libcxx >=18 - libzlib >=1.3.1,<2.0a0 @@ -1630,8 +1630,8 @@ packages: platform: osx license: Apache-2.0 license_family: Apache - size: 2826534 - timestamp: 1734094018287 + size: 2824168 + timestamp: 1736598935034 - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda sha256: fe07debdb089a3db17f40a7f20d283d75284bb4fc269ef727b8ba6fc93f7cb5a md5: 0a8838771cc2e985cd295e01ae83baf1 @@ -2836,9 +2836,9 @@ packages: license_family: MIT size: 52000 timestamp: 1733298867359 -- conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-10.1.0-h0b3b770_0.conda - sha256: da2b3b3c1fc34444fa484ed227e4c2d313cdff2ed3ce5a45d01f07b78f9273f8 - md5: ab1d7d56034814f4c3ed9f69f8c68806 +- conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-10.2.0-h4bba637_0.conda + sha256: 94426eca8c60b43f57beb3338d3298dda09452c7a42314bbbb4ebfa552542a84 + md5: 9e38e86167e8b1ea0094747d12944ce4 depends: - __glibc >=2.17,<3.0.a0 - cairo >=1.18.2,<2.0a0 @@ -2849,15 +2849,16 @@ packages: - libgcc >=13 - libglib >=2.82.2,<3.0a0 - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 arch: x86_64 platform: linux license: MIT license_family: MIT - size: 1600521 - timestamp: 1733706966476 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/harfbuzz-10.1.0-hbdc1db7_0.conda - sha256: 69a269f04f72632f5949e422c2ff673e408a76a9bf451e4e4e58a0996e1e8e65 - md5: 881e8d9b31e1a7335d4dea4d66851bc0 + size: 1646987 + timestamp: 1736702906600 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/harfbuzz-10.2.0-h785c1aa_0.conda + sha256: fc89d8ef86311ca8d187b69cc4c5da3c140c38e638011951e951330830bebb99 + md5: d7acbb0500e1d73a29546bc476a4db0c depends: - cairo >=1.18.2,<2.0a0 - freetype >=2.12.1,<3.0a0 @@ -2867,15 +2868,16 @@ packages: - libgcc >=13 - libglib >=2.82.2,<3.0a0 - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 arch: aarch64 platform: linux license: MIT license_family: MIT - size: 1626591 - timestamp: 1733709685847 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-10.1.0-h9df47df_0.conda - sha256: 8b56a8e0847a2a86a80211f5c5e4f19d0d7fa0be12cc1a5337e555857757cc6d - md5: bbd10a18fb41d0892fbb3aa810b4937d + size: 1699707 + timestamp: 1736705741483 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-10.2.0-ha0dd535_0.conda + sha256: e9d148870adbe8efd9913fb036461d337609359b5d4474d0963d8ebe6b9789b2 + md5: 30377b8ff7d4e8a2c08be6957999c100 depends: - __osx >=11.0 - cairo >=1.18.2,<2.0a0 @@ -2885,12 +2887,13 @@ packages: - libcxx >=18 - libexpat >=2.6.4,<3.0a0 - libglib >=2.82.2,<3.0a0 + - libzlib >=1.3.1,<2.0a0 arch: arm64 platform: osx license: MIT license_family: MIT - size: 1357252 - timestamp: 1733707517728 + size: 1473375 + timestamp: 1736703265901 - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda sha256: ec89b7e5b8aa2f0219f666084446e1fb7b54545861e9caa892acb24d125761b5 md5: 2aa5ff7fa34a81b9196532c84c10d865 @@ -3358,13 +3361,13 @@ packages: license_family: Apache size: 1178260 timestamp: 1736008642885 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-18.1.0-hd595efa_7_cpu.conda - build_number: 7 - sha256: 554ffa338264c1dc34d95adb7eb856d50a2f25e7fa303a1a51e4372301b7c96f - md5: 08d4aff5ee6dee9a1b9ab13fca927697 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-18.1.0-h9d9f30d_8_cpu.conda + build_number: 8 + sha256: f6c72ce82d145cb94a1131b68547b88056fb48158a382f9ce763286fce53ee65 + md5: 1c9caae53b14a385b59e87687adad2d6 depends: - __glibc >=2.17,<3.0.a0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - aws-sdk-cpp >=1.11.458,<1.11.459.0a0 - azure-core-cpp >=1.14.0,<1.14.1.0a0 - azure-identity-cpp >=1.10.0,<1.10.1.0a0 @@ -3397,14 +3400,14 @@ packages: platform: linux license: Apache-2.0 license_family: APACHE - size: 8770256 - timestamp: 1735684696564 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-18.1.0-hb7781cd_7_cpu.conda - build_number: 7 - sha256: f6107506bd16788560b47a4d18c1457b4df30a49334364d32613fe3f53ba6cbb - md5: 98cf7127ca7b3854c5d1c8bef1ed6e53 - depends: - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + size: 8801586 + timestamp: 1736610546493 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-18.1.0-h47f80e1_8_cpu.conda + build_number: 8 + sha256: bf381dfa84e94ffce715c46352dd99f6f6ace69859b0efb822500f8882be429a + md5: daceef1881b4ddc72bb5b225a122c633 + depends: + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - aws-sdk-cpp >=1.11.458,<1.11.459.0a0 - azure-core-cpp >=1.14.0,<1.14.1.0a0 - azure-identity-cpp >=1.10.0,<1.10.1.0a0 @@ -3431,21 +3434,21 @@ packages: - zstd >=1.5.6,<1.6.0a0 constrains: - arrow-cpp <0.0a0 - - parquet-cpp <0.0a0 - apache-arrow-proc =*=cpu + - parquet-cpp <0.0a0 arch: aarch64 platform: linux license: Apache-2.0 license_family: APACHE - size: 8026714 - timestamp: 1735685336542 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-18.1.0-h0ad35bc_7_cpu.conda - build_number: 7 - sha256: 4fbdd8bb89d912bf03f10f9373a8d96a1cdd7a7851e107393418a3d2715bc27e - md5: 4ba2173203f44bbf03d19aaba6ed07d3 + size: 8045923 + timestamp: 1736611764958 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-18.1.0-hf3eb8e5_8_cpu.conda + build_number: 8 + sha256: 766e46b45520773db93ee1a91951cc135a85544bba738e7b378d31f16097753f + md5: fdc79871e6c243b819497337215416d9 depends: - __osx >=11.0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - aws-sdk-cpp >=1.11.458,<1.11.459.0a0 - azure-core-cpp >=1.14.0,<1.14.1.0a0 - azure-identity-cpp >=1.10.0,<1.10.1.0a0 @@ -3476,111 +3479,111 @@ packages: platform: osx license: Apache-2.0 license_family: APACHE - size: 5506699 - timestamp: 1735682962976 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_7_cpu.conda - build_number: 7 - sha256: 87ea5d6a84d922d73975dce8661fccf257e72e755175b12c30e1181a34e37987 - md5: 12d84228204c56fec6ed113288014d11 + size: 5497383 + timestamp: 1736608604724 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_8_cpu.conda + build_number: 8 + sha256: 126a6e78199311d99e38b9d633ce3e0290795ac68ce3ee8a9b91436c85c4095d + md5: 544759904898499f634f8f88a9907f88 depends: - __glibc >=2.17,<3.0.a0 - - libarrow 18.1.0 hd595efa_7_cpu + - libarrow 18.1.0 h9d9f30d_8_cpu - libgcc >=13 - libstdcxx >=13 arch: x86_64 platform: linux license: Apache-2.0 license_family: APACHE - size: 612463 - timestamp: 1735684749868 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-acero-18.1.0-h3b568fd_7_cpu.conda - build_number: 7 - sha256: 42cbfc87096f745d565d814d65b7228c82d985f1898859d5e456016d73e81c82 - md5: 4c1d8c3feea249782148d3cd6a25392e + size: 611558 + timestamp: 1736610592458 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-acero-18.1.0-h3b568fd_8_cpu.conda + build_number: 8 + sha256: c94844ab1d8fafe17775161283bd1fe7ab1f93f660fc5ba0c01bd33fe3d21eaf + md5: 7a8e6a363d2f39a2f3df3f181d12692d depends: - - libarrow 18.1.0 hb7781cd_7_cpu + - libarrow 18.1.0 h47f80e1_8_cpu - libgcc >=13 - libstdcxx >=13 arch: aarch64 platform: linux license: Apache-2.0 license_family: APACHE - size: 578222 - timestamp: 1735685424850 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_7_cpu.conda - build_number: 7 - sha256: 86e20cebfdb4f335e98265c1b88f5053bf3e3648768a317856295846bfdbf2b4 - md5: 3eaf71fe987de13061db795e03bb1a1c + size: 579798 + timestamp: 1736611846905 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_8_cpu.conda + build_number: 8 + sha256: 29196dc6b2e4488f98bd8950de6333efe5d1a9d0cc62e186694946766185475e + md5: 8db96829f8e427167f450c7467a1ba44 depends: - __osx >=11.0 - - libarrow 18.1.0 h0ad35bc_7_cpu + - libarrow 18.1.0 hf3eb8e5_8_cpu - libcxx >=18 arch: arm64 platform: osx license: Apache-2.0 license_family: APACHE - size: 485185 - timestamp: 1735683071232 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_7_cpu.conda - build_number: 7 - sha256: 99c12511fba79c7947f78d676eae5857659084f687f375f68bc20bd4cddb0a0e - md5: 0a81eb63d7cd150f598c752e86388d57 + size: 484442 + timestamp: 1736608695654 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_8_cpu.conda + build_number: 8 + sha256: fe50edf030b5ccbadec2bf8f90d4cdf32d63ec52ba26233fc2c8bfbe43df3b15 + md5: 894a5ed78728b77c997fefeee222ac4d depends: - __glibc >=2.17,<3.0.a0 - - libarrow 18.1.0 hd595efa_7_cpu - - libarrow-acero 18.1.0 hcb10f89_7_cpu + - libarrow 18.1.0 h9d9f30d_8_cpu + - libarrow-acero 18.1.0 hcb10f89_8_cpu - libgcc >=13 - - libparquet 18.1.0 h081d1f1_7_cpu + - libparquet 18.1.0 h081d1f1_8_cpu - libstdcxx >=13 arch: x86_64 platform: linux license: Apache-2.0 license_family: APACHE - size: 587497 - timestamp: 1735684880531 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-dataset-18.1.0-h3b568fd_7_cpu.conda - build_number: 7 - sha256: 13ba7d3d08015aa26569eca9e198e2f8b2a0cd2d9c420e41c78cc2e5d5170f26 - md5: f39f5d725c2ca94c2e7b19e2717fd4ab + size: 588032 + timestamp: 1736610711976 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-dataset-18.1.0-h3b568fd_8_cpu.conda + build_number: 8 + sha256: bb87d8e633074c9759d93abb277d31314dc66fad741253b48e8265e186228c5b + md5: 11856da892b919cc27bd62638d701c65 depends: - - libarrow 18.1.0 hb7781cd_7_cpu - - libarrow-acero 18.1.0 h3b568fd_7_cpu + - libarrow 18.1.0 h47f80e1_8_cpu + - libarrow-acero 18.1.0 h3b568fd_8_cpu - libgcc >=13 - - libparquet 18.1.0 hfc78867_7_cpu + - libparquet 18.1.0 hfc78867_8_cpu - libstdcxx >=13 arch: aarch64 platform: linux license: Apache-2.0 license_family: APACHE - size: 560329 - timestamp: 1735685518922 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_7_cpu.conda - build_number: 7 - sha256: 52c5c4e9cd5f2ac91dcebb6a920ab2536febcea116ff8767e5439329d7da820b - md5: 97a2d3606682d94f7d73112e9ad684ae + size: 560571 + timestamp: 1736611941995 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_8_cpu.conda + build_number: 8 + sha256: bff2d39e418eadab8c522a536449ac90f070dd8e83e2bd5e67a9c3eb8ecf712f + md5: 7b3736f49b3ba299b7799aeb448cb830 depends: - __osx >=11.0 - - libarrow 18.1.0 h0ad35bc_7_cpu - - libarrow-acero 18.1.0 hf07054f_7_cpu + - libarrow 18.1.0 hf3eb8e5_8_cpu + - libarrow-acero 18.1.0 hf07054f_8_cpu - libcxx >=18 - - libparquet 18.1.0 h636d7b7_7_cpu + - libparquet 18.1.0 h636d7b7_8_cpu arch: arm64 platform: osx license: Apache-2.0 license_family: APACHE - size: 491237 - timestamp: 1735684688308 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_7_cpu.conda - build_number: 7 - sha256: 53ea53a06e137c2f81ebfdff3f978babb8b59e31f705a19b57056ec8754c1abf - md5: e128def53c133e8a23ac00cd4a479335 + size: 491001 + timestamp: 1736609758514 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_8_cpu.conda + build_number: 8 + sha256: dca372e27724904577315b8db3793e027a5c152a485e505e630a57b15634cd85 + md5: 46eaf81238da6f3ffab1f3ffdcee382e depends: - __glibc >=2.17,<3.0.a0 - libabseil * cxx17* - libabseil >=20240722.0,<20240723.0a0 - - libarrow 18.1.0 hd595efa_7_cpu - - libarrow-acero 18.1.0 hcb10f89_7_cpu - - libarrow-dataset 18.1.0 hcb10f89_7_cpu + - libarrow 18.1.0 h9d9f30d_8_cpu + - libarrow-acero 18.1.0 hcb10f89_8_cpu + - libarrow-dataset 18.1.0 hcb10f89_8_cpu - libgcc >=13 - libprotobuf >=5.28.3,<5.28.4.0a0 - libstdcxx >=13 @@ -3588,18 +3591,18 @@ packages: platform: linux license: Apache-2.0 license_family: APACHE - size: 521861 - timestamp: 1735684940668 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-substrait-18.1.0-h1e9d426_7_cpu.conda - build_number: 7 - sha256: 252e2a0d8c733f36b50499786480a05a59577d617f291868149c80534c1e8ffc - md5: 6da921d9e1c4e2ab2679eeea7cbd4c82 + size: 521707 + timestamp: 1736610765240 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-substrait-18.1.0-h1e9d426_8_cpu.conda + build_number: 8 + sha256: 1896ea00da28e10670f7ba51bb543e68a87f717e9f5692fee44268f1a13d9eee + md5: e7dc0209e065a2b51f19848cefa4b1ab depends: - libabseil * cxx17* - libabseil >=20240722.0,<20240723.0a0 - - libarrow 18.1.0 hb7781cd_7_cpu - - libarrow-acero 18.1.0 h3b568fd_7_cpu - - libarrow-dataset 18.1.0 h3b568fd_7_cpu + - libarrow 18.1.0 h47f80e1_8_cpu + - libarrow-acero 18.1.0 h3b568fd_8_cpu + - libarrow-dataset 18.1.0 h3b568fd_8_cpu - libgcc >=13 - libprotobuf >=5.28.3,<5.28.4.0a0 - libstdcxx >=13 @@ -3607,27 +3610,27 @@ packages: platform: linux license: Apache-2.0 license_family: APACHE - size: 516014 - timestamp: 1735685565929 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_7_cpu.conda - build_number: 7 - sha256: a45bbdd6932aed972d6c6ce30a7439aa8ec9d9b8ee5affb350d41e50abdc0127 - md5: 91927747173f65695e441346c7145e26 + size: 517189 + timestamp: 1736611989417 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_8_cpu.conda + build_number: 8 + sha256: ae52d926ebfc8edb0728824f2918a825d39bd85a4ef27fe2b73656cfecdd7c69 + md5: f67eb19d22ba355cced8c86073ad49b1 depends: - __osx >=11.0 - libabseil * cxx17* - libabseil >=20240722.0,<20240723.0a0 - - libarrow 18.1.0 h0ad35bc_7_cpu - - libarrow-acero 18.1.0 hf07054f_7_cpu - - libarrow-dataset 18.1.0 hf07054f_7_cpu + - libarrow 18.1.0 hf3eb8e5_8_cpu + - libarrow-acero 18.1.0 hf07054f_8_cpu + - libarrow-dataset 18.1.0 hf07054f_8_cpu - libcxx >=18 - libprotobuf >=5.28.3,<5.28.4.0a0 arch: arm64 platform: osx license: Apache-2.0 license_family: APACHE - size: 452385 - timestamp: 1735684993831 + size: 452161 + timestamp: 1736609917123 - conda: https://conda.anaconda.org/conda-forge/linux-64/libasprintf-0.22.5-he8f35ee_3.conda sha256: 2da5c735811cbf38c7f7844ab457ff8b25046bbf5fe5ebd5dc1c2fafdf4fbe1c md5: 4fab9799da9571266d05ca5503330655 @@ -4064,17 +4067,17 @@ packages: license_family: MIT size: 385098 timestamp: 1734000160270 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.6-ha82da77_1.conda - sha256: 2b2443404503cd862385fd2f2a2c73f9624686fd1e5a45050b4034cfc06904ec - md5: ce5252d8db110cdb4ae4173d0a63c7c5 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda + sha256: 776092346da87a2a23502e14d91eb0c32699c4a1522b7331537bd1c3751dcff5 + md5: 5b3e1610ff8bd5443476b91d618f5b77 depends: - __osx >=11.0 arch: arm64 platform: osx license: Apache-2.0 WITH LLVM-exception license_family: Apache - size: 520992 - timestamp: 1734494699681 + size: 523505 + timestamp: 1736877862502 - conda: https://conda.anaconda.org/conda-forge/linux-64/libdb-6.2.32-h9c3ff4c_0.tar.bz2 sha256: 21fac1012ff05b131d4b5d284003dbbe7b5c4c652aa9e401b46279ed5a784372 md5: 3f3258d8f841fbac63b36b75bdac1afd @@ -4579,9 +4582,9 @@ packages: license_family: GPL size: 997381 timestamp: 1707330687590 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda - sha256: 49ee9401d483a76423461c50dcd37f91d070efaec7e4dc2828d8cdd2ce694231 - md5: 13e8e54035ddd2b91875ba399f0f7c04 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_1.conda + sha256: f0804a9e46ae7b32ca698d26c1c95aa82a91f71b6051883d4a46bea725be9ea4 + md5: 37d1af619d999ee8f1f73cf5a06f4e2f depends: - __glibc >=2.17,<3.0.a0 - libffi >=3.4,<4.0a0 @@ -4590,15 +4593,15 @@ packages: - libzlib >=1.3.1,<2.0a0 - pcre2 >=10.44,<10.45.0a0 constrains: - - glib 2.82.2 *_0 + - glib 2.82.2 *_1 arch: x86_64 platform: linux license: LGPL-2.1-or-later - size: 3931898 - timestamp: 1729191404130 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_0.conda - sha256: 6797d24de7acd298f81a86078c64e4f3fea6d551a3e8892205c9e72a37a7cc3c - md5: 47f6d85fe47b865e56c539f2ba5f4dad + size: 3923974 + timestamp: 1737037491054 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.82.2-hc486b8e_1.conda + sha256: aed7967aaea90b5649eb7eb0eab2ed2270323245eb0832b228e876fbeaae7f76 + md5: 6dfc5a88cfd58288999ab5081f57de9c depends: - libffi >=3.4,<4.0a0 - libgcc >=13 @@ -4606,15 +4609,15 @@ packages: - libzlib >=1.3.1,<2.0a0 - pcre2 >=10.44,<10.45.0a0 constrains: - - glib 2.82.2 *_0 + - glib 2.82.2 *_1 arch: aarch64 platform: linux license: LGPL-2.1-or-later - size: 4020802 - timestamp: 1729191545578 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.82.2-h07bd6cf_0.conda - sha256: 101fb31c509d6a69ac5d612b51d4088ddbc675fca18cf0c3589cfee26cd01ca0 - md5: 890783f64502fa6bfcdc723cfbf581b4 + size: 4004134 + timestamp: 1737037535030 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.82.2-hdff4504_1.conda + sha256: d002aeaa51424e331f8504a54b6ba4388a6011a0ebcac29296f3d14282bf733b + md5: 849da57c370384ce48bef2e050488882 depends: - __osx >=11.0 - libffi >=3.4,<4.0a0 @@ -4623,12 +4626,12 @@ packages: - libzlib >=1.3.1,<2.0a0 - pcre2 >=10.44,<10.45.0a0 constrains: - - glib 2.82.2 *_0 + - glib 2.82.2 *_1 arch: arm64 platform: osx license: LGPL-2.1-or-later - size: 3635416 - timestamp: 1729191799117 + size: 3643364 + timestamp: 1737037789629 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda sha256: 1911c29975ec99b6b906904040c855772ccb265a1c79d5d75c8ceec4ed89cd63 md5: cc3573974587f12dda90d96e3e55a702 @@ -5237,13 +5240,13 @@ packages: license_family: BSD size: 252854 timestamp: 1606823635137 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_7_cpu.conda - build_number: 7 - sha256: 55945b761130f60abdecf1551907ecfd05cb4a5958cf74d855b30c005ecb3592 - md5: b97013ef4e1dd2cf11594f06d5b5e83a +- conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_8_cpu.conda + build_number: 8 + sha256: 2c6d900d4e9dd3c4000886d76d3f8a099e904667ebc6935b49428e6e9b766481 + md5: a9fa0ef309406c84b46db3a28efd761e depends: - __glibc >=2.17,<3.0.a0 - - libarrow 18.1.0 hd595efa_7_cpu + - libarrow 18.1.0 h9d9f30d_8_cpu - libgcc >=13 - libstdcxx >=13 - libthrift >=0.21.0,<0.21.1.0a0 @@ -5252,14 +5255,14 @@ packages: platform: linux license: Apache-2.0 license_family: APACHE - size: 1205598 - timestamp: 1735684849150 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libparquet-18.1.0-hfc78867_7_cpu.conda - build_number: 7 - sha256: 6dff9bbe731dc2cefe96bd9c7981d2cbef2b564a3152840a29c9b6a493ea50d9 - md5: 184bec7a9392ab6ba8134041e81971d6 + size: 1207011 + timestamp: 1736610684584 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libparquet-18.1.0-hfc78867_8_cpu.conda + build_number: 8 + sha256: 2ed6b9eac4504051ddc094ea3f3a2b3198d4d25a443a96fa2971d8075d790c31 + md5: 9a907190c9e2c6bf1a29569700218f0b depends: - - libarrow 18.1.0 hb7781cd_7_cpu + - libarrow 18.1.0 h47f80e1_8_cpu - libgcc >=13 - libstdcxx >=13 - libthrift >=0.21.0,<0.21.1.0a0 @@ -5268,15 +5271,15 @@ packages: platform: linux license: Apache-2.0 license_family: APACHE - size: 1117825 - timestamp: 1735685495511 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_7_cpu.conda - build_number: 7 - sha256: bf42e43542a90edd86ba5aa5fd4543671625f1bc35f62be32688f00e18bae990 - md5: 93de9ba66a20db32a2646d313794b3a8 + size: 1117465 + timestamp: 1736611918180 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_8_cpu.conda + build_number: 8 + sha256: 4991519ef4264abc7160e9faaf8ff01d4731bf1497076bef1895d6c366f796eb + md5: b8bd275a49877fdec62ff787818a869d depends: - __osx >=11.0 - - libarrow 18.1.0 h0ad35bc_7_cpu + - libarrow 18.1.0 hf3eb8e5_8_cpu - libcxx >=18 - libthrift >=0.21.0,<0.21.1.0a0 - openssl >=3.4.0,<4.0a0 @@ -5284,8 +5287,8 @@ packages: platform: osx license: Apache-2.0 license_family: APACHE - size: 873251 - timestamp: 1735684582558 + size: 873593 + timestamp: 1736609701839 - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.45-h943b412_0.conda sha256: b8f5b5ba9a14dedf7c97c01300de492b1b52b68eacbc3249a13fdbfa82349a2f md5: 85cbdaacad93808395ac295b5667d25b @@ -5498,9 +5501,9 @@ packages: license: ISC size: 164972 timestamp: 1716828607917 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.2-hee588c1_0.conda - sha256: 48af21ebc2cbf358976f1e0f4a0ab9e91dfc83d0ef337cf3837c6f5bc22fb352 - md5: b58da17db24b6e08bcbf8fed2fb8c915 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.48.0-hee588c1_0.conda + sha256: 7bb84f44e1bd756da4a3d0d43308324a5533e6ba9f4772475884bce44d405064 + md5: 84bd1c9a82b455e7a2f390375fb38f90 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -5508,30 +5511,30 @@ packages: arch: x86_64 platform: linux license: Unlicense - size: 873551 - timestamp: 1733761824646 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.2-h5eb1b54_0.conda - sha256: 885a27fa84a5a73ed9779168c02b6c386e2fc7a53f0566b32a09ceca146b42b4 - md5: d4bf59f8783a4a66c0aec568f6de3ff4 + size: 876582 + timestamp: 1737123945341 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.48.0-h5eb1b54_0.conda + sha256: b4365ab7c74a2e6c0444eb950367fa3ca56a87c9921b2faa5ad032fe7a7df682 + md5: 1998946fa3ccf38a07b44a879b2227ae depends: - libgcc >=13 - libzlib >=1.3.1,<2.0a0 arch: aarch64 platform: linux license: Unlicense - size: 1042182 - timestamp: 1733761913736 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda - sha256: f192f3c8973de9ec4c214990715f13b781965247a5cedf9162e7f9e699cfc3c4 - md5: 122d6f29470f1a991e85608e77e56a8a + size: 1044953 + timestamp: 1737123983895 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.48.0-h3f77e49_0.conda + sha256: b31169cf0ca7b6835baca4ab92d6cf2eee83b1a12a11b72f39521e8baf4d6acb + md5: 714719df4f49e30f9728956f240846ca depends: - __osx >=11.0 - libzlib >=1.3.1,<2.0a0 arch: arm64 platform: osx license: Unlicense - size: 850553 - timestamp: 1733762057506 + size: 853163 + timestamp: 1737124192432 - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda sha256: 0407ac9fda2bb67e11e357066eff144c845801d00b5f664efbc48813af1e7bb9 md5: be2de152d8073ef1c01b7728475f2fe7 @@ -5803,9 +5806,9 @@ packages: license_family: BSD size: 35720 timestamp: 1680113474501 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda - sha256: a35cd81cd1a9add11024097da83cc06b0aae83186fe4124b77710876f37d8f31 - md5: 070e3c9ddab77e38799d5c30b109c633 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.50.0-hb9d3cd8_0.conda + sha256: b4a8890023902aef9f1f33e3e35603ad9c2f16c21fdb58e968fa6c1bd3e94c0b + md5: 771ee65e13bc599b0b62af5359d80169 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -5813,30 +5816,30 @@ packages: platform: linux license: MIT license_family: MIT - size: 884647 - timestamp: 1729322566955 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda - sha256: adf4eca89339ac7780f2394e7e6699be81259eb91f79f9d9fdf2c1bc6b26f210 - md5: 1899e1ec2be63386c41c4db31d3056af + size: 891272 + timestamp: 1737016632446 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.50.0-h86ecc28_0.conda + sha256: 67914c7f171d343059144d804c2f17fcd621a94e45f179a0fd843b8c1618823e + md5: 915db044076cbbdffb425170deb4ce38 depends: - libgcc >=13 arch: aarch64 platform: linux license: MIT license_family: MIT - size: 627484 - timestamp: 1729322575379 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda - sha256: 0e5176af1e788ad5006cf261c4ea5a288a935fda48993b0240ddd2e562dc3d02 - md5: 4bc348e3a1a74d20a3f9beb866d75e0a + size: 621056 + timestamp: 1737016626950 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.50.0-h5505292_0.conda + sha256: d13fb49d4c8262bf2c44ffb2c77bb2b5d0f85fc6de76bdb75208efeccb29fce6 + md5: 20717343fb30798ab7c23c2e92b748c1 depends: - __osx >=11.0 arch: arm64 platform: osx license: MIT license_family: MIT - size: 410500 - timestamp: 1729322654121 + size: 418890 + timestamp: 1737016751326 - conda: https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2 sha256: 53080d72388a57b3c31ad5805c93a7328e46ff22fab7c44ad2a86d712740af33 md5: 309dec04b70a3cc0f1e84a4013683bc0 @@ -6064,19 +6067,19 @@ packages: license_family: Other size: 46438 timestamp: 1727963202283 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.6-hdb05f8b_0.conda - sha256: a0f3e9139ab16f0a67b9d2bbabc15b78977168f4a5b5503fed4962dcb9a96102 - md5: 34fdeffa0555a1a56f38839415cc066c +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.7-hdb05f8b_0.conda + sha256: b92a669f2059874ebdcb69041b6c243d68ffc3fb356ac1339cec44aeb27245d7 + md5: c4d54bfd3817313ce758aa76283b118d depends: - __osx >=11.0 constrains: - - openmp 19.1.6|19.1.6.* + - openmp 19.1.7|19.1.7.* arch: arm64 platform: osx license: Apache-2.0 WITH LLVM-exception license_family: APACHE - size: 281251 - timestamp: 1734520462311 + size: 280830 + timestamp: 1736986295869 - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda sha256: 47326f811392a5fd3055f0f773036c392d26fdb32e4d8e7a8197eed951489346 md5: 9de5350a85c4a20c685259b889aa6393 @@ -6171,47 +6174,47 @@ packages: license_family: BSD size: 24048 timestamp: 1733219945697 -- conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011105-release.conda +- conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011705-release.conda noarch: python - sha256: 4bd3331f281b0d42b57e7e5d28eee3650cb52ffb3f9c381f349255034ab4d011 - md5: 9a12141b0beb110b83d4ae256d8de1b0 + sha256: 15578c7bc78001d3882c3b9af9d7d8bf3566c68ae133870038be055c8dfd90e9 + md5: 7e6c35d82044e8d31e9327e7d90bfb2b depends: - - max-core ==25.1.0.dev2025011105 release - - max-python >=25.1.0.dev2025011105,<26.0a0 - - mojo-jupyter ==25.1.0.dev2025011105 release - - mblack ==25.1.0.dev2025011105 release + - max-core ==25.1.0.dev2025011705 release + - max-python >=25.1.0.dev2025011705,<26.0a0 + - mojo-jupyter ==25.1.0.dev2025011705 release + - mblack ==25.1.0.dev2025011705 release license: LicenseRef-Modular-Proprietary - size: 9919 - timestamp: 1736572603494 -- conda: https://conda.modular.com/max-nightly/linux-64/max-core-25.1.0.dev2025011105-release.conda - sha256: 45fdbcfa2c105f01e3c06823e072f2b7b3ceeafe21188973a3f64a87c43c29e6 - md5: ba267ab335859f14f9c0d887d4a83f14 + size: 9920 + timestamp: 1737091778690 +- conda: https://conda.modular.com/max-nightly/linux-64/max-core-25.1.0.dev2025011705-release.conda + sha256: 3e39d779710559206129052c64ac530b9d262288f75812ba07c3e3e395a0e18e + md5: 5575de33b0503143e635ade746f057c3 depends: - - mblack ==25.1.0.dev2025011105 release + - mblack ==25.1.0.dev2025011705 release license: LicenseRef-Modular-Proprietary - size: 244035937 - timestamp: 1736572608009 -- conda: https://conda.modular.com/max-nightly/linux-aarch64/max-core-25.1.0.dev2025011105-release.conda - sha256: 23794990d901f563fd2492483d4f5e0b1b91ed616028bf70bd9e2eaace6bd56b - md5: e8f626acac2d17a591ac8353ba41f5d0 + size: 244764907 + timestamp: 1737091186388 +- conda: https://conda.modular.com/max-nightly/linux-aarch64/max-core-25.1.0.dev2025011705-release.conda + sha256: a9e7747e7cb7ff01dc58f4c7f5772d2b4483693dd200c88653b1ec2dda46bc8b + md5: a9b13b577fb1bcc14b330f5a4185023c depends: - - mblack ==25.1.0.dev2025011105 release + - mblack ==25.1.0.dev2025011705 release license: LicenseRef-Modular-Proprietary - size: 247708765 - timestamp: 1736572603492 -- conda: https://conda.modular.com/max-nightly/osx-arm64/max-core-25.1.0.dev2025011105-release.conda - sha256: 8cc71a4a35f96867f4131ddca60d084a8df937ec0f551b62601adc9202788a82 - md5: 4b8d6a0afbcebe7c2e5dc2ccd30c55a8 + size: 247240781 + timestamp: 1737091778688 +- conda: https://conda.modular.com/max-nightly/osx-arm64/max-core-25.1.0.dev2025011705-release.conda + sha256: 9369b738945ef783af1e4caf2676bd6a299ff86e4ef9504e7a5ee69841fffa01 + md5: c4397350b325ae5a0e07f61e483fc3e5 depends: - - mblack ==25.1.0.dev2025011105 release + - mblack ==25.1.0.dev2025011705 release license: LicenseRef-Modular-Proprietary - size: 206225127 - timestamp: 1736572820782 -- conda: https://conda.modular.com/max-nightly/linux-64/max-python-25.1.0.dev2025011105-3.12release.conda - sha256: 621688d96524cbf32ed8f33e4d572043973beb875708e69af36735ee730cc6c4 - md5: bb2eb7a24245cd62aed0b9d3e3e85604 + size: 206615275 + timestamp: 1737092643231 +- conda: https://conda.modular.com/max-nightly/linux-64/max-python-25.1.0.dev2025011705-3.12release.conda + sha256: bdda011f73105d5d91e29abdacc4e7304501249c3bb50e83517661cdea4ef56a + md5: 0ddfaa3caa3647a0cbcdf394774ee6be depends: - - max-core ==25.1.0.dev2025011105 release + - max-core ==25.1.0.dev2025011705 release - python 3.12.* - fastapi - httpx @@ -6232,13 +6235,13 @@ packages: - uvicorn - python_abi 3.12.* *_cp312 license: LicenseRef-Modular-Proprietary - size: 124216697 - timestamp: 1736572608017 -- conda: https://conda.modular.com/max-nightly/linux-aarch64/max-python-25.1.0.dev2025011105-3.12release.conda - sha256: fd2587af6018758078516561bfdb54d8175207edd4ce6dce211aeb9dffbfd967 - md5: 8d1481a3abe8cd46a76797465f6a9eb6 + size: 124617960 + timestamp: 1737091186397 +- conda: https://conda.modular.com/max-nightly/linux-aarch64/max-python-25.1.0.dev2025011705-3.12release.conda + sha256: 3ec1d98731b5c86829e7dd0d76b3ad820173a418f58833ea0237e34d356b58c6 + md5: 0ed0380d3ee48a36fe43f85f61fd9fe3 depends: - - max-core ==25.1.0.dev2025011105 release + - max-core ==25.1.0.dev2025011705 release - python 3.12.* - fastapi - httpx @@ -6259,13 +6262,13 @@ packages: - uvicorn - python_abi 3.12.* *_cp312 license: LicenseRef-Modular-Proprietary - size: 127983766 - timestamp: 1736572603503 -- conda: https://conda.modular.com/max-nightly/osx-arm64/max-python-25.1.0.dev2025011105-3.12release.conda - sha256: 5d6590e84cf64008fd48066ef10138c48cdbb6d6e2a1d3de01e71270d8d8d966 - md5: 92aa60fa7fe761433d03416f21c8d912 + size: 127367910 + timestamp: 1737091778698 +- conda: https://conda.modular.com/max-nightly/osx-arm64/max-python-25.1.0.dev2025011705-3.12release.conda + sha256: 853e12e0ac11f3dcf5392e94cc927233ba940a71a5cf73c0cec54ad4917256c0 + md5: 53e9620bd08e983c5e52e02afef0a990 depends: - - max-core ==25.1.0.dev2025011105 release + - max-core ==25.1.0.dev2025011705 release - python 3.12.* - fastapi - httpx @@ -6286,12 +6289,12 @@ packages: - uvicorn - python_abi 3.12.* *_cp312 license: LicenseRef-Modular-Proprietary - size: 110625116 - timestamp: 1736572820784 -- conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011105-release.conda + size: 110545057 + timestamp: 1737092643234 +- conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011705-release.conda noarch: python - sha256: f447d269d29bb49fd97275f623632a569638c31b40e88489367df3d7d4ce90e2 - md5: 32c691c7fc2c6a218e1ce2272965a101 + sha256: 180bbe7d8b76c5d0f453b72f81fae10522b7a98a31e6fbeff542dbb31bb9b613 + md5: 680622d3117019e99ddc173efab357c7 depends: - python >=3.9,<3.13 - click >=8.0.0 @@ -6301,8 +6304,8 @@ packages: - platformdirs >=2 - python license: MIT - size: 130815 - timestamp: 1736572603499 + size: 130807 + timestamp: 1737091778695 - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 md5: 592132998493b3ff25fd7479396e8351 @@ -6312,18 +6315,18 @@ packages: license_family: MIT size: 14465 timestamp: 1733255681319 -- conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011105-release.conda +- conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011705-release.conda noarch: python - sha256: 05af473b2b4983829660ba70eb0cb6607f019c4f4b8d107350ea491c6bd8d1cd - md5: 036f5ddfbcce66b3f9972cebf1cec107 + sha256: eab543a5c31c091b3d042980d068a950c51905d14a18532710f9be94ba88ba5d + md5: eea061b963a95002a8740d4b4f506d44 depends: - - max-core ==25.1.0.dev2025011105 release + - max-core ==25.1.0.dev2025011705 release - python >=3.9,<3.13 - jupyter_client >=8.6.2,<8.7 - python license: LicenseRef-Modular-Proprietary - size: 22937 - timestamp: 1736572603499 + size: 22929 + timestamp: 1737091778696 - conda: https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.9-hc50e24c_0.conda sha256: 39c4700fb3fbe403a77d8cc27352fa72ba744db487559d5d44bf8411bb4ea200 md5: c7f302fd11eeb0987a6a5e1f3aed6a21 @@ -6455,37 +6458,37 @@ packages: license_family: MIT size: 10854 timestamp: 1733230986902 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda - sha256: 6a1d5d8634c1a07913f1c525db6455918cbc589d745fac46d9d6e30340c8731a - md5: 70caf8bb6cf39a0b6b7efc885f51c0fe +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda + sha256: 17fe6afd8a00446010220d52256bd222b1e4fcb93bd587e7784b03219f3dc358 + md5: 04b34b9a40cdc48cfdab261ab176ff74 depends: - __glibc >=2.17,<3.0.a0 - - libgcc-ng >=12 + - libgcc >=13 arch: x86_64 platform: linux license: X11 AND BSD-3-Clause - size: 889086 - timestamp: 1724658547447 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda - sha256: acad4cf1f57b12ee1e42995e6fac646fa06aa026529f05eb8c07eb0a84a47a84 - md5: 91d49c85cacd92caa40cf375ef72a25d + size: 894452 + timestamp: 1736683239706 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_2.conda + sha256: 9fd726174dde993c560dd6fa1a383e61d546d380e98e0b0348d22512e5d86e24 + md5: 779046fb585c71373e8a051be06c6011 depends: - - libgcc-ng >=12 + - libgcc >=13 arch: aarch64 platform: linux license: X11 AND BSD-3-Clause - size: 924472 - timestamp: 1724658573518 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - sha256: 27d0b9ff78ad46e1f3a6c96c479ab44beda5f96def88e2fe626e0a49429d8afc - md5: cb2b0ea909b97b3d70cd3921d1445e1a + size: 928402 + timestamp: 1736683192463 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda + sha256: b45c73348ec9841d5c893acc2e97adff24127548fe8c786109d03c41ed564e91 + md5: f6f7c5b7d0983be186c46c4f6f8f9af8 depends: - __osx >=11.0 arch: arm64 platform: osx license: X11 AND BSD-3-Clause - size: 802321 - timestamp: 1724658775723 + size: 796754 + timestamp: 1736683572099 - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda sha256: fe3459c75cf84dcef6ef14efcc4adb0ade66038ddd27cadb894f34f4797687d8 md5: d8285bea2a350f63fab23bf460221f3f @@ -6836,9 +6839,9 @@ packages: license_family: BSD size: 15436913 timestamp: 1726879054912 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pandas-2.2.3-py312ha2895bd_1.conda - sha256: 585e05f95d14afe3df43ded14f86800c70da26b27e27b59de95932f8888af5d3 - md5: 80b873ac4fdf36641afa0eaafff3a664 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pandas-2.2.3-py312ha2895bd_2.conda + sha256: a34b10077de97eea72c81cb96e3ddc7d48320c0fc7d9b28ba8d9d2bead1d8297 + md5: 39a91ac336d350513de6aad56da5a920 depends: - libgcc >=13 - libstdcxx >=13 @@ -6850,12 +6853,38 @@ packages: - python-tzdata >=2022a - python_abi 3.12.* *_cp312 - pytz >=2020.1,<2024.2 + constrains: + - fsspec >=2022.11.0 + - s3fs >=2022.11.0 + - fastparquet >=2022.12.0 + - pyreadstat >=1.2.0 + - qtpy >=2.3.0 + - scipy >=1.10.0 + - beautifulsoup4 >=4.11.2 + - gcsfs >=2022.11.0 + - numexpr >=2.8.4 + - sqlalchemy >=2.0.0 + - pyxlsb >=1.0.10 + - numba >=0.56.4 + - lxml >=4.9.2 + - matplotlib >=3.6.3 + - psycopg2 >=2.9.6 + - tzdata >=2022.7 + - bottleneck >=1.3.6 + - xarray >=2022.12.0 + - xlsxwriter >=3.0.5 + - zstandard >=0.19.0 + - blosc >=1.21.3 + - pytables >=3.8.0 + - openpyxl >=3.1.0 + - pyqt5 >=5.15.8 + - tabulate >=0.9.0 arch: aarch64 platform: linux license: BSD-3-Clause license_family: BSD - size: 15159625 - timestamp: 1726879151211 + size: 15162992 + timestamp: 1736811533875 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.2.3-py312hcd31e36_1.conda sha256: ff0cb54b5d058c7987b4a0984066e893642d1865a7bb695294b6172e2fcdc457 md5: c68bfa69e6086c381c74e16fd72613a8 @@ -8719,12 +8748,12 @@ packages: license_family: PSF size: 39637 timestamp: 1733188758212 -- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf - md5: 8ac3367aafb1cc0a068483c580af8015 +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda + sha256: c4b1ae8a2931fe9b274c44af29c5475a85b37693999f8c792dad0f8c6734b1de + md5: dbcace4706afdfb7eb891f7b37d07c04 license: LicenseRef-Public-Domain - size: 122354 - timestamp: 1728047496079 + size: 122921 + timestamp: 1737119101255 - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda sha256: 114919ffa80c328127dab9c8e7a38f9d563c617691fb81fccb11c1e86763727e md5: 32674f8dbfb7b26410ed580dd3c10a29 @@ -8823,6 +8852,7 @@ packages: arch: x86_64 platform: linux license: MIT + license_family: MIT size: 410192 timestamp: 1736550568524 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/watchfiles-1.0.4-py312h8cbf658_0.conda @@ -8839,6 +8869,7 @@ packages: arch: aarch64 platform: linux license: MIT + license_family: MIT size: 403791 timestamp: 1736550743174 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/watchfiles-1.0.4-py312hcd83bfe_0.conda @@ -8855,6 +8886,7 @@ packages: arch: arm64 platform: osx license: MIT + license_family: MIT size: 363822 timestamp: 1736550859472 - conda: https://conda.anaconda.org/conda-forge/linux-64/websockets-14.1-py312h66e93f0_0.conda @@ -8899,9 +8931,9 @@ packages: license_family: BSD size: 243131 timestamp: 1731498944076 -- conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.0-py312h66e93f0_0.conda - sha256: a6fc0f4e90643d0c1fd4aab669b6a79f44a305a5474256f6f2da3354d2310fb4 - md5: ddbe3bb0e1356cb9074dd848570694f9 +- conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.2-py312h66e93f0_0.conda + sha256: ed3a1700ecc5d38c7e7dc7d2802df1bc1da6ba3d6f6017448b8ded0affb4ae00 + md5: 669e63af87710f8d52fdec9d4d63b404 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -8911,11 +8943,11 @@ packages: platform: linux license: BSD-2-Clause license_family: BSD - size: 63807 - timestamp: 1732523690292 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-1.17.0-py312hb2c0f52_0.conda - sha256: b9aa760a987ccc6bc9c61f57badba6798d9a3dcbd0814e5fb8df6d8d2935af73 - md5: 120d5d1c05386d8ce3efd65a4c86431f + size: 63590 + timestamp: 1736869574299 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-1.17.2-py312hb2c0f52_0.conda + sha256: cc28914462a21b2f64d9b763a9733bfcbc811dd2975d0d2e6e429e35f5b6d59c + md5: 8a5c6e3f809bae085be369b62dc5d06a depends: - libgcc >=13 - python >=3.12,<3.13.0a0 @@ -8925,11 +8957,11 @@ packages: platform: linux license: BSD-2-Clause license_family: BSD - size: 64783 - timestamp: 1732523806 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.0-py312hea69d52_0.conda - sha256: 0fb35c3d1642f9f47db87bdb33148f88ef19a3af1eb0ee99b5491551c57269c7 - md5: 73414acdb779a8694a14527865b4357a + size: 63967 + timestamp: 1736869675870 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.2-py312hea69d52_0.conda + sha256: 6a3e68b57de29802e8703d1791dcacb7613bfdc17bbb087c6b2ea2796e6893ef + md5: e49608c832fcf438f70cbcae09c3adc5 depends: - __osx >=11.0 - python >=3.12,<3.13.0a0 @@ -8939,8 +8971,8 @@ packages: platform: osx license: BSD-2-Clause license_family: BSD - size: 61043 - timestamp: 1732523852129 + size: 61198 + timestamp: 1736869673767 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda sha256: c12396aabb21244c212e488bbdc4abcdef0b7404b15761d9329f5a4a39113c4b md5: fb901ff28063514abb6046c9ec2c4a45 diff --git a/examples/life/test/test_gridv1.mojo b/examples/life/test/test_gridv1.mojo index bded4cc2f5..19e0d4c8a0 100644 --- a/examples/life/test/test_gridv1.mojo +++ b/examples/life/test/test_gridv1.mojo @@ -44,7 +44,7 @@ def test_gridv1_index(): def test_gridv1_str(): grid = Grid(4, 4, data4x4) - grid_str = str(grid) + grid_str = String(grid) assert_equal(str4x4, grid_str) diff --git a/examples/life/test/test_gridv2.mojo b/examples/life/test/test_gridv2.mojo index 1987272743..cc251a9d6b 100644 --- a/examples/life/test/test_gridv2.mojo +++ b/examples/life/test/test_gridv2.mojo @@ -53,7 +53,7 @@ def test_gridv2_index(): def test_gridv2_str(): grid = grid4x4() - grid_str = str(grid) + grid_str = String(grid) assert_equal(str4x4, grid_str) diff --git a/examples/magic.lock b/examples/magic.lock index 2efd6fcd75..bfba300bb8 100644 --- a/examples/magic.lock +++ b/examples/magic.lock @@ -14,7 +14,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.8.0-hb921021_15.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.8.0-h205f482_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.8.1-h1a47875_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.10.6-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.0-h4e1184b_5.conda @@ -23,10 +23,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.15.3-h831e299_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.11.0-h11f4f37_12.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.7-hf454442_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.1-h4e1184b_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.2-h4e1184b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.2-h4e1184b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.29.7-hd92328a_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.458-hc430e4a_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.29.8-h8570fcd_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.458-h7001638_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda @@ -77,10 +77,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20240722.0-cxx17_hbbce691_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-18.1.0-hd595efa_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-18.1.0-h9d9f30d_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-26_linux64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda @@ -109,12 +109,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.45-h943b412_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.28.3-h6128344_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hbbce691_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.2-hee588c1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.48.0-hee588c1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda @@ -122,7 +122,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-hd9ff511_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.9.0-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.50.0-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.5.0-h851e524_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda @@ -131,16 +131,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py311h2dc5d0c_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/max-core-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/max-python-25.1.0.dev2025011105-3.11release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/max-core-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/max-python-25.1.0.dev2025011705-3.11release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.1.0-py311h2dc5d0c_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/multiprocess-0.70.15-py311h459d7ec_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py311h64a7726_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.3-h5fbd93e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda @@ -206,14 +206,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.1-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.0-pyh31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.34.0-h31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/uvloop-0.21.0-py311h9ecbd09_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/watchfiles-1.0.4-py311h9e33e62_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/websockets-14.1-py311h9ecbd09_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.0-py311h9ecbd09_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.2-py311h9ecbd09_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xxhash-0.8.2-hd590300_0.conda @@ -231,7 +231,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-auth-0.8.0-h2cb9fb3_15.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-auth-0.8.0-hb7ec8d5_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-cal-0.8.1-h740c5af_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-common-0.10.6-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-compression-0.3.0-h0f0193d_5.conda @@ -240,10 +240,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-io-0.15.3-h1a307af_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-mqtt-0.11.0-h5f50e26_12.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-s3-0.7.7-h2080895_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-sdkutils-0.2.1-h0f0193d_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-sdkutils-0.2.2-h0f0193d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-checksums-0.2.2-h0f0193d_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-crt-cpp-0.29.7-h8a4e35f_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-sdk-cpp-1.11.458-h849ce1a_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-crt-cpp-0.29.8-h92ee776_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-sdk-cpp-1.11.458-h90ecb4a_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/azure-core-cpp-1.14.0-h1887c18_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/azure-identity-cpp-1.10.0-h47b0b28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/azure-storage-blobs-cpp-12.13.0-h185ecfd_1.conda @@ -295,10 +295,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.0.0-h4de3ea5_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20240722.0-cxx17_h18dbdb1_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-18.1.0-hb7781cd_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-acero-18.1.0-h3b568fd_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-dataset-18.1.0-h3b568fd_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-substrait-18.1.0-h1e9d426_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-18.1.0-h47f80e1_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-acero-18.1.0-h3b568fd_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-dataset-18.1.0-h3b568fd_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-substrait-18.1.0-h1e9d426_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.9.0-26_linuxaarch64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlicommon-1.1.0-h86ecc28_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlidec-1.1.0-h86ecc28_2.conda @@ -327,12 +327,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnghttp2-1.64.0-hc8609a4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.28-pthreads_h9d3fd7e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libparquet-18.1.0-hfc78867_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libparquet-18.1.0-hfc78867_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.45-hec79eb8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-5.28.3-h44a3b7b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libre2-11-2024.07.02-h18dbdb1_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.2-h5eb1b54_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.48.0-h5eb1b54_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libssh2-1.11.1-ha41c0db_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda @@ -340,7 +340,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.0-h88f7998_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libutf8proc-2.9.0-h86ecc28_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.50.0-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.5.0-h0886dbf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda @@ -349,16 +349,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lz4-c-1.10.0-h5ad3122_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.2-py311ha09ea12_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/max-core-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/max-python-25.1.0.dev2025011105-3.11release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/max-core-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/max-python-25.1.0.dev2025011705-3.11release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/multidict-6.1.0-py311h58d527c_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/multiprocess-0.70.15-py311hcd402e7_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-1.26.4-py311h69ead2a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.3-h3f56577_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.4.0-hd08dc88_1.conda @@ -371,7 +371,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-semantic-conventions-0.50b0-pyh3cfb1c2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/orc-2.0.3-hdd485aa_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pandas-2.2.3-py311h848c333_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pandas-2.2.3-py311h848c333_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-11.1.0-py311ha4eaa5e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_1.conda @@ -424,14 +424,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.1-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.0-pyh31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.34.0-h31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uvloop-0.21.0-py311ha879c10_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/watchfiles-1.0.4-py311h0ca61a2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/websockets-14.1-py311ha879c10_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-1.17.0-py311ha879c10_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-1.17.2-py311ha879c10_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.12-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-h57736b2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xxhash-0.8.2-h31becfc_0.conda @@ -448,7 +448,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.8.0-h8bc59a9_15.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.8.0-hfc2798a_16.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.8.1-hc8a0bd2_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.10.6-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.3.0-hc8a0bd2_5.conda @@ -457,10 +457,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.15.3-haba67d1_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.11.0-h24f418c_12.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.7.7-h1be5864_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.1-hc8a0bd2_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.2-hc8a0bd2_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.2.2-hc8a0bd2_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.29.7-h19a973c_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-he0ff2e4_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.29.8-h23176ea_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-h794939a_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-core-cpp-1.14.0-hd50102c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-identity-cpp-1.10.0-hc602bab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.13.0-h7585a09_1.conda @@ -510,10 +510,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.16-ha0e7c42_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20240722.0-cxx17_h07bc746_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-18.1.0-h0ad35bc_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-18.1.0-hf3eb8e5_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-26_osxarm64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.1.0-hd74edd7_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.1.0-hd74edd7_2.conda @@ -521,7 +521,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-26_osxarm64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.11.1-h73640d1_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.6-ha82da77_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.23-hec38601_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20240808-pl5321hafb1f1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda @@ -539,35 +539,35 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.6.3-h39f12f2_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.45-h3783ad8_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-5.28.3-h3bd63a1_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libre2-11-2024.07.02-h07bc746_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.48.0-h3f77e49_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.21.0-h64651cc_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.9.0-h5505292_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.50.0-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.13.5-h178c5d8_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.6-hdb05f8b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.7-hdb05f8b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.2-py311h4921393_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/max-core-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/max-python-25.1.0.dev2025011105-3.11release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/max-core-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/max-python-25.1.0.dev2025011705-3.11release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/multidict-6.1.0-py311h30e7462_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/multiprocess-0.70.15-py311heffc1b2_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-1.26.4-py311h7125741_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.3-h8a3d83b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda @@ -632,14 +632,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.1-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.0-pyh31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.34.0-h31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uvloop-0.21.0-py311hae2e1ce_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/watchfiles-1.0.4-py311h3ff9189_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/websockets-14.1-py311h917b07b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.0-py311h917b07b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.2-py311h917b07b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xxhash-0.8.2-hb547adb_0.conda @@ -804,55 +804,55 @@ packages: license_family: MIT size: 56354 timestamp: 1734348889193 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.8.0-hb921021_15.conda - sha256: 537006ad6d5097c134494166a6a1dc1451d5d050878d7b82cef498bfda40ba8a - md5: c79d50f64cffa5ad51ecc1a81057962f +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.8.0-h205f482_16.conda + sha256: 0695c285b70385913dc7dce05888d3ad1378247b65273bdab509494a2f8f0eea + md5: b0815d37ab812ade9c07239da7c3c369 depends: - __glibc >=2.17,<3.0.a0 - aws-c-cal >=0.8.1,<0.8.2.0a0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-http >=0.9.2,<0.9.3.0a0 - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - libgcc >=13 arch: x86_64 platform: linux license: Apache-2.0 license_family: Apache - size: 107614 - timestamp: 1734021692519 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-auth-0.8.0-h2cb9fb3_15.conda - sha256: 4ce859dc9ff128bf5515604c43f33fb511386022fc9765ca077990f2a3f23df5 - md5: e524686ace966acefb5b8cbc6e8b3daa + size: 107478 + timestamp: 1736592747413 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-auth-0.8.0-hb7ec8d5_16.conda + sha256: 5a2a2691f2e0028e8549b97a340d7e6c502e0d54b7deba00fad505812663a98b + md5: 56f166780076db46c5e273988693d8a3 depends: - aws-c-cal >=0.8.1,<0.8.2.0a0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-http >=0.9.2,<0.9.3.0a0 - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - libgcc >=13 arch: aarch64 platform: linux license: Apache-2.0 license_family: Apache - size: 111854 - timestamp: 1734021745104 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.8.0-h8bc59a9_15.conda - sha256: 0e41e56b662e76e024182adebcd91d09a4d38a83b35217c84e4967354dfff9a2 - md5: f688b8893c20ad9477a19e7ce614014a + size: 112264 + timestamp: 1736592695540 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.8.0-hfc2798a_16.conda + sha256: cdcd932332311db1b614289101b61e32cbae2478ba2bf85763aaf5a5cc7db6f6 + md5: 1e9a41d5296f50c08ae511d61fddef85 depends: - __osx >=11.0 - aws-c-cal >=0.8.1,<0.8.2.0a0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-http >=0.9.2,<0.9.3.0a0 - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 arch: arm64 platform: osx license: Apache-2.0 license_family: Apache - size: 92507 - timestamp: 1734021831330 + size: 92547 + timestamp: 1736592866387 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.8.1-h1a47875_3.conda sha256: 095ac824ea9303eff67e04090ae531d9eb33d2bf8f82eaade39b839c421e16e8 md5: 55a8561fdbbbd34f50f57d9be12ed084 @@ -1195,9 +1195,9 @@ packages: license_family: Apache size: 97598 timestamp: 1734146239038 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.1-h4e1184b_4.conda - sha256: df586f42210af1134b1c88ff4c278c3cb6d6c807c84eac48860062464b28554d - md5: a5126a90e74ac739b00564a4c7ddcc36 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.2-h4e1184b_0.conda + sha256: 0424e380c435ba03b5948d02e8c958866c4eee50ed29e57f99473a5f795a4cfc + md5: dcd498d493818b776a77fbc242fbf8e4 depends: - __glibc >=2.17,<3.0.a0 - aws-c-common >=0.10.6,<0.10.7.0a0 @@ -1206,11 +1206,11 @@ packages: platform: linux license: Apache-2.0 license_family: Apache - size: 56094 - timestamp: 1733994449690 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-sdkutils-0.2.1-h0f0193d_4.conda - sha256: ede8e782467c87ac80ceb9c9af9e917d121b7d8b8c698186d18e3cecd36f2210 - md5: 53e798d720dd78b78847a7b2fdb05fc9 + size: 55911 + timestamp: 1736535960724 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-sdkutils-0.2.2-h0f0193d_0.conda + sha256: fba38e469457764afcb94aa84d4d7788e6b5fa1554d34b05c904d2245fdd3c81 + md5: a78928881c652facde2a13ec6e776f3c depends: - aws-c-common >=0.10.6,<0.10.7.0a0 - libgcc >=13 @@ -1218,11 +1218,11 @@ packages: platform: linux license: Apache-2.0 license_family: Apache - size: 58621 - timestamp: 1733994421495 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.1-hc8a0bd2_4.conda - sha256: de98343ce42d2e569b3380292d20f47bf39bda08aadabcbb8e650d3f38fd742f - md5: 22f72f8cd7ead211304ac17d337d96e0 + size: 58221 + timestamp: 1736536003041 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.2-hc8a0bd2_0.conda + sha256: ea4f0f1e99056293c69615f581a997d65ba7e229e296e402e0d8ef750648a5b5 + md5: e7b5498ac7b7ab921a907be38f3a8080 depends: - __osx >=11.0 - aws-c-common >=0.10.6,<0.10.7.0a0 @@ -1230,8 +1230,8 @@ packages: platform: osx license: Apache-2.0 license_family: Apache - size: 49664 - timestamp: 1733994553014 + size: 49872 + timestamp: 1736536152332 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.2-h4e1184b_4.conda sha256: 1ed9a332d06ad595694907fad2d6d801082916c27cd5076096fda4061e6d24a8 md5: 74e8c3e4df4ceae34aa2959df4b28101 @@ -1269,9 +1269,9 @@ packages: license_family: Apache size: 70186 timestamp: 1733994496998 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.29.7-hd92328a_7.conda - sha256: 094cd81f1e5ba713e9e7a272ee52b5dde3ccc4842ea90f19c0354a00bbdac3d9 - md5: 02b95564257d5c3db9c06beccf711f95 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.29.8-h8570fcd_1.conda + sha256: ff8f08bc615d3ef6d970df80988200b3ecee76ecfa4885109cd82b30176cfda9 + md5: f21296b496cca1c1fa426b9a3b676e79 depends: - __glibc >=2.17,<3.0.a0 - aws-c-auth >=0.8.0,<0.8.1.0a0 @@ -1282,18 +1282,18 @@ packages: - aws-c-io >=0.15.3,<0.15.4.0a0 - aws-c-mqtt >=0.11.0,<0.11.1.0a0 - aws-c-s3 >=0.7.7,<0.7.8.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - libgcc >=13 - libstdcxx >=13 arch: x86_64 platform: linux license: Apache-2.0 license_family: Apache - size: 354703 - timestamp: 1734177883319 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-crt-cpp-0.29.7-h8a4e35f_7.conda - sha256: 5ba9188e0cb4e3faff9bc96774febb040aa3b802aedba29d847e00e7b5eab84e - md5: d77a9e3d7ce15399903e92825fd651b5 + size: 354328 + timestamp: 1736598991291 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-crt-cpp-0.29.8-h92ee776_1.conda + sha256: 114ac89d3936bf801dcbd488ba0b468c7e113a407cb1ee5898259a5202b7e750 + md5: 63546051b5687f793ae977c7994e1339 depends: - aws-c-auth >=0.8.0,<0.8.1.0a0 - aws-c-cal >=0.8.1,<0.8.2.0a0 @@ -1303,18 +1303,18 @@ packages: - aws-c-io >=0.15.3,<0.15.4.0a0 - aws-c-mqtt >=0.11.0,<0.11.1.0a0 - aws-c-s3 >=0.7.7,<0.7.8.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - libgcc >=13 - libstdcxx >=13 arch: aarch64 platform: linux license: Apache-2.0 license_family: Apache - size: 283154 - timestamp: 1734177845248 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.29.7-h19a973c_7.conda - sha256: 8269e6746eb3a5d15b732a3983888bf98dfc1f6594e95250fc8d16b43cfd5ff9 - md5: 95714136bef3e917bd5a2942d4682b20 + size: 284664 + timestamp: 1736598964131 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.29.8-h23176ea_1.conda + sha256: db6a31078bb82fb12044d7706239c003568273729f7ba4971c1479b7926ada82 + md5: 31fdd3ffb00f5472196fa95ef08087b7 depends: - __osx >=11.0 - aws-c-auth >=0.8.0,<0.8.1.0a0 @@ -1325,23 +1325,23 @@ packages: - aws-c-io >=0.15.3,<0.15.4.0a0 - aws-c-mqtt >=0.11.0,<0.11.1.0a0 - aws-c-s3 >=0.7.7,<0.7.8.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - libcxx >=18 arch: arm64 platform: osx license: Apache-2.0 license_family: Apache - size: 236249 - timestamp: 1734178020924 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.458-hc430e4a_4.conda - sha256: 2dc09f6f9c49127b5f96e7535b64a9c521b944d76d8b7d03d48ae80257ac1cea - md5: aeefac461bea1f126653c1285cf5af08 + size: 236269 + timestamp: 1736599024242 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.458-h7001638_5.conda + sha256: 849524b09865e84d6926aa814944cf71511aa4a00fffc5ad174c286d5dfac5f0 + md5: fc01d77a7f383b2915f276c73b7d0934 depends: - __glibc >=2.17,<3.0.a0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-event-stream >=0.5.0,<0.5.1.0a0 - aws-checksums >=0.2.2,<0.2.3.0a0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - libcurl >=8.11.1,<9.0a0 - libgcc >=13 - libstdcxx >=13 @@ -1351,16 +1351,16 @@ packages: platform: linux license: Apache-2.0 license_family: Apache - size: 3060561 - timestamp: 1734093737431 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-sdk-cpp-1.11.458-h849ce1a_4.conda - sha256: 51b9e9df8cbab4a13a1b9d39d6ef5ed162aaa29c09a745810e00bbe92e1045c1 - md5: cda7747f4398be8d1fb37362815917a7 + size: 3088636 + timestamp: 1736598504343 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-sdk-cpp-1.11.458-h90ecb4a_5.conda + sha256: 9467acd0f2df74ea7472aebdfb8b5656a8d403abad2edbce9743d6e88c94fd10 + md5: 33f86f8de1d8cd40f8fe628dc0784437 depends: - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-event-stream >=0.5.0,<0.5.1.0a0 - aws-checksums >=0.2.2,<0.2.3.0a0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - libcurl >=8.11.1,<9.0a0 - libgcc >=13 - libstdcxx >=13 @@ -1370,17 +1370,17 @@ packages: platform: linux license: Apache-2.0 license_family: Apache - size: 2920625 - timestamp: 1734093552712 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-he0ff2e4_4.conda - sha256: 535b970aaa13be45f8cab8205c59f044b17364111c41a227f061775a5c834e18 - md5: 0981ed87098b149bdb7d99a4a3fd0e58 + size: 2925443 + timestamp: 1736598526637 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-h794939a_5.conda + sha256: 2b1e7d5a45e82604bfdb6de63c53cf0e9495f596cfd90e644a1e67910de7f91c + md5: a2374b4182bf5b2d08b2903393d0c487 depends: - __osx >=11.0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-event-stream >=0.5.0,<0.5.1.0a0 - aws-checksums >=0.2.2,<0.2.3.0a0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - libcurl >=8.11.1,<9.0a0 - libcxx >=18 - libzlib >=1.3.1,<2.0a0 @@ -1389,8 +1389,8 @@ packages: platform: osx license: Apache-2.0 license_family: Apache - size: 2826534 - timestamp: 1734094018287 + size: 2824168 + timestamp: 1736598935034 - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda sha256: fe07debdb089a3db17f40a7f20d283d75284bb4fc269ef727b8ba6fc93f7cb5a md5: 0a8838771cc2e985cd295e01ae83baf1 @@ -2558,13 +2558,13 @@ packages: license_family: Apache size: 1178260 timestamp: 1736008642885 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-18.1.0-hd595efa_7_cpu.conda - build_number: 7 - sha256: 554ffa338264c1dc34d95adb7eb856d50a2f25e7fa303a1a51e4372301b7c96f - md5: 08d4aff5ee6dee9a1b9ab13fca927697 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-18.1.0-h9d9f30d_8_cpu.conda + build_number: 8 + sha256: f6c72ce82d145cb94a1131b68547b88056fb48158a382f9ce763286fce53ee65 + md5: 1c9caae53b14a385b59e87687adad2d6 depends: - __glibc >=2.17,<3.0.a0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - aws-sdk-cpp >=1.11.458,<1.11.459.0a0 - azure-core-cpp >=1.14.0,<1.14.1.0a0 - azure-identity-cpp >=1.10.0,<1.10.1.0a0 @@ -2597,14 +2597,14 @@ packages: platform: linux license: Apache-2.0 license_family: APACHE - size: 8770256 - timestamp: 1735684696564 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-18.1.0-hb7781cd_7_cpu.conda - build_number: 7 - sha256: f6107506bd16788560b47a4d18c1457b4df30a49334364d32613fe3f53ba6cbb - md5: 98cf7127ca7b3854c5d1c8bef1ed6e53 - depends: - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + size: 8801586 + timestamp: 1736610546493 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-18.1.0-h47f80e1_8_cpu.conda + build_number: 8 + sha256: bf381dfa84e94ffce715c46352dd99f6f6ace69859b0efb822500f8882be429a + md5: daceef1881b4ddc72bb5b225a122c633 + depends: + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - aws-sdk-cpp >=1.11.458,<1.11.459.0a0 - azure-core-cpp >=1.14.0,<1.14.1.0a0 - azure-identity-cpp >=1.10.0,<1.10.1.0a0 @@ -2631,21 +2631,21 @@ packages: - zstd >=1.5.6,<1.6.0a0 constrains: - arrow-cpp <0.0a0 - - parquet-cpp <0.0a0 - apache-arrow-proc =*=cpu + - parquet-cpp <0.0a0 arch: aarch64 platform: linux license: Apache-2.0 license_family: APACHE - size: 8026714 - timestamp: 1735685336542 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-18.1.0-h0ad35bc_7_cpu.conda - build_number: 7 - sha256: 4fbdd8bb89d912bf03f10f9373a8d96a1cdd7a7851e107393418a3d2715bc27e - md5: 4ba2173203f44bbf03d19aaba6ed07d3 + size: 8045923 + timestamp: 1736611764958 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-18.1.0-hf3eb8e5_8_cpu.conda + build_number: 8 + sha256: 766e46b45520773db93ee1a91951cc135a85544bba738e7b378d31f16097753f + md5: fdc79871e6c243b819497337215416d9 depends: - __osx >=11.0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - aws-sdk-cpp >=1.11.458,<1.11.459.0a0 - azure-core-cpp >=1.14.0,<1.14.1.0a0 - azure-identity-cpp >=1.10.0,<1.10.1.0a0 @@ -2676,111 +2676,111 @@ packages: platform: osx license: Apache-2.0 license_family: APACHE - size: 5506699 - timestamp: 1735682962976 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_7_cpu.conda - build_number: 7 - sha256: 87ea5d6a84d922d73975dce8661fccf257e72e755175b12c30e1181a34e37987 - md5: 12d84228204c56fec6ed113288014d11 + size: 5497383 + timestamp: 1736608604724 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_8_cpu.conda + build_number: 8 + sha256: 126a6e78199311d99e38b9d633ce3e0290795ac68ce3ee8a9b91436c85c4095d + md5: 544759904898499f634f8f88a9907f88 depends: - __glibc >=2.17,<3.0.a0 - - libarrow 18.1.0 hd595efa_7_cpu + - libarrow 18.1.0 h9d9f30d_8_cpu - libgcc >=13 - libstdcxx >=13 arch: x86_64 platform: linux license: Apache-2.0 license_family: APACHE - size: 612463 - timestamp: 1735684749868 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-acero-18.1.0-h3b568fd_7_cpu.conda - build_number: 7 - sha256: 42cbfc87096f745d565d814d65b7228c82d985f1898859d5e456016d73e81c82 - md5: 4c1d8c3feea249782148d3cd6a25392e + size: 611558 + timestamp: 1736610592458 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-acero-18.1.0-h3b568fd_8_cpu.conda + build_number: 8 + sha256: c94844ab1d8fafe17775161283bd1fe7ab1f93f660fc5ba0c01bd33fe3d21eaf + md5: 7a8e6a363d2f39a2f3df3f181d12692d depends: - - libarrow 18.1.0 hb7781cd_7_cpu + - libarrow 18.1.0 h47f80e1_8_cpu - libgcc >=13 - libstdcxx >=13 arch: aarch64 platform: linux license: Apache-2.0 license_family: APACHE - size: 578222 - timestamp: 1735685424850 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_7_cpu.conda - build_number: 7 - sha256: 86e20cebfdb4f335e98265c1b88f5053bf3e3648768a317856295846bfdbf2b4 - md5: 3eaf71fe987de13061db795e03bb1a1c + size: 579798 + timestamp: 1736611846905 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_8_cpu.conda + build_number: 8 + sha256: 29196dc6b2e4488f98bd8950de6333efe5d1a9d0cc62e186694946766185475e + md5: 8db96829f8e427167f450c7467a1ba44 depends: - __osx >=11.0 - - libarrow 18.1.0 h0ad35bc_7_cpu + - libarrow 18.1.0 hf3eb8e5_8_cpu - libcxx >=18 arch: arm64 platform: osx license: Apache-2.0 license_family: APACHE - size: 485185 - timestamp: 1735683071232 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_7_cpu.conda - build_number: 7 - sha256: 99c12511fba79c7947f78d676eae5857659084f687f375f68bc20bd4cddb0a0e - md5: 0a81eb63d7cd150f598c752e86388d57 + size: 484442 + timestamp: 1736608695654 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_8_cpu.conda + build_number: 8 + sha256: fe50edf030b5ccbadec2bf8f90d4cdf32d63ec52ba26233fc2c8bfbe43df3b15 + md5: 894a5ed78728b77c997fefeee222ac4d depends: - __glibc >=2.17,<3.0.a0 - - libarrow 18.1.0 hd595efa_7_cpu - - libarrow-acero 18.1.0 hcb10f89_7_cpu + - libarrow 18.1.0 h9d9f30d_8_cpu + - libarrow-acero 18.1.0 hcb10f89_8_cpu - libgcc >=13 - - libparquet 18.1.0 h081d1f1_7_cpu + - libparquet 18.1.0 h081d1f1_8_cpu - libstdcxx >=13 arch: x86_64 platform: linux license: Apache-2.0 license_family: APACHE - size: 587497 - timestamp: 1735684880531 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-dataset-18.1.0-h3b568fd_7_cpu.conda - build_number: 7 - sha256: 13ba7d3d08015aa26569eca9e198e2f8b2a0cd2d9c420e41c78cc2e5d5170f26 - md5: f39f5d725c2ca94c2e7b19e2717fd4ab + size: 588032 + timestamp: 1736610711976 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-dataset-18.1.0-h3b568fd_8_cpu.conda + build_number: 8 + sha256: bb87d8e633074c9759d93abb277d31314dc66fad741253b48e8265e186228c5b + md5: 11856da892b919cc27bd62638d701c65 depends: - - libarrow 18.1.0 hb7781cd_7_cpu - - libarrow-acero 18.1.0 h3b568fd_7_cpu + - libarrow 18.1.0 h47f80e1_8_cpu + - libarrow-acero 18.1.0 h3b568fd_8_cpu - libgcc >=13 - - libparquet 18.1.0 hfc78867_7_cpu + - libparquet 18.1.0 hfc78867_8_cpu - libstdcxx >=13 arch: aarch64 platform: linux license: Apache-2.0 license_family: APACHE - size: 560329 - timestamp: 1735685518922 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_7_cpu.conda - build_number: 7 - sha256: 52c5c4e9cd5f2ac91dcebb6a920ab2536febcea116ff8767e5439329d7da820b - md5: 97a2d3606682d94f7d73112e9ad684ae + size: 560571 + timestamp: 1736611941995 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_8_cpu.conda + build_number: 8 + sha256: bff2d39e418eadab8c522a536449ac90f070dd8e83e2bd5e67a9c3eb8ecf712f + md5: 7b3736f49b3ba299b7799aeb448cb830 depends: - __osx >=11.0 - - libarrow 18.1.0 h0ad35bc_7_cpu - - libarrow-acero 18.1.0 hf07054f_7_cpu + - libarrow 18.1.0 hf3eb8e5_8_cpu + - libarrow-acero 18.1.0 hf07054f_8_cpu - libcxx >=18 - - libparquet 18.1.0 h636d7b7_7_cpu + - libparquet 18.1.0 h636d7b7_8_cpu arch: arm64 platform: osx license: Apache-2.0 license_family: APACHE - size: 491237 - timestamp: 1735684688308 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_7_cpu.conda - build_number: 7 - sha256: 53ea53a06e137c2f81ebfdff3f978babb8b59e31f705a19b57056ec8754c1abf - md5: e128def53c133e8a23ac00cd4a479335 + size: 491001 + timestamp: 1736609758514 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_8_cpu.conda + build_number: 8 + sha256: dca372e27724904577315b8db3793e027a5c152a485e505e630a57b15634cd85 + md5: 46eaf81238da6f3ffab1f3ffdcee382e depends: - __glibc >=2.17,<3.0.a0 - libabseil * cxx17* - libabseil >=20240722.0,<20240723.0a0 - - libarrow 18.1.0 hd595efa_7_cpu - - libarrow-acero 18.1.0 hcb10f89_7_cpu - - libarrow-dataset 18.1.0 hcb10f89_7_cpu + - libarrow 18.1.0 h9d9f30d_8_cpu + - libarrow-acero 18.1.0 hcb10f89_8_cpu + - libarrow-dataset 18.1.0 hcb10f89_8_cpu - libgcc >=13 - libprotobuf >=5.28.3,<5.28.4.0a0 - libstdcxx >=13 @@ -2788,18 +2788,18 @@ packages: platform: linux license: Apache-2.0 license_family: APACHE - size: 521861 - timestamp: 1735684940668 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-substrait-18.1.0-h1e9d426_7_cpu.conda - build_number: 7 - sha256: 252e2a0d8c733f36b50499786480a05a59577d617f291868149c80534c1e8ffc - md5: 6da921d9e1c4e2ab2679eeea7cbd4c82 + size: 521707 + timestamp: 1736610765240 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-substrait-18.1.0-h1e9d426_8_cpu.conda + build_number: 8 + sha256: 1896ea00da28e10670f7ba51bb543e68a87f717e9f5692fee44268f1a13d9eee + md5: e7dc0209e065a2b51f19848cefa4b1ab depends: - libabseil * cxx17* - libabseil >=20240722.0,<20240723.0a0 - - libarrow 18.1.0 hb7781cd_7_cpu - - libarrow-acero 18.1.0 h3b568fd_7_cpu - - libarrow-dataset 18.1.0 h3b568fd_7_cpu + - libarrow 18.1.0 h47f80e1_8_cpu + - libarrow-acero 18.1.0 h3b568fd_8_cpu + - libarrow-dataset 18.1.0 h3b568fd_8_cpu - libgcc >=13 - libprotobuf >=5.28.3,<5.28.4.0a0 - libstdcxx >=13 @@ -2807,27 +2807,27 @@ packages: platform: linux license: Apache-2.0 license_family: APACHE - size: 516014 - timestamp: 1735685565929 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_7_cpu.conda - build_number: 7 - sha256: a45bbdd6932aed972d6c6ce30a7439aa8ec9d9b8ee5affb350d41e50abdc0127 - md5: 91927747173f65695e441346c7145e26 + size: 517189 + timestamp: 1736611989417 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_8_cpu.conda + build_number: 8 + sha256: ae52d926ebfc8edb0728824f2918a825d39bd85a4ef27fe2b73656cfecdd7c69 + md5: f67eb19d22ba355cced8c86073ad49b1 depends: - __osx >=11.0 - libabseil * cxx17* - libabseil >=20240722.0,<20240723.0a0 - - libarrow 18.1.0 h0ad35bc_7_cpu - - libarrow-acero 18.1.0 hf07054f_7_cpu - - libarrow-dataset 18.1.0 hf07054f_7_cpu + - libarrow 18.1.0 hf3eb8e5_8_cpu + - libarrow-acero 18.1.0 hf07054f_8_cpu + - libarrow-dataset 18.1.0 hf07054f_8_cpu - libcxx >=18 - libprotobuf >=5.28.3,<5.28.4.0a0 arch: arm64 platform: osx license: Apache-2.0 license_family: APACHE - size: 452385 - timestamp: 1735684993831 + size: 452161 + timestamp: 1736609917123 - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-26_linux64_openblas.conda build_number: 26 sha256: 30bd658682b124243f8e52d8edf8a19e7be1bc31e4fe4baec30a64002dc8cd0c @@ -3125,17 +3125,17 @@ packages: license_family: MIT size: 385098 timestamp: 1734000160270 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.6-ha82da77_1.conda - sha256: 2b2443404503cd862385fd2f2a2c73f9624686fd1e5a45050b4034cfc06904ec - md5: ce5252d8db110cdb4ae4173d0a63c7c5 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda + sha256: 776092346da87a2a23502e14d91eb0c32699c4a1522b7331537bd1c3751dcff5 + md5: 5b3e1610ff8bd5443476b91d618f5b77 depends: - __osx >=11.0 arch: arm64 platform: osx license: Apache-2.0 WITH LLVM-exception license_family: Apache - size: 520992 - timestamp: 1734494699681 + size: 523505 + timestamp: 1736877862502 - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.23-h4ddbbb0_0.conda sha256: 511d801626d02f4247a04fff957cc6e9ec4cc7e8622bd9acd076bcdc5de5fe66 md5: 8dfae1d2e74767e9ce36d5fa0d8605db @@ -3939,13 +3939,13 @@ packages: license_family: BSD size: 4165774 timestamp: 1730772154295 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_7_cpu.conda - build_number: 7 - sha256: 55945b761130f60abdecf1551907ecfd05cb4a5958cf74d855b30c005ecb3592 - md5: b97013ef4e1dd2cf11594f06d5b5e83a +- conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_8_cpu.conda + build_number: 8 + sha256: 2c6d900d4e9dd3c4000886d76d3f8a099e904667ebc6935b49428e6e9b766481 + md5: a9fa0ef309406c84b46db3a28efd761e depends: - __glibc >=2.17,<3.0.a0 - - libarrow 18.1.0 hd595efa_7_cpu + - libarrow 18.1.0 h9d9f30d_8_cpu - libgcc >=13 - libstdcxx >=13 - libthrift >=0.21.0,<0.21.1.0a0 @@ -3954,14 +3954,14 @@ packages: platform: linux license: Apache-2.0 license_family: APACHE - size: 1205598 - timestamp: 1735684849150 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libparquet-18.1.0-hfc78867_7_cpu.conda - build_number: 7 - sha256: 6dff9bbe731dc2cefe96bd9c7981d2cbef2b564a3152840a29c9b6a493ea50d9 - md5: 184bec7a9392ab6ba8134041e81971d6 + size: 1207011 + timestamp: 1736610684584 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libparquet-18.1.0-hfc78867_8_cpu.conda + build_number: 8 + sha256: 2ed6b9eac4504051ddc094ea3f3a2b3198d4d25a443a96fa2971d8075d790c31 + md5: 9a907190c9e2c6bf1a29569700218f0b depends: - - libarrow 18.1.0 hb7781cd_7_cpu + - libarrow 18.1.0 h47f80e1_8_cpu - libgcc >=13 - libstdcxx >=13 - libthrift >=0.21.0,<0.21.1.0a0 @@ -3970,15 +3970,15 @@ packages: platform: linux license: Apache-2.0 license_family: APACHE - size: 1117825 - timestamp: 1735685495511 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_7_cpu.conda - build_number: 7 - sha256: bf42e43542a90edd86ba5aa5fd4543671625f1bc35f62be32688f00e18bae990 - md5: 93de9ba66a20db32a2646d313794b3a8 + size: 1117465 + timestamp: 1736611918180 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_8_cpu.conda + build_number: 8 + sha256: 4991519ef4264abc7160e9faaf8ff01d4731bf1497076bef1895d6c366f796eb + md5: b8bd275a49877fdec62ff787818a869d depends: - __osx >=11.0 - - libarrow 18.1.0 h0ad35bc_7_cpu + - libarrow 18.1.0 hf3eb8e5_8_cpu - libcxx >=18 - libthrift >=0.21.0,<0.21.1.0a0 - openssl >=3.4.0,<4.0a0 @@ -3986,8 +3986,8 @@ packages: platform: osx license: Apache-2.0 license_family: APACHE - size: 873251 - timestamp: 1735684582558 + size: 873593 + timestamp: 1736609701839 - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.45-h943b412_0.conda sha256: b8f5b5ba9a14dedf7c97c01300de492b1b52b68eacbc3249a13fdbfa82349a2f md5: 85cbdaacad93808395ac295b5667d25b @@ -4147,9 +4147,9 @@ packages: license: ISC size: 164972 timestamp: 1716828607917 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.2-hee588c1_0.conda - sha256: 48af21ebc2cbf358976f1e0f4a0ab9e91dfc83d0ef337cf3837c6f5bc22fb352 - md5: b58da17db24b6e08bcbf8fed2fb8c915 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.48.0-hee588c1_0.conda + sha256: 7bb84f44e1bd756da4a3d0d43308324a5533e6ba9f4772475884bce44d405064 + md5: 84bd1c9a82b455e7a2f390375fb38f90 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -4157,30 +4157,30 @@ packages: arch: x86_64 platform: linux license: Unlicense - size: 873551 - timestamp: 1733761824646 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.2-h5eb1b54_0.conda - sha256: 885a27fa84a5a73ed9779168c02b6c386e2fc7a53f0566b32a09ceca146b42b4 - md5: d4bf59f8783a4a66c0aec568f6de3ff4 + size: 876582 + timestamp: 1737123945341 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.48.0-h5eb1b54_0.conda + sha256: b4365ab7c74a2e6c0444eb950367fa3ca56a87c9921b2faa5ad032fe7a7df682 + md5: 1998946fa3ccf38a07b44a879b2227ae depends: - libgcc >=13 - libzlib >=1.3.1,<2.0a0 arch: aarch64 platform: linux license: Unlicense - size: 1042182 - timestamp: 1733761913736 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda - sha256: f192f3c8973de9ec4c214990715f13b781965247a5cedf9162e7f9e699cfc3c4 - md5: 122d6f29470f1a991e85608e77e56a8a + size: 1044953 + timestamp: 1737123983895 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.48.0-h3f77e49_0.conda + sha256: b31169cf0ca7b6835baca4ab92d6cf2eee83b1a12a11b72f39521e8baf4d6acb + md5: 714719df4f49e30f9728956f240846ca depends: - __osx >=11.0 - libzlib >=1.3.1,<2.0a0 arch: arm64 platform: osx license: Unlicense - size: 850553 - timestamp: 1733762057506 + size: 853163 + timestamp: 1737124192432 - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda sha256: 0407ac9fda2bb67e11e357066eff144c845801d00b5f664efbc48813af1e7bb9 md5: be2de152d8073ef1c01b7728475f2fe7 @@ -4421,9 +4421,9 @@ packages: license_family: BSD size: 35720 timestamp: 1680113474501 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda - sha256: a35cd81cd1a9add11024097da83cc06b0aae83186fe4124b77710876f37d8f31 - md5: 070e3c9ddab77e38799d5c30b109c633 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.50.0-hb9d3cd8_0.conda + sha256: b4a8890023902aef9f1f33e3e35603ad9c2f16c21fdb58e968fa6c1bd3e94c0b + md5: 771ee65e13bc599b0b62af5359d80169 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -4431,30 +4431,30 @@ packages: platform: linux license: MIT license_family: MIT - size: 884647 - timestamp: 1729322566955 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda - sha256: adf4eca89339ac7780f2394e7e6699be81259eb91f79f9d9fdf2c1bc6b26f210 - md5: 1899e1ec2be63386c41c4db31d3056af + size: 891272 + timestamp: 1737016632446 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.50.0-h86ecc28_0.conda + sha256: 67914c7f171d343059144d804c2f17fcd621a94e45f179a0fd843b8c1618823e + md5: 915db044076cbbdffb425170deb4ce38 depends: - libgcc >=13 arch: aarch64 platform: linux license: MIT license_family: MIT - size: 627484 - timestamp: 1729322575379 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda - sha256: 0e5176af1e788ad5006cf261c4ea5a288a935fda48993b0240ddd2e562dc3d02 - md5: 4bc348e3a1a74d20a3f9beb866d75e0a + size: 621056 + timestamp: 1737016626950 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.50.0-h5505292_0.conda + sha256: d13fb49d4c8262bf2c44ffb2c77bb2b5d0f85fc6de76bdb75208efeccb29fce6 + md5: 20717343fb30798ab7c23c2e92b748c1 depends: - __osx >=11.0 arch: arm64 platform: osx license: MIT license_family: MIT - size: 410500 - timestamp: 1729322654121 + size: 418890 + timestamp: 1737016751326 - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.5.0-h851e524_0.conda sha256: c45283fd3e90df5f0bd3dbcd31f59cdd2b001d424cf30a07223655413b158eaf md5: 63f790534398730f59e1b899c3644d4a @@ -4645,19 +4645,19 @@ packages: license_family: Other size: 46438 timestamp: 1727963202283 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.6-hdb05f8b_0.conda - sha256: a0f3e9139ab16f0a67b9d2bbabc15b78977168f4a5b5503fed4962dcb9a96102 - md5: 34fdeffa0555a1a56f38839415cc066c +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.7-hdb05f8b_0.conda + sha256: b92a669f2059874ebdcb69041b6c243d68ffc3fb356ac1339cec44aeb27245d7 + md5: c4d54bfd3817313ce758aa76283b118d depends: - __osx >=11.0 constrains: - - openmp 19.1.6|19.1.6.* + - openmp 19.1.7|19.1.7.* arch: arm64 platform: osx license: Apache-2.0 WITH LLVM-exception license_family: APACHE - size: 281251 - timestamp: 1734520462311 + size: 280830 + timestamp: 1736986295869 - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda sha256: 47326f811392a5fd3055f0f773036c392d26fdb32e4d8e7a8197eed951489346 md5: 9de5350a85c4a20c685259b889aa6393 @@ -4752,47 +4752,47 @@ packages: license_family: BSD size: 24976 timestamp: 1733219849253 -- conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011105-release.conda +- conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011705-release.conda noarch: python - sha256: 4bd3331f281b0d42b57e7e5d28eee3650cb52ffb3f9c381f349255034ab4d011 - md5: 9a12141b0beb110b83d4ae256d8de1b0 + sha256: 15578c7bc78001d3882c3b9af9d7d8bf3566c68ae133870038be055c8dfd90e9 + md5: 7e6c35d82044e8d31e9327e7d90bfb2b depends: - - max-core ==25.1.0.dev2025011105 release - - max-python >=25.1.0.dev2025011105,<26.0a0 - - mojo-jupyter ==25.1.0.dev2025011105 release - - mblack ==25.1.0.dev2025011105 release + - max-core ==25.1.0.dev2025011705 release + - max-python >=25.1.0.dev2025011705,<26.0a0 + - mojo-jupyter ==25.1.0.dev2025011705 release + - mblack ==25.1.0.dev2025011705 release license: LicenseRef-Modular-Proprietary - size: 9919 - timestamp: 1736572603494 -- conda: https://conda.modular.com/max-nightly/linux-64/max-core-25.1.0.dev2025011105-release.conda - sha256: 45fdbcfa2c105f01e3c06823e072f2b7b3ceeafe21188973a3f64a87c43c29e6 - md5: ba267ab335859f14f9c0d887d4a83f14 + size: 9920 + timestamp: 1737091778690 +- conda: https://conda.modular.com/max-nightly/linux-64/max-core-25.1.0.dev2025011705-release.conda + sha256: 3e39d779710559206129052c64ac530b9d262288f75812ba07c3e3e395a0e18e + md5: 5575de33b0503143e635ade746f057c3 depends: - - mblack ==25.1.0.dev2025011105 release + - mblack ==25.1.0.dev2025011705 release license: LicenseRef-Modular-Proprietary - size: 244035937 - timestamp: 1736572608009 -- conda: https://conda.modular.com/max-nightly/linux-aarch64/max-core-25.1.0.dev2025011105-release.conda - sha256: 23794990d901f563fd2492483d4f5e0b1b91ed616028bf70bd9e2eaace6bd56b - md5: e8f626acac2d17a591ac8353ba41f5d0 + size: 244764907 + timestamp: 1737091186388 +- conda: https://conda.modular.com/max-nightly/linux-aarch64/max-core-25.1.0.dev2025011705-release.conda + sha256: a9e7747e7cb7ff01dc58f4c7f5772d2b4483693dd200c88653b1ec2dda46bc8b + md5: a9b13b577fb1bcc14b330f5a4185023c depends: - - mblack ==25.1.0.dev2025011105 release + - mblack ==25.1.0.dev2025011705 release license: LicenseRef-Modular-Proprietary - size: 247708765 - timestamp: 1736572603492 -- conda: https://conda.modular.com/max-nightly/osx-arm64/max-core-25.1.0.dev2025011105-release.conda - sha256: 8cc71a4a35f96867f4131ddca60d084a8df937ec0f551b62601adc9202788a82 - md5: 4b8d6a0afbcebe7c2e5dc2ccd30c55a8 + size: 247240781 + timestamp: 1737091778688 +- conda: https://conda.modular.com/max-nightly/osx-arm64/max-core-25.1.0.dev2025011705-release.conda + sha256: 9369b738945ef783af1e4caf2676bd6a299ff86e4ef9504e7a5ee69841fffa01 + md5: c4397350b325ae5a0e07f61e483fc3e5 depends: - - mblack ==25.1.0.dev2025011105 release + - mblack ==25.1.0.dev2025011705 release license: LicenseRef-Modular-Proprietary - size: 206225127 - timestamp: 1736572820782 -- conda: https://conda.modular.com/max-nightly/linux-64/max-python-25.1.0.dev2025011105-3.11release.conda - sha256: 8c780d1899cfde5a5117b74ff7a6bfcda2a70af331ba1f7b9e35b622449f2c1f - md5: 2c0c563904edb00f30e2de039ded9689 + size: 206615275 + timestamp: 1737092643231 +- conda: https://conda.modular.com/max-nightly/linux-64/max-python-25.1.0.dev2025011705-3.11release.conda + sha256: 1579f2f7ef96eb56ad294507a1d65cab236a45170d1f8e165ace9a3beba22514 + md5: 18a9d8cfc990a13b024167be3a96b06c depends: - - max-core ==25.1.0.dev2025011105 release + - max-core ==25.1.0.dev2025011705 release - python 3.11.* - fastapi - httpx @@ -4813,13 +4813,13 @@ packages: - uvicorn - python_abi 3.11.* *_cp311 license: LicenseRef-Modular-Proprietary - size: 124236987 - timestamp: 1736572608015 -- conda: https://conda.modular.com/max-nightly/linux-aarch64/max-python-25.1.0.dev2025011105-3.11release.conda - sha256: c880a5a6c057ad5192f4244fa71cc4959620b84dcd6f39f0570a7864df767081 - md5: 6b92478afed28e8c0157796d56ff40b9 + size: 124607308 + timestamp: 1737091186395 +- conda: https://conda.modular.com/max-nightly/linux-aarch64/max-python-25.1.0.dev2025011705-3.11release.conda + sha256: 6036dd2cdac03ac625cd5395bf5c60e013c45c04c8d3daa386d20609a5472c81 + md5: 87e3800f4237db30865cf5e28d42da1c depends: - - max-core ==25.1.0.dev2025011105 release + - max-core ==25.1.0.dev2025011705 release - python 3.11.* - fastapi - httpx @@ -4840,13 +4840,13 @@ packages: - uvicorn - python_abi 3.11.* *_cp311 license: LicenseRef-Modular-Proprietary - size: 127989188 - timestamp: 1736572603500 -- conda: https://conda.modular.com/max-nightly/osx-arm64/max-python-25.1.0.dev2025011105-3.11release.conda - sha256: e20c9b53956e448509ead0b493f56b8fcef26415e0e98db68d4b288fa815a227 - md5: f945c8dcba7cc2b1060cd445a607a689 + size: 127402633 + timestamp: 1737091778695 +- conda: https://conda.modular.com/max-nightly/osx-arm64/max-python-25.1.0.dev2025011705-3.11release.conda + sha256: 71d6321e9296dbc390f118e2ad1056601c94076ff33e5f48c72e27b86052aa07 + md5: 40d60b1a7730858a15b26a6ce3e68dc5 depends: - - max-core ==25.1.0.dev2025011105 release + - max-core ==25.1.0.dev2025011705 release - python 3.11.* - fastapi - httpx @@ -4867,12 +4867,12 @@ packages: - uvicorn - python_abi 3.11.* *_cp311 license: LicenseRef-Modular-Proprietary - size: 110623035 - timestamp: 1736572820784 -- conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011105-release.conda + size: 110519320 + timestamp: 1737092643233 +- conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011705-release.conda noarch: python - sha256: f447d269d29bb49fd97275f623632a569638c31b40e88489367df3d7d4ce90e2 - md5: 32c691c7fc2c6a218e1ce2272965a101 + sha256: 180bbe7d8b76c5d0f453b72f81fae10522b7a98a31e6fbeff542dbb31bb9b613 + md5: 680622d3117019e99ddc173efab357c7 depends: - python >=3.9,<3.13 - click >=8.0.0 @@ -4882,8 +4882,8 @@ packages: - platformdirs >=2 - python license: MIT - size: 130815 - timestamp: 1736572603499 + size: 130807 + timestamp: 1737091778695 - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 md5: 592132998493b3ff25fd7479396e8351 @@ -4893,18 +4893,18 @@ packages: license_family: MIT size: 14465 timestamp: 1733255681319 -- conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011105-release.conda +- conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011705-release.conda noarch: python - sha256: 05af473b2b4983829660ba70eb0cb6607f019c4f4b8d107350ea491c6bd8d1cd - md5: 036f5ddfbcce66b3f9972cebf1cec107 + sha256: eab543a5c31c091b3d042980d068a950c51905d14a18532710f9be94ba88ba5d + md5: eea061b963a95002a8740d4b4f506d44 depends: - - max-core ==25.1.0.dev2025011105 release + - max-core ==25.1.0.dev2025011705 release - python >=3.9,<3.13 - jupyter_client >=8.6.2,<8.7 - python license: LicenseRef-Modular-Proprietary - size: 22937 - timestamp: 1736572603499 + size: 22929 + timestamp: 1737091778696 - conda: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.1.0-py311h2dc5d0c_2.conda sha256: afaab7a028281d8b5336db2b994fd3f9694862b6ca372c079dc4e84ad768c20a md5: bb8ca118919836624d920b4c44383a15 @@ -4999,37 +4999,37 @@ packages: license_family: MIT size: 10854 timestamp: 1733230986902 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda - sha256: 6a1d5d8634c1a07913f1c525db6455918cbc589d745fac46d9d6e30340c8731a - md5: 70caf8bb6cf39a0b6b7efc885f51c0fe +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda + sha256: 17fe6afd8a00446010220d52256bd222b1e4fcb93bd587e7784b03219f3dc358 + md5: 04b34b9a40cdc48cfdab261ab176ff74 depends: - __glibc >=2.17,<3.0.a0 - - libgcc-ng >=12 + - libgcc >=13 arch: x86_64 platform: linux license: X11 AND BSD-3-Clause - size: 889086 - timestamp: 1724658547447 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda - sha256: acad4cf1f57b12ee1e42995e6fac646fa06aa026529f05eb8c07eb0a84a47a84 - md5: 91d49c85cacd92caa40cf375ef72a25d + size: 894452 + timestamp: 1736683239706 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_2.conda + sha256: 9fd726174dde993c560dd6fa1a383e61d546d380e98e0b0348d22512e5d86e24 + md5: 779046fb585c71373e8a051be06c6011 depends: - - libgcc-ng >=12 + - libgcc >=13 arch: aarch64 platform: linux license: X11 AND BSD-3-Clause - size: 924472 - timestamp: 1724658573518 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - sha256: 27d0b9ff78ad46e1f3a6c96c479ab44beda5f96def88e2fe626e0a49429d8afc - md5: cb2b0ea909b97b3d70cd3921d1445e1a + size: 928402 + timestamp: 1736683192463 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda + sha256: b45c73348ec9841d5c893acc2e97adff24127548fe8c786109d03c41ed564e91 + md5: f6f7c5b7d0983be186c46c4f6f8f9af8 depends: - __osx >=11.0 arch: arm64 platform: osx license: X11 AND BSD-3-Clause - size: 802321 - timestamp: 1724658775723 + size: 796754 + timestamp: 1736683572099 - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py311h64a7726_0.conda sha256: 3f4365e11b28e244c95ba8579942b0802761ba7bb31c026f50d1a9ea9c728149 md5: a502d7aad449a1206efb366d6a12c52d @@ -5339,9 +5339,9 @@ packages: license_family: BSD size: 15695466 timestamp: 1726879158862 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pandas-2.2.3-py311h848c333_1.conda - sha256: 8b368a4871bc9c8c9c582fc3539c00a44ae41eb239ca330ee55f9c8bd85a0bfd - md5: 609f8498e89280eeda12a0be33efed35 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pandas-2.2.3-py311h848c333_2.conda + sha256: 85c43e205902b6960ce203201aada9cef9b3e24c51de5bdd4feb1127000c5680 + md5: f5ab90c426888c9c916b1956e1a03b3c depends: - libgcc >=13 - libstdcxx >=13 @@ -5353,12 +5353,38 @@ packages: - python-tzdata >=2022a - python_abi 3.11.* *_cp311 - pytz >=2020.1,<2024.2 + constrains: + - sqlalchemy >=2.0.0 + - scipy >=1.10.0 + - fsspec >=2022.11.0 + - xlsxwriter >=3.0.5 + - numba >=0.56.4 + - tabulate >=0.9.0 + - pytables >=3.8.0 + - zstandard >=0.19.0 + - gcsfs >=2022.11.0 + - pyqt5 >=5.15.8 + - beautifulsoup4 >=4.11.2 + - psycopg2 >=2.9.6 + - s3fs >=2022.11.0 + - lxml >=4.9.2 + - xarray >=2022.12.0 + - openpyxl >=3.1.0 + - fastparquet >=2022.12.0 + - numexpr >=2.8.4 + - pyreadstat >=1.2.0 + - qtpy >=2.3.0 + - tzdata >=2022.7 + - matplotlib >=3.6.3 + - pyxlsb >=1.0.10 + - blosc >=1.21.3 + - bottleneck >=1.3.6 arch: aarch64 platform: linux license: BSD-3-Clause license_family: BSD - size: 15390929 - timestamp: 1726879096370 + size: 15432560 + timestamp: 1736811218050 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.2.3-py311h9cb3ce9_1.conda sha256: 0a08027b25e4f6034d7733c7366f44283246d61cb82d1721f8789d50ebfef287 md5: 9ffa9dee175c76e68ea5de5aa1168d83 @@ -6700,12 +6726,12 @@ packages: license_family: PSF size: 39637 timestamp: 1733188758212 -- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf - md5: 8ac3367aafb1cc0a068483c580af8015 +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda + sha256: c4b1ae8a2931fe9b274c44af29c5475a85b37693999f8c792dad0f8c6734b1de + md5: dbcace4706afdfb7eb891f7b37d07c04 license: LicenseRef-Public-Domain - size: 122354 - timestamp: 1728047496079 + size: 122921 + timestamp: 1737119101255 - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda sha256: 114919ffa80c328127dab9c8e7a38f9d563c617691fb81fccb11c1e86763727e md5: 32674f8dbfb7b26410ed580dd3c10a29 @@ -6804,6 +6830,7 @@ packages: arch: x86_64 platform: linux license: MIT + license_family: MIT size: 409870 timestamp: 1736550564534 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/watchfiles-1.0.4-py311h0ca61a2_0.conda @@ -6820,6 +6847,7 @@ packages: arch: aarch64 platform: linux license: MIT + license_family: MIT size: 404840 timestamp: 1736550636184 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/watchfiles-1.0.4-py311h3ff9189_0.conda @@ -6836,6 +6864,7 @@ packages: arch: arm64 platform: osx license: MIT + license_family: MIT size: 365948 timestamp: 1736550860802 - conda: https://conda.anaconda.org/conda-forge/linux-64/websockets-14.1-py311h9ecbd09_0.conda @@ -6880,9 +6909,9 @@ packages: license_family: BSD size: 240817 timestamp: 1731498829166 -- conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.0-py311h9ecbd09_0.conda - sha256: 8e9a7a1a69d0d59b3cb0066fbdbf16dc7a0d9554ffc2a365e67eca72230ca3e8 - md5: 452e39fb544b1ec9cc6c5b2ac9c47efa +- conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.2-py311h9ecbd09_0.conda + sha256: e383de6512e65b5a227e7b0e1a34ffc441484044096a23ca4d3b6eb53a64d261 + md5: c4bb961f5a2020837fe3f7f30fadc2e1 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -6892,11 +6921,11 @@ packages: platform: linux license: BSD-2-Clause license_family: BSD - size: 65396 - timestamp: 1732523677157 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-1.17.0-py311ha879c10_0.conda - sha256: 33e12fc8188dc0f649ff9fbc3770bff61912722e88ebae806accff72d01ca34f - md5: e2d4e19306f4df6953c7f23d15ab3805 + size: 64880 + timestamp: 1736869605707 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-1.17.2-py311ha879c10_0.conda + sha256: ef2c09b8c62a195120dcf6d2dc32c349fe957167dca98765babb9a3be6f87d92 + md5: 4d4f5aa0b7ed545efca6597c6ae5259d depends: - libgcc >=13 - python >=3.11,<3.12.0a0 @@ -6906,11 +6935,11 @@ packages: platform: linux license: BSD-2-Clause license_family: BSD - size: 65780 - timestamp: 1732523794589 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.0-py311h917b07b_0.conda - sha256: fff7f86570f0a3fd90878b75b552bafddb854e8f4d68a171cd427a13e9eb160c - md5: a56950191b7efa9406bbaff925173d20 + size: 65830 + timestamp: 1736869702140 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.2-py311h917b07b_0.conda + sha256: 121396c6f75ffcbf4d2296ad0ad9190a62aff0ae22ed4080a39827a6275cdf1b + md5: 40fa235e40013f4e5400f1d01add07dc depends: - __osx >=11.0 - python >=3.11,<3.12.0a0 @@ -6920,8 +6949,8 @@ packages: platform: osx license: BSD-2-Clause license_family: BSD - size: 62309 - timestamp: 1732524074190 + size: 62401 + timestamp: 1736869710495 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb9d3cd8_0.conda sha256: ed10c9283974d311855ae08a16dfd7e56241fac632aec3b92e3cfe73cff31038 md5: f6ebe2cb3f82ba6c057dde5d9debe4f7 diff --git a/examples/matmul.mojo b/examples/matmul.mojo index ad81185519..6843303a12 100644 --- a/examples/matmul.mojo +++ b/examples/matmul.mojo @@ -84,7 +84,7 @@ def run_matmul_python() -> Float64: var pymatmul: PythonObject = Python.import_module("pymatmul") var py = Python.import_module("builtins") - var gflops = pymatmul.benchmark_matmul_python(128, 128, 128).to_float64() + var gflops = Float64(pymatmul.benchmark_matmul_python(128, 128, 128)) py.print(py.str("{:<18}{:>8.3f} GFLOPS").format("Python:", gflops)) return gflops @@ -94,7 +94,7 @@ def run_matmul_numpy() -> Float64: var pymatmul: PythonObject = Python.import_module("pymatmul") var py = Python.import_module("builtins") - var gflops = pymatmul.benchmark_matmul_numpy(M, N, K).to_float64() + var gflops = Float64(pymatmul.benchmark_matmul_numpy(M, N, K)) py.print(py.str("{:<18}{:>8.3f} GFLOPS").format("Numpy:", gflops)) return gflops diff --git a/examples/notebooks/Mandelbrot.ipynb b/examples/notebooks/Mandelbrot.ipynb index 4dcec04c6a..348d0013ff 100644 --- a/examples/notebooks/Mandelbrot.ipynb +++ b/examples/notebooks/Mandelbrot.ipynb @@ -1,384 +1,385 @@ { - "cells": [ - { - "cell_type": "raw", - "metadata": {}, - "source": [ - "---\n", - "title: Mandelbrot in Mojo with Python plots\n", - "description: Learn how to write high-performance Mojo code and import Python packages.\n", - "website:\n", - " open-graph:\n", - " image: /static/images/mojo-social-card.png\n", - " twitter-card:\n", - " image: /static/images/mojo-social-card.png\n", - "---" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[//]: # REMOVE_FOR_WEBSITE\n", - "*Copyright 2023 Modular, Inc: Licensed under the Apache License v2.0 with LLVM Exceptions.*" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[//]: # REMOVE_FOR_WEBSITE\n", - "# Mandelbrot in Mojo with Python plots\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Not only is Mojo great for writing high-performance code, but it also allows us to leverage the huge Python ecosystem of libraries and tools. With seamless Python interoperability, Mojo can use Python for what it's good at, especially GUIs, without sacrificing performance in critical code. Let's take the classic Mandelbrot set algorithm and implement it in Mojo.\n", - "\n", - "This tutorial shows two aspects of Mojo. First, it shows that Mojo can be used to develop fast programs for irregular applications. It also shows how we can leverage Python for visualizing the results." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#|code-fold: true\n", - "import benchmark\n", - "from math import iota\n", - "from sys import num_physical_cores, simdwidthof\n", - "from algorithm import parallelize, vectorize\n", - "from complex import ComplexFloat64, ComplexSIMD\n", - "from python import Python\n", - "\n", - "alias float_type = DType.float32\n", - "alias int_type = DType.int32\n", - "alias simd_width = 2 * simdwidthof[float_type]()\n", - "alias unit = benchmark.Unit.ms" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "First set some parameters, you can try changing these to see different results:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "alias width = 960\n", - "alias height = 960\n", - "alias MAX_ITERS = 200\n", - "\n", - "alias min_x = -2.0\n", - "alias max_x = 0.6\n", - "alias min_y = -1.5\n", - "alias max_y = 1.5" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here we define a simple `Matrix` struct:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "@value\n", - "struct Matrix[type: DType, rows: Int, cols: Int]:\n", - " var data: UnsafePointer[Scalar[type]]\n", - "\n", - " fn __init__(out self):\n", - " self.data = UnsafePointer[Scalar[type]].alloc(rows * cols)\n", - "\n", - " fn __getitem__(self, row: Int, col: Int) -> Scalar[type]:\n", - " return self.data.load(row * cols + col)\n", - "\n", - " fn store[width: Int = 1](self, row: Int, col: Int, val: SIMD[type, width]):\n", - " self.data.store(row * cols + col, val)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The core [Mandelbrot](https://en.wikipedia.org/wiki/Mandelbrot_set) algorithm involves computing an iterative complex function for each pixel until it \"escapes\" the complex circle of radius 2, counting the number of iterations to escape:\n", - "\n", - "$$z_{i+1} = z_i^2 + c$$" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Compute the number of steps to escape.\n", - "def mandelbrot_kernel(c: ComplexFloat64) -> Int:\n", - " z = c\n", - " for i in range(MAX_ITERS):\n", - " z = z * z + c\n", - " if z.squared_norm() > 4:\n", - " return i\n", - " return MAX_ITERS\n", - "\n", - "\n", - "def compute_mandelbrot() -> Matrix[float_type, height, width]:\n", - " # create a matrix. Each element of the matrix corresponds to a pixel\n", - " matrix = Matrix[float_type, height, width]()\n", - "\n", - " dx = (max_x - min_x) / width\n", - " dy = (max_y - min_y) / height\n", - "\n", - " y = min_y\n", - " for row in range(height):\n", - " x = min_x\n", - " for col in range(width):\n", - " matrix.store(row, col, mandelbrot_kernel(ComplexFloat64(x, y)))\n", - " x += dx\n", - " y += dy\n", - " return matrix" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Plotting the number of iterations to escape with some color gives us the canonical Mandelbrot set plot. To render it we can directly leverage Python's `matplotlib` right from Mojo!\n", - "\n", - "First install the required libraries:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%%python\n", - "from importlib.util import find_spec\n", - "import shutil\n", - "import subprocess\n", - "\n", - "fix = \"\"\"\n", - "-------------------------------------------------------------------------\n", - "fix following the steps here:\n", - " https://github.com/modularml/mojo/issues/1085#issuecomment-1771403719\n", - "-------------------------------------------------------------------------\n", - "\"\"\"\n", - "\n", - "def install_if_missing(name: str):\n", - " if find_spec(name):\n", - " return\n", - " print(\"missing\", name)\n", - " print(f\"{name} not found, installing...\")\n", - " try:\n", - " if shutil.which('python3'): python = \"python3\"\n", - " elif shutil.which('python'): python = \"python\"\n", - " else: raise (\"python not on path\" + fix)\n", - " subprocess.check_call([python, \"-m\", \"pip\", \"install\", name])\n", - " except:\n", - " raise ImportError(f\"{name} not found\" + fix)\n", - "\n", - "install_if_missing(\"numpy\")\n", - "install_if_missing(\"matplotlib\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def show_plot[type: DType](matrix: Matrix[type, height, width]):\n", - " alias scale = 10\n", - " alias dpi = 64\n", - "\n", - " np = Python.import_module(\"numpy\")\n", - " plt = Python.import_module(\"matplotlib.pyplot\")\n", - " colors = Python.import_module(\"matplotlib.colors\")\n", - "\n", - " numpy_array = np.zeros((height, width), np.float64)\n", - "\n", - " for row in range(height):\n", - " for col in range(width):\n", - " numpy_array.itemset((row, col), matrix[row, col])\n", - "\n", - " fig = plt.figure(1, [scale, scale * height // width], dpi)\n", - " ax = fig.add_axes([0.0, 0.0, 1.0, 1.0], False, 1)\n", - " light = colors.LightSource(315, 10, 0, 1, 1, 0)\n", - "\n", - " image = light.shade(numpy_array, plt.cm.hot, colors.PowerNorm(0.3), \"hsv\", 0, 0, 1.5)\n", - " plt.imshow(image)\n", - " plt.axis(\"off\")\n", - " plt.show()\n", - "\n", - "show_plot(compute_mandelbrot())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Vectorizing Mandelbrot\n", - "We showed a naive implementation of the Mandelbrot algorithm, but there are two things we can do to speed it up. We can early-stop the loop iteration when a pixel is known to have escaped, and we can leverage Mojo's access to hardware by vectorizing the loop, computing multiple pixels simultaneously. To do that we will use the `vectorize` higher order generator.\n", - "\n", - "We start by defining our main iteration loop in a vectorized fashion" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "fn mandelbrot_kernel_SIMD[\n", - " simd_width: Int\n", - "](c: ComplexSIMD[float_type, simd_width]) -> SIMD[int_type, simd_width]:\n", - " \"\"\"A vectorized implementation of the inner mandelbrot computation.\"\"\"\n", - " var cx = c.re\n", - " var cy = c.im\n", - " var x = SIMD[float_type, simd_width](0)\n", - " var y = SIMD[float_type, simd_width](0)\n", - " var y2 = SIMD[float_type, simd_width](0)\n", - " var iters = SIMD[int_type, simd_width](0)\n", - "\n", - " var t: SIMD[DType.bool, simd_width] = True\n", - " for _ in range(MAX_ITERS):\n", - " if not any(t):\n", - " break\n", - " y2 = y * y\n", - " y = x.fma(y + y, cy)\n", - " t = x.fma(x, y2) <= 4\n", - " x = x.fma(x, cx - y2)\n", - " iters = t.select(iters + 1, iters)\n", - " return iters" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The above function is parameterized on the `simd_width` and processes simd_width pixels. It only escapes once all pixels within the vector lane are done. We can use the same iteration loop as above, but this time we vectorize within each row instead. We use the `vectorize` generator to make this a simple function call. The benchmark can run in parallel or just vectorized." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "fn run_mandelbrot(parallel: Bool) raises -> Float64:\n", - " var matrix = Matrix[int_type, height, width]()\n", - "\n", - " @parameter\n", - " fn worker(row: Int):\n", - " alias scale_x = (max_x - min_x) / width\n", - " alias scale_y = (max_y - min_y) / height\n", - "\n", - " @parameter\n", - " fn compute_vector[simd_width: Int](col: Int):\n", - " \"\"\"Each time we operate on a `simd_width` vector of pixels.\"\"\"\n", - " var cx = min_x + (col + iota[float_type, simd_width]()) * scale_x\n", - " var cy = min_y + row * SIMD[float_type, simd_width](scale_y)\n", - " var c = ComplexSIMD[float_type, simd_width](cx, cy)\n", - " matrix.store(row, col, mandelbrot_kernel_SIMD[simd_width](c))\n", - "\n", - " # Vectorize the call to compute_vector where call gets a chunk of pixels.\n", - " vectorize[compute_vector, simd_width](width)\n", - "\n", - " @parameter\n", - " fn bench():\n", - " for row in range(height):\n", - " worker(row)\n", - "\n", - " @parameter\n", - " fn bench_parallel():\n", - " parallelize[worker](height, height)\n", - "\n", - " var time: Float64 = 0\n", - " if parallel:\n", - " time = benchmark.run[bench_parallel](max_runtime_secs=0.5).mean(unit)\n", - " else:\n", - " time = benchmark.run[bench](max_runtime_secs=0.5).mean(unit)\n", - "\n", - " show_plot(matrix)\n", - " matrix.data.free()\n", - " return time\n", - "\n", - "vectorized = run_mandelbrot(parallel=False)\n", - "print(\"Vectorized:\", vectorized, unit)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Parallelizing Mandelbrot\n", - "While the vectorized implementation above is efficient, we can get better performance by parallelizing on the cols. This again is simple in Mojo using the `parallelize` higher order function:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "parallelized = run_mandelbrot(parallel=True)\n", - "print(\"Parallelized:\", parallelized, unit)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Benchmarking\n", - "\n", - "In this section we compare the vectorized speed to the parallelized speed " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(\"Number of physical cores:\", num_physical_cores())\n", - "print(\"Vectorized:\", vectorized, \"ms\")\n", - "print(\"Parallelized:\", parallelized, \"ms\")\n", - "#| CHECK: speedup\n", - "print(\"Parallel speedup:\", vectorized / parallelized)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Mojo (nightly)", - "language": "mojo", - "name": "mojo-nightly-jupyter-kernel" - }, - "language_info": { - "codemirror_mode": { - "name": "mojo" - }, - "file_extension": ".mojo", - "mimetype": "text/x-mojo", - "name": "mojo" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 + "cells": [ + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "---\n", + "title: Mandelbrot in Mojo with Python plots\n", + "description: Learn how to write high-performance Mojo code and import Python packages.\n", + "website:\n", + " open-graph:\n", + " image: /static/images/mojo-social-card.png\n", + " twitter-card:\n", + " image: /static/images/mojo-social-card.png\n", + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[//]: # REMOVE_FOR_WEBSITE\n", + "*Copyright 2023 Modular, Inc: Licensed under the Apache License v2.0 with LLVM Exceptions.*" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[//]: # REMOVE_FOR_WEBSITE\n", + "# Mandelbrot in Mojo with Python plots\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Not only is Mojo great for writing high-performance code, but it also allows us to leverage the huge Python ecosystem of libraries and tools. With seamless Python interoperability, Mojo can use Python for what it's good at, especially GUIs, without sacrificing performance in critical code. Let's take the classic Mandelbrot set algorithm and implement it in Mojo.\n", + "\n", + "This tutorial shows two aspects of Mojo. First, it shows that Mojo can be used to develop fast programs for irregular applications. It also shows how we can leverage Python for visualizing the results." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#|code-fold: true\n", + "import benchmark\n", + "from math import iota\n", + "from sys import num_physical_cores, simdwidthof\n", + "from algorithm import parallelize, vectorize\n", + "from complex import ComplexFloat64, ComplexSIMD\n", + "from python import Python\n", + "from memory import UnsafePointer\n", + "\n", + "alias float_type = DType.float32\n", + "alias int_type = DType.int32\n", + "alias simd_width = 2 * simdwidthof[float_type]()\n", + "alias unit = benchmark.Unit.ms" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First set some parameters, you can try changing these to see different results:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "alias width = 960\n", + "alias height = 960\n", + "alias MAX_ITERS = 200\n", + "\n", + "alias min_x = -2.0\n", + "alias max_x = 0.6\n", + "alias min_y = -1.5\n", + "alias max_y = 1.5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we define a simple `Matrix` struct:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "@value\n", + "struct Matrix[type: DType, rows: Int, cols: Int]:\n", + " var data: UnsafePointer[Scalar[type]]\n", + "\n", + " fn __init__(out self):\n", + " self.data = UnsafePointer[Scalar[type]].alloc(rows * cols)\n", + "\n", + " fn __getitem__(self, row: Int, col: Int) -> Scalar[type]:\n", + " return self.data.load(row * cols + col)\n", + "\n", + " fn store[width: Int = 1](self, row: Int, col: Int, val: SIMD[type, width]):\n", + " self.data.store(row * cols + col, val)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The core [Mandelbrot](https://en.wikipedia.org/wiki/Mandelbrot_set) algorithm involves computing an iterative complex function for each pixel until it \"escapes\" the complex circle of radius 2, counting the number of iterations to escape:\n", + "\n", + "$$z_{i+1} = z_i^2 + c$$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Compute the number of steps to escape.\n", + "def mandelbrot_kernel(c: ComplexFloat64) -> Int:\n", + " z = c\n", + " for i in range(MAX_ITERS):\n", + " z = z * z + c\n", + " if z.squared_norm() > 4:\n", + " return i\n", + " return MAX_ITERS\n", + "\n", + "\n", + "def compute_mandelbrot() -> Matrix[float_type, height, width]:\n", + " # create a matrix. Each element of the matrix corresponds to a pixel\n", + " matrix = Matrix[float_type, height, width]()\n", + "\n", + " dx = (max_x - min_x) / width\n", + " dy = (max_y - min_y) / height\n", + "\n", + " y = min_y\n", + " for row in range(height):\n", + " x = min_x\n", + " for col in range(width):\n", + " matrix.store(row, col, mandelbrot_kernel(ComplexFloat64(x, y)))\n", + " x += dx\n", + " y += dy\n", + " return matrix" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Plotting the number of iterations to escape with some color gives us the canonical Mandelbrot set plot. To render it we can directly leverage Python's `matplotlib` right from Mojo!\n", + "\n", + "First install the required libraries:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%%python\n", + "from importlib.util import find_spec\n", + "import shutil\n", + "import subprocess\n", + "\n", + "fix = \"\"\"\n", + "-------------------------------------------------------------------------\n", + "fix following the steps here:\n", + " https://github.com/modularml/mojo/issues/1085#issuecomment-1771403719\n", + "-------------------------------------------------------------------------\n", + "\"\"\"\n", + "\n", + "def install_if_missing(name: str):\n", + " if find_spec(name):\n", + " return\n", + " print(\"missing\", name)\n", + " print(f\"{name} not found, installing...\")\n", + " try:\n", + " if shutil.which('python3'): python = \"python3\"\n", + " elif shutil.which('python'): python = \"python\"\n", + " else: raise (\"python not on path\" + fix)\n", + " subprocess.check_call([python, \"-m\", \"pip\", \"install\", name])\n", + " except:\n", + " raise ImportError(f\"{name} not found\" + fix)\n", + "\n", + "install_if_missing(\"numpy\")\n", + "install_if_missing(\"matplotlib\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def show_plot[type: DType](matrix: Matrix[type, height, width]):\n", + " alias scale = 10\n", + " alias dpi = 64\n", + "\n", + " np = Python.import_module(\"numpy\")\n", + " plt = Python.import_module(\"matplotlib.pyplot\")\n", + " colors = Python.import_module(\"matplotlib.colors\")\n", + "\n", + " numpy_array = np.zeros((height, width), np.float64)\n", + "\n", + " for row in range(height):\n", + " for col in range(width):\n", + " numpy_array.itemset((row, col), matrix[row, col])\n", + "\n", + " fig = plt.figure(1, [scale, scale * height // width], dpi)\n", + " ax = fig.add_axes([0.0, 0.0, 1.0, 1.0], False, 1)\n", + " light = colors.LightSource(315, 10, 0, 1, 1, 0)\n", + "\n", + " image = light.shade(numpy_array, plt.cm.hot, colors.PowerNorm(0.3), \"hsv\", 0, 0, 1.5)\n", + " plt.imshow(image)\n", + " plt.axis(\"off\")\n", + " plt.show()\n", + "\n", + "show_plot(compute_mandelbrot())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Vectorizing Mandelbrot\n", + "We showed a naive implementation of the Mandelbrot algorithm, but there are two things we can do to speed it up. We can early-stop the loop iteration when a pixel is known to have escaped, and we can leverage Mojo's access to hardware by vectorizing the loop, computing multiple pixels simultaneously. To do that we will use the `vectorize` higher order generator.\n", + "\n", + "We start by defining our main iteration loop in a vectorized fashion" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fn mandelbrot_kernel_SIMD[\n", + " simd_width: Int\n", + "](c: ComplexSIMD[float_type, simd_width]) -> SIMD[int_type, simd_width]:\n", + " \"\"\"A vectorized implementation of the inner mandelbrot computation.\"\"\"\n", + " var cx = c.re\n", + " var cy = c.im\n", + " var x = SIMD[float_type, simd_width](0)\n", + " var y = SIMD[float_type, simd_width](0)\n", + " var y2 = SIMD[float_type, simd_width](0)\n", + " var iters = SIMD[int_type, simd_width](0)\n", + "\n", + " var t: SIMD[DType.bool, simd_width] = True\n", + " for _ in range(MAX_ITERS):\n", + " if not any(t):\n", + " break\n", + " y2 = y * y\n", + " y = x.fma(y + y, cy)\n", + " t = x.fma(x, y2) <= 4\n", + " x = x.fma(x, cx - y2)\n", + " iters = t.select(iters + 1, iters)\n", + " return iters" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The above function is parameterized on the `simd_width` and processes simd_width pixels. It only escapes once all pixels within the vector lane are done. We can use the same iteration loop as above, but this time we vectorize within each row instead. We use the `vectorize` generator to make this a simple function call. The benchmark can run in parallel or just vectorized." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fn run_mandelbrot(parallel: Bool) raises -> Float64:\n", + " var matrix = Matrix[int_type, height, width]()\n", + "\n", + " @parameter\n", + " fn worker(row: Int):\n", + " alias scale_x = (max_x - min_x) / width\n", + " alias scale_y = (max_y - min_y) / height\n", + "\n", + " @parameter\n", + " fn compute_vector[simd_width: Int](col: Int):\n", + " \"\"\"Each time we operate on a `simd_width` vector of pixels.\"\"\"\n", + " var cx = min_x + (col + iota[float_type, simd_width]()) * scale_x\n", + " var cy = min_y + row * SIMD[float_type, simd_width](scale_y)\n", + " var c = ComplexSIMD[float_type, simd_width](cx, cy)\n", + " matrix.store(row, col, mandelbrot_kernel_SIMD[simd_width](c))\n", + "\n", + " # Vectorize the call to compute_vector where call gets a chunk of pixels.\n", + " vectorize[compute_vector, simd_width](width)\n", + "\n", + " @parameter\n", + " fn bench():\n", + " for row in range(height):\n", + " worker(row)\n", + "\n", + " @parameter\n", + " fn bench_parallel():\n", + " parallelize[worker](height, height)\n", + "\n", + " var time: Float64 = 0\n", + " if parallel:\n", + " time = benchmark.run[bench_parallel](max_runtime_secs=0.5).mean(unit)\n", + " else:\n", + " time = benchmark.run[bench](max_runtime_secs=0.5).mean(unit)\n", + "\n", + " show_plot(matrix)\n", + " matrix.data.free()\n", + " return time\n", + "\n", + "vectorized = run_mandelbrot(parallel=False)\n", + "print(\"Vectorized:\", vectorized, unit)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Parallelizing Mandelbrot\n", + "While the vectorized implementation above is efficient, we can get better performance by parallelizing on the cols. This again is simple in Mojo using the `parallelize` higher order function:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "parallelized = run_mandelbrot(parallel=True)\n", + "print(\"Parallelized:\", parallelized, unit)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Benchmarking\n", + "\n", + "In this section we compare the vectorized speed to the parallelized speed " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(\"Number of physical cores:\", num_physical_cores())\n", + "print(\"Vectorized:\", vectorized, \"ms\")\n", + "print(\"Parallelized:\", parallelized, \"ms\")\n", + "#| CHECK: speedup\n", + "print(\"Parallel speedup:\", vectorized / parallelized)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Mojo (nightly)", + "language": "mojo", + "name": "mojo-nightly-jupyter-kernel" + }, + "language_info": { + "codemirror_mode": { + "name": "mojo" + }, + "file_extension": ".mojo", + "mimetype": "text/x-mojo", + "name": "mojo" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 } diff --git a/examples/notebooks/magic.lock b/examples/notebooks/magic.lock index 36260f53ac..84cdcbd099 100644 --- a/examples/notebooks/magic.lock +++ b/examples/notebooks/magic.lock @@ -19,7 +19,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.8.0-hb921021_15.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.8.0-h205f482_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.8.1-h1a47875_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.10.6-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.0-h4e1184b_5.conda @@ -28,10 +28,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.15.3-h831e299_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.11.0-h11f4f37_12.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.7-hf454442_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.1-h4e1184b_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.2-h4e1184b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.2-h4e1184b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.29.7-hd92328a_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.458-hc430e4a_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.29.8-h8570fcd_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.458-h7001638_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda @@ -112,10 +112,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20240722.0-cxx17_hbbce691_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-18.1.0-hd595efa_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-18.1.0-h9d9f30d_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-26_linux64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda @@ -144,12 +144,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.45-h943b412_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.28.3-h6128344_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hbbce691_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.2-hee588c1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.48.0-hee588c1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda @@ -157,7 +157,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-hd9ff511_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.9.0-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.50.0-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.5.0-h851e524_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda @@ -167,20 +167,20 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py312h178313f_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/max-core-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/max-python-25.1.0.dev2025011105-3.12release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/max-core-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/max-python-25.1.0.dev2025011705-3.12release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.1.0-py312h178313f_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/multiprocess-0.70.15-py312h98912ed_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.5-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda @@ -237,7 +237,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.2.0-py312hbf22597_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2024.07.02-h9925aae_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.36.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/regex-2024.11.6-py312h66e93f0_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda @@ -273,7 +273,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.0-pyh31011fe_0.conda @@ -286,7 +286,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.8.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/websockets-14.1-py312h66e93f0_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.0-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.2-py312h66e93f0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xxhash-0.8.2-hd590300_0.conda @@ -309,7 +309,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-auth-0.8.0-h2cb9fb3_15.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-auth-0.8.0-hb7ec8d5_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-cal-0.8.1-h740c5af_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-common-0.10.6-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-compression-0.3.0-h0f0193d_5.conda @@ -318,10 +318,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-io-0.15.3-h1a307af_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-mqtt-0.11.0-h5f50e26_12.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-s3-0.7.7-h2080895_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-sdkutils-0.2.1-h0f0193d_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-sdkutils-0.2.2-h0f0193d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-checksums-0.2.2-h0f0193d_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-crt-cpp-0.29.7-h8a4e35f_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-sdk-cpp-1.11.458-h849ce1a_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-crt-cpp-0.29.8-h92ee776_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-sdk-cpp-1.11.458-h90ecb4a_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/azure-core-cpp-1.14.0-h1887c18_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/azure-identity-cpp-1.10.0-h47b0b28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/azure-storage-blobs-cpp-12.13.0-h185ecfd_1.conda @@ -403,10 +403,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.0.0-h4de3ea5_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20240722.0-cxx17_h18dbdb1_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-18.1.0-hb7781cd_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-acero-18.1.0-h3b568fd_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-dataset-18.1.0-h3b568fd_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-substrait-18.1.0-h1e9d426_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-18.1.0-h47f80e1_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-acero-18.1.0-h3b568fd_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-dataset-18.1.0-h3b568fd_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-substrait-18.1.0-h1e9d426_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.9.0-26_linuxaarch64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlicommon-1.1.0-h86ecc28_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlidec-1.1.0-h86ecc28_2.conda @@ -435,12 +435,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnghttp2-1.64.0-hc8609a4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.28-pthreads_h9d3fd7e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libparquet-18.1.0-hfc78867_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libparquet-18.1.0-hfc78867_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.45-hec79eb8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-5.28.3-h44a3b7b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libre2-11-2024.07.02-h18dbdb1_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.2-h5eb1b54_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.48.0-h5eb1b54_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libssh2-1.11.1-ha41c0db_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda @@ -448,7 +448,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.0-h88f7998_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libutf8proc-2.9.0-h86ecc28_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.50.0-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.5.0-h0886dbf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda @@ -458,20 +458,20 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.2-py312h74ce7d3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/max-core-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/max-python-25.1.0.dev2025011105-3.12release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/max-core-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/max-python-25.1.0.dev2025011705-3.12release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/multidict-6.1.0-py312hcc812fe_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/multiprocess-0.70.15-py312hdd3e373_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.5-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-1.26.4-py312h470d778_0.conda @@ -528,7 +528,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-26.2.0-py312h2427ae1_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/re2-2024.07.02-haa97905_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.36.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/regex-2024.11.6-py312hb2c0f52_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda @@ -564,7 +564,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.0-pyh31011fe_0.conda @@ -577,7 +577,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.8.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/websockets-14.1-py312hb2c0f52_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-1.17.0-py312hb2c0f52_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-1.17.2-py312hb2c0f52_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.12-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-h57736b2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xxhash-0.8.2-h31becfc_0.conda @@ -600,7 +600,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.8.0-h8bc59a9_15.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.8.0-hfc2798a_16.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.8.1-hc8a0bd2_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.10.6-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.3.0-hc8a0bd2_5.conda @@ -609,10 +609,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.15.3-haba67d1_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.11.0-h24f418c_12.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.7.7-h1be5864_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.1-hc8a0bd2_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.2-hc8a0bd2_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.2.2-hc8a0bd2_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.29.7-h19a973c_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-he0ff2e4_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.29.8-h23176ea_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-h794939a_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-core-cpp-1.14.0-hd50102c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-identity-cpp-1.10.0-hc602bab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.13.0-h7585a09_1.conda @@ -692,10 +692,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.16-ha0e7c42_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20240722.0-cxx17_h07bc746_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-18.1.0-h0ad35bc_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-18.1.0-hf3eb8e5_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-26_osxarm64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.1.0-hd74edd7_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.1.0-hd74edd7_2.conda @@ -703,7 +703,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-26_osxarm64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.11.1-h73640d1_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.6-ha82da77_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.23-hec38601_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20240808-pl5321hafb1f1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda @@ -721,40 +721,40 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.6.3-h39f12f2_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.45-h3783ad8_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-5.28.3-h3bd63a1_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libre2-11-2024.07.02-h07bc746_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.48.0-h3f77e49_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.21.0-h64651cc_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.9.0-h5505292_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.50.0-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.13.5-h178c5d8_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.6-hdb05f8b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.7-hdb05f8b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.2-py312h998013c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/max-core-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/max-python-25.1.0.dev2025011105-3.12release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/max-core-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/max-python-25.1.0.dev2025011705-3.12release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/multidict-6.1.0-py312hdb8e49c_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/multiprocess-0.70.15-py312h02f2b3b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.5-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-1.26.4-py312h8442bc7_0.conda @@ -796,8 +796,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.7.1-pyh3cfb1c2_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyinstrument-5.0.0-py312h0bf5046_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-core-10.3.2-py312hb9d441b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-framework-cocoa-10.3.2-py312hb9d441b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-core-11.0-py312hb9d441b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-framework-cocoa-11.0-py312hb9d441b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.8-hc22306f_1_cpython.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda @@ -813,7 +813,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-26.2.0-py312hf8a1cbd_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2024.07.02-h6589ca4_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.36.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/regex-2024.11.6-py312hea69d52_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_1.conda @@ -848,7 +848,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.0-pyh31011fe_0.conda @@ -861,7 +861,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.8.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/websockets-14.1-py312hea69d52_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.0-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.2-py312hea69d52_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xxhash-0.8.2-hb547adb_0.conda @@ -1125,55 +1125,55 @@ packages: license_family: MIT size: 56354 timestamp: 1734348889193 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.8.0-hb921021_15.conda - sha256: 537006ad6d5097c134494166a6a1dc1451d5d050878d7b82cef498bfda40ba8a - md5: c79d50f64cffa5ad51ecc1a81057962f +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.8.0-h205f482_16.conda + sha256: 0695c285b70385913dc7dce05888d3ad1378247b65273bdab509494a2f8f0eea + md5: b0815d37ab812ade9c07239da7c3c369 depends: - __glibc >=2.17,<3.0.a0 - aws-c-cal >=0.8.1,<0.8.2.0a0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-http >=0.9.2,<0.9.3.0a0 - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - libgcc >=13 arch: x86_64 platform: linux license: Apache-2.0 license_family: Apache - size: 107614 - timestamp: 1734021692519 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-auth-0.8.0-h2cb9fb3_15.conda - sha256: 4ce859dc9ff128bf5515604c43f33fb511386022fc9765ca077990f2a3f23df5 - md5: e524686ace966acefb5b8cbc6e8b3daa + size: 107478 + timestamp: 1736592747413 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-auth-0.8.0-hb7ec8d5_16.conda + sha256: 5a2a2691f2e0028e8549b97a340d7e6c502e0d54b7deba00fad505812663a98b + md5: 56f166780076db46c5e273988693d8a3 depends: - aws-c-cal >=0.8.1,<0.8.2.0a0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-http >=0.9.2,<0.9.3.0a0 - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - libgcc >=13 arch: aarch64 platform: linux license: Apache-2.0 license_family: Apache - size: 111854 - timestamp: 1734021745104 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.8.0-h8bc59a9_15.conda - sha256: 0e41e56b662e76e024182adebcd91d09a4d38a83b35217c84e4967354dfff9a2 - md5: f688b8893c20ad9477a19e7ce614014a + size: 112264 + timestamp: 1736592695540 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.8.0-hfc2798a_16.conda + sha256: cdcd932332311db1b614289101b61e32cbae2478ba2bf85763aaf5a5cc7db6f6 + md5: 1e9a41d5296f50c08ae511d61fddef85 depends: - __osx >=11.0 - aws-c-cal >=0.8.1,<0.8.2.0a0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-http >=0.9.2,<0.9.3.0a0 - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 arch: arm64 platform: osx license: Apache-2.0 license_family: Apache - size: 92507 - timestamp: 1734021831330 + size: 92547 + timestamp: 1736592866387 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.8.1-h1a47875_3.conda sha256: 095ac824ea9303eff67e04090ae531d9eb33d2bf8f82eaade39b839c421e16e8 md5: 55a8561fdbbbd34f50f57d9be12ed084 @@ -1516,9 +1516,9 @@ packages: license_family: Apache size: 97598 timestamp: 1734146239038 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.1-h4e1184b_4.conda - sha256: df586f42210af1134b1c88ff4c278c3cb6d6c807c84eac48860062464b28554d - md5: a5126a90e74ac739b00564a4c7ddcc36 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.2-h4e1184b_0.conda + sha256: 0424e380c435ba03b5948d02e8c958866c4eee50ed29e57f99473a5f795a4cfc + md5: dcd498d493818b776a77fbc242fbf8e4 depends: - __glibc >=2.17,<3.0.a0 - aws-c-common >=0.10.6,<0.10.7.0a0 @@ -1527,11 +1527,11 @@ packages: platform: linux license: Apache-2.0 license_family: Apache - size: 56094 - timestamp: 1733994449690 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-sdkutils-0.2.1-h0f0193d_4.conda - sha256: ede8e782467c87ac80ceb9c9af9e917d121b7d8b8c698186d18e3cecd36f2210 - md5: 53e798d720dd78b78847a7b2fdb05fc9 + size: 55911 + timestamp: 1736535960724 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-sdkutils-0.2.2-h0f0193d_0.conda + sha256: fba38e469457764afcb94aa84d4d7788e6b5fa1554d34b05c904d2245fdd3c81 + md5: a78928881c652facde2a13ec6e776f3c depends: - aws-c-common >=0.10.6,<0.10.7.0a0 - libgcc >=13 @@ -1539,11 +1539,11 @@ packages: platform: linux license: Apache-2.0 license_family: Apache - size: 58621 - timestamp: 1733994421495 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.1-hc8a0bd2_4.conda - sha256: de98343ce42d2e569b3380292d20f47bf39bda08aadabcbb8e650d3f38fd742f - md5: 22f72f8cd7ead211304ac17d337d96e0 + size: 58221 + timestamp: 1736536003041 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.2-hc8a0bd2_0.conda + sha256: ea4f0f1e99056293c69615f581a997d65ba7e229e296e402e0d8ef750648a5b5 + md5: e7b5498ac7b7ab921a907be38f3a8080 depends: - __osx >=11.0 - aws-c-common >=0.10.6,<0.10.7.0a0 @@ -1551,8 +1551,8 @@ packages: platform: osx license: Apache-2.0 license_family: Apache - size: 49664 - timestamp: 1733994553014 + size: 49872 + timestamp: 1736536152332 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.2-h4e1184b_4.conda sha256: 1ed9a332d06ad595694907fad2d6d801082916c27cd5076096fda4061e6d24a8 md5: 74e8c3e4df4ceae34aa2959df4b28101 @@ -1590,9 +1590,9 @@ packages: license_family: Apache size: 70186 timestamp: 1733994496998 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.29.7-hd92328a_7.conda - sha256: 094cd81f1e5ba713e9e7a272ee52b5dde3ccc4842ea90f19c0354a00bbdac3d9 - md5: 02b95564257d5c3db9c06beccf711f95 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.29.8-h8570fcd_1.conda + sha256: ff8f08bc615d3ef6d970df80988200b3ecee76ecfa4885109cd82b30176cfda9 + md5: f21296b496cca1c1fa426b9a3b676e79 depends: - __glibc >=2.17,<3.0.a0 - aws-c-auth >=0.8.0,<0.8.1.0a0 @@ -1603,18 +1603,18 @@ packages: - aws-c-io >=0.15.3,<0.15.4.0a0 - aws-c-mqtt >=0.11.0,<0.11.1.0a0 - aws-c-s3 >=0.7.7,<0.7.8.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - libgcc >=13 - libstdcxx >=13 arch: x86_64 platform: linux license: Apache-2.0 license_family: Apache - size: 354703 - timestamp: 1734177883319 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-crt-cpp-0.29.7-h8a4e35f_7.conda - sha256: 5ba9188e0cb4e3faff9bc96774febb040aa3b802aedba29d847e00e7b5eab84e - md5: d77a9e3d7ce15399903e92825fd651b5 + size: 354328 + timestamp: 1736598991291 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-crt-cpp-0.29.8-h92ee776_1.conda + sha256: 114ac89d3936bf801dcbd488ba0b468c7e113a407cb1ee5898259a5202b7e750 + md5: 63546051b5687f793ae977c7994e1339 depends: - aws-c-auth >=0.8.0,<0.8.1.0a0 - aws-c-cal >=0.8.1,<0.8.2.0a0 @@ -1624,18 +1624,18 @@ packages: - aws-c-io >=0.15.3,<0.15.4.0a0 - aws-c-mqtt >=0.11.0,<0.11.1.0a0 - aws-c-s3 >=0.7.7,<0.7.8.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - libgcc >=13 - libstdcxx >=13 arch: aarch64 platform: linux license: Apache-2.0 license_family: Apache - size: 283154 - timestamp: 1734177845248 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.29.7-h19a973c_7.conda - sha256: 8269e6746eb3a5d15b732a3983888bf98dfc1f6594e95250fc8d16b43cfd5ff9 - md5: 95714136bef3e917bd5a2942d4682b20 + size: 284664 + timestamp: 1736598964131 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.29.8-h23176ea_1.conda + sha256: db6a31078bb82fb12044d7706239c003568273729f7ba4971c1479b7926ada82 + md5: 31fdd3ffb00f5472196fa95ef08087b7 depends: - __osx >=11.0 - aws-c-auth >=0.8.0,<0.8.1.0a0 @@ -1646,23 +1646,23 @@ packages: - aws-c-io >=0.15.3,<0.15.4.0a0 - aws-c-mqtt >=0.11.0,<0.11.1.0a0 - aws-c-s3 >=0.7.7,<0.7.8.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - libcxx >=18 arch: arm64 platform: osx license: Apache-2.0 license_family: Apache - size: 236249 - timestamp: 1734178020924 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.458-hc430e4a_4.conda - sha256: 2dc09f6f9c49127b5f96e7535b64a9c521b944d76d8b7d03d48ae80257ac1cea - md5: aeefac461bea1f126653c1285cf5af08 + size: 236269 + timestamp: 1736599024242 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.458-h7001638_5.conda + sha256: 849524b09865e84d6926aa814944cf71511aa4a00fffc5ad174c286d5dfac5f0 + md5: fc01d77a7f383b2915f276c73b7d0934 depends: - __glibc >=2.17,<3.0.a0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-event-stream >=0.5.0,<0.5.1.0a0 - aws-checksums >=0.2.2,<0.2.3.0a0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - libcurl >=8.11.1,<9.0a0 - libgcc >=13 - libstdcxx >=13 @@ -1672,16 +1672,16 @@ packages: platform: linux license: Apache-2.0 license_family: Apache - size: 3060561 - timestamp: 1734093737431 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-sdk-cpp-1.11.458-h849ce1a_4.conda - sha256: 51b9e9df8cbab4a13a1b9d39d6ef5ed162aaa29c09a745810e00bbe92e1045c1 - md5: cda7747f4398be8d1fb37362815917a7 + size: 3088636 + timestamp: 1736598504343 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-sdk-cpp-1.11.458-h90ecb4a_5.conda + sha256: 9467acd0f2df74ea7472aebdfb8b5656a8d403abad2edbce9743d6e88c94fd10 + md5: 33f86f8de1d8cd40f8fe628dc0784437 depends: - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-event-stream >=0.5.0,<0.5.1.0a0 - aws-checksums >=0.2.2,<0.2.3.0a0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - libcurl >=8.11.1,<9.0a0 - libgcc >=13 - libstdcxx >=13 @@ -1691,17 +1691,17 @@ packages: platform: linux license: Apache-2.0 license_family: Apache - size: 2920625 - timestamp: 1734093552712 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-he0ff2e4_4.conda - sha256: 535b970aaa13be45f8cab8205c59f044b17364111c41a227f061775a5c834e18 - md5: 0981ed87098b149bdb7d99a4a3fd0e58 + size: 2925443 + timestamp: 1736598526637 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-h794939a_5.conda + sha256: 2b1e7d5a45e82604bfdb6de63c53cf0e9495f596cfd90e644a1e67910de7f91c + md5: a2374b4182bf5b2d08b2903393d0c487 depends: - __osx >=11.0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-event-stream >=0.5.0,<0.5.1.0a0 - aws-checksums >=0.2.2,<0.2.3.0a0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - libcurl >=8.11.1,<9.0a0 - libcxx >=18 - libzlib >=1.3.1,<2.0a0 @@ -1710,8 +1710,8 @@ packages: platform: osx license: Apache-2.0 license_family: Apache - size: 2826534 - timestamp: 1734094018287 + size: 2824168 + timestamp: 1736598935034 - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda sha256: fe07debdb089a3db17f40a7f20d283d75284bb4fc269ef727b8ba6fc93f7cb5a md5: 0a8838771cc2e985cd295e01ae83baf1 @@ -3345,13 +3345,13 @@ packages: license_family: Apache size: 1178260 timestamp: 1736008642885 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-18.1.0-hd595efa_7_cpu.conda - build_number: 7 - sha256: 554ffa338264c1dc34d95adb7eb856d50a2f25e7fa303a1a51e4372301b7c96f - md5: 08d4aff5ee6dee9a1b9ab13fca927697 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-18.1.0-h9d9f30d_8_cpu.conda + build_number: 8 + sha256: f6c72ce82d145cb94a1131b68547b88056fb48158a382f9ce763286fce53ee65 + md5: 1c9caae53b14a385b59e87687adad2d6 depends: - __glibc >=2.17,<3.0.a0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - aws-sdk-cpp >=1.11.458,<1.11.459.0a0 - azure-core-cpp >=1.14.0,<1.14.1.0a0 - azure-identity-cpp >=1.10.0,<1.10.1.0a0 @@ -3384,14 +3384,14 @@ packages: platform: linux license: Apache-2.0 license_family: APACHE - size: 8770256 - timestamp: 1735684696564 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-18.1.0-hb7781cd_7_cpu.conda - build_number: 7 - sha256: f6107506bd16788560b47a4d18c1457b4df30a49334364d32613fe3f53ba6cbb - md5: 98cf7127ca7b3854c5d1c8bef1ed6e53 - depends: - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + size: 8801586 + timestamp: 1736610546493 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-18.1.0-h47f80e1_8_cpu.conda + build_number: 8 + sha256: bf381dfa84e94ffce715c46352dd99f6f6ace69859b0efb822500f8882be429a + md5: daceef1881b4ddc72bb5b225a122c633 + depends: + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - aws-sdk-cpp >=1.11.458,<1.11.459.0a0 - azure-core-cpp >=1.14.0,<1.14.1.0a0 - azure-identity-cpp >=1.10.0,<1.10.1.0a0 @@ -3418,21 +3418,21 @@ packages: - zstd >=1.5.6,<1.6.0a0 constrains: - arrow-cpp <0.0a0 - - parquet-cpp <0.0a0 - apache-arrow-proc =*=cpu + - parquet-cpp <0.0a0 arch: aarch64 platform: linux license: Apache-2.0 license_family: APACHE - size: 8026714 - timestamp: 1735685336542 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-18.1.0-h0ad35bc_7_cpu.conda - build_number: 7 - sha256: 4fbdd8bb89d912bf03f10f9373a8d96a1cdd7a7851e107393418a3d2715bc27e - md5: 4ba2173203f44bbf03d19aaba6ed07d3 + size: 8045923 + timestamp: 1736611764958 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-18.1.0-hf3eb8e5_8_cpu.conda + build_number: 8 + sha256: 766e46b45520773db93ee1a91951cc135a85544bba738e7b378d31f16097753f + md5: fdc79871e6c243b819497337215416d9 depends: - __osx >=11.0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - aws-sdk-cpp >=1.11.458,<1.11.459.0a0 - azure-core-cpp >=1.14.0,<1.14.1.0a0 - azure-identity-cpp >=1.10.0,<1.10.1.0a0 @@ -3463,111 +3463,111 @@ packages: platform: osx license: Apache-2.0 license_family: APACHE - size: 5506699 - timestamp: 1735682962976 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_7_cpu.conda - build_number: 7 - sha256: 87ea5d6a84d922d73975dce8661fccf257e72e755175b12c30e1181a34e37987 - md5: 12d84228204c56fec6ed113288014d11 + size: 5497383 + timestamp: 1736608604724 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_8_cpu.conda + build_number: 8 + sha256: 126a6e78199311d99e38b9d633ce3e0290795ac68ce3ee8a9b91436c85c4095d + md5: 544759904898499f634f8f88a9907f88 depends: - __glibc >=2.17,<3.0.a0 - - libarrow 18.1.0 hd595efa_7_cpu + - libarrow 18.1.0 h9d9f30d_8_cpu - libgcc >=13 - libstdcxx >=13 arch: x86_64 platform: linux license: Apache-2.0 license_family: APACHE - size: 612463 - timestamp: 1735684749868 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-acero-18.1.0-h3b568fd_7_cpu.conda - build_number: 7 - sha256: 42cbfc87096f745d565d814d65b7228c82d985f1898859d5e456016d73e81c82 - md5: 4c1d8c3feea249782148d3cd6a25392e + size: 611558 + timestamp: 1736610592458 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-acero-18.1.0-h3b568fd_8_cpu.conda + build_number: 8 + sha256: c94844ab1d8fafe17775161283bd1fe7ab1f93f660fc5ba0c01bd33fe3d21eaf + md5: 7a8e6a363d2f39a2f3df3f181d12692d depends: - - libarrow 18.1.0 hb7781cd_7_cpu + - libarrow 18.1.0 h47f80e1_8_cpu - libgcc >=13 - libstdcxx >=13 arch: aarch64 platform: linux license: Apache-2.0 license_family: APACHE - size: 578222 - timestamp: 1735685424850 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_7_cpu.conda - build_number: 7 - sha256: 86e20cebfdb4f335e98265c1b88f5053bf3e3648768a317856295846bfdbf2b4 - md5: 3eaf71fe987de13061db795e03bb1a1c + size: 579798 + timestamp: 1736611846905 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_8_cpu.conda + build_number: 8 + sha256: 29196dc6b2e4488f98bd8950de6333efe5d1a9d0cc62e186694946766185475e + md5: 8db96829f8e427167f450c7467a1ba44 depends: - __osx >=11.0 - - libarrow 18.1.0 h0ad35bc_7_cpu + - libarrow 18.1.0 hf3eb8e5_8_cpu - libcxx >=18 arch: arm64 platform: osx license: Apache-2.0 license_family: APACHE - size: 485185 - timestamp: 1735683071232 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_7_cpu.conda - build_number: 7 - sha256: 99c12511fba79c7947f78d676eae5857659084f687f375f68bc20bd4cddb0a0e - md5: 0a81eb63d7cd150f598c752e86388d57 + size: 484442 + timestamp: 1736608695654 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_8_cpu.conda + build_number: 8 + sha256: fe50edf030b5ccbadec2bf8f90d4cdf32d63ec52ba26233fc2c8bfbe43df3b15 + md5: 894a5ed78728b77c997fefeee222ac4d depends: - __glibc >=2.17,<3.0.a0 - - libarrow 18.1.0 hd595efa_7_cpu - - libarrow-acero 18.1.0 hcb10f89_7_cpu + - libarrow 18.1.0 h9d9f30d_8_cpu + - libarrow-acero 18.1.0 hcb10f89_8_cpu - libgcc >=13 - - libparquet 18.1.0 h081d1f1_7_cpu + - libparquet 18.1.0 h081d1f1_8_cpu - libstdcxx >=13 arch: x86_64 platform: linux license: Apache-2.0 license_family: APACHE - size: 587497 - timestamp: 1735684880531 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-dataset-18.1.0-h3b568fd_7_cpu.conda - build_number: 7 - sha256: 13ba7d3d08015aa26569eca9e198e2f8b2a0cd2d9c420e41c78cc2e5d5170f26 - md5: f39f5d725c2ca94c2e7b19e2717fd4ab + size: 588032 + timestamp: 1736610711976 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-dataset-18.1.0-h3b568fd_8_cpu.conda + build_number: 8 + sha256: bb87d8e633074c9759d93abb277d31314dc66fad741253b48e8265e186228c5b + md5: 11856da892b919cc27bd62638d701c65 depends: - - libarrow 18.1.0 hb7781cd_7_cpu - - libarrow-acero 18.1.0 h3b568fd_7_cpu + - libarrow 18.1.0 h47f80e1_8_cpu + - libarrow-acero 18.1.0 h3b568fd_8_cpu - libgcc >=13 - - libparquet 18.1.0 hfc78867_7_cpu + - libparquet 18.1.0 hfc78867_8_cpu - libstdcxx >=13 arch: aarch64 platform: linux license: Apache-2.0 license_family: APACHE - size: 560329 - timestamp: 1735685518922 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_7_cpu.conda - build_number: 7 - sha256: 52c5c4e9cd5f2ac91dcebb6a920ab2536febcea116ff8767e5439329d7da820b - md5: 97a2d3606682d94f7d73112e9ad684ae + size: 560571 + timestamp: 1736611941995 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_8_cpu.conda + build_number: 8 + sha256: bff2d39e418eadab8c522a536449ac90f070dd8e83e2bd5e67a9c3eb8ecf712f + md5: 7b3736f49b3ba299b7799aeb448cb830 depends: - __osx >=11.0 - - libarrow 18.1.0 h0ad35bc_7_cpu - - libarrow-acero 18.1.0 hf07054f_7_cpu + - libarrow 18.1.0 hf3eb8e5_8_cpu + - libarrow-acero 18.1.0 hf07054f_8_cpu - libcxx >=18 - - libparquet 18.1.0 h636d7b7_7_cpu + - libparquet 18.1.0 h636d7b7_8_cpu arch: arm64 platform: osx license: Apache-2.0 license_family: APACHE - size: 491237 - timestamp: 1735684688308 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_7_cpu.conda - build_number: 7 - sha256: 53ea53a06e137c2f81ebfdff3f978babb8b59e31f705a19b57056ec8754c1abf - md5: e128def53c133e8a23ac00cd4a479335 + size: 491001 + timestamp: 1736609758514 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_8_cpu.conda + build_number: 8 + sha256: dca372e27724904577315b8db3793e027a5c152a485e505e630a57b15634cd85 + md5: 46eaf81238da6f3ffab1f3ffdcee382e depends: - __glibc >=2.17,<3.0.a0 - libabseil * cxx17* - libabseil >=20240722.0,<20240723.0a0 - - libarrow 18.1.0 hd595efa_7_cpu - - libarrow-acero 18.1.0 hcb10f89_7_cpu - - libarrow-dataset 18.1.0 hcb10f89_7_cpu + - libarrow 18.1.0 h9d9f30d_8_cpu + - libarrow-acero 18.1.0 hcb10f89_8_cpu + - libarrow-dataset 18.1.0 hcb10f89_8_cpu - libgcc >=13 - libprotobuf >=5.28.3,<5.28.4.0a0 - libstdcxx >=13 @@ -3575,18 +3575,18 @@ packages: platform: linux license: Apache-2.0 license_family: APACHE - size: 521861 - timestamp: 1735684940668 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-substrait-18.1.0-h1e9d426_7_cpu.conda - build_number: 7 - sha256: 252e2a0d8c733f36b50499786480a05a59577d617f291868149c80534c1e8ffc - md5: 6da921d9e1c4e2ab2679eeea7cbd4c82 + size: 521707 + timestamp: 1736610765240 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-substrait-18.1.0-h1e9d426_8_cpu.conda + build_number: 8 + sha256: 1896ea00da28e10670f7ba51bb543e68a87f717e9f5692fee44268f1a13d9eee + md5: e7dc0209e065a2b51f19848cefa4b1ab depends: - libabseil * cxx17* - libabseil >=20240722.0,<20240723.0a0 - - libarrow 18.1.0 hb7781cd_7_cpu - - libarrow-acero 18.1.0 h3b568fd_7_cpu - - libarrow-dataset 18.1.0 h3b568fd_7_cpu + - libarrow 18.1.0 h47f80e1_8_cpu + - libarrow-acero 18.1.0 h3b568fd_8_cpu + - libarrow-dataset 18.1.0 h3b568fd_8_cpu - libgcc >=13 - libprotobuf >=5.28.3,<5.28.4.0a0 - libstdcxx >=13 @@ -3594,27 +3594,27 @@ packages: platform: linux license: Apache-2.0 license_family: APACHE - size: 516014 - timestamp: 1735685565929 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_7_cpu.conda - build_number: 7 - sha256: a45bbdd6932aed972d6c6ce30a7439aa8ec9d9b8ee5affb350d41e50abdc0127 - md5: 91927747173f65695e441346c7145e26 + size: 517189 + timestamp: 1736611989417 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_8_cpu.conda + build_number: 8 + sha256: ae52d926ebfc8edb0728824f2918a825d39bd85a4ef27fe2b73656cfecdd7c69 + md5: f67eb19d22ba355cced8c86073ad49b1 depends: - __osx >=11.0 - libabseil * cxx17* - libabseil >=20240722.0,<20240723.0a0 - - libarrow 18.1.0 h0ad35bc_7_cpu - - libarrow-acero 18.1.0 hf07054f_7_cpu - - libarrow-dataset 18.1.0 hf07054f_7_cpu + - libarrow 18.1.0 hf3eb8e5_8_cpu + - libarrow-acero 18.1.0 hf07054f_8_cpu + - libarrow-dataset 18.1.0 hf07054f_8_cpu - libcxx >=18 - libprotobuf >=5.28.3,<5.28.4.0a0 arch: arm64 platform: osx license: Apache-2.0 license_family: APACHE - size: 452385 - timestamp: 1735684993831 + size: 452161 + timestamp: 1736609917123 - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-26_linux64_openblas.conda build_number: 26 sha256: 30bd658682b124243f8e52d8edf8a19e7be1bc31e4fe4baec30a64002dc8cd0c @@ -3912,17 +3912,17 @@ packages: license_family: MIT size: 385098 timestamp: 1734000160270 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.6-ha82da77_1.conda - sha256: 2b2443404503cd862385fd2f2a2c73f9624686fd1e5a45050b4034cfc06904ec - md5: ce5252d8db110cdb4ae4173d0a63c7c5 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda + sha256: 776092346da87a2a23502e14d91eb0c32699c4a1522b7331537bd1c3751dcff5 + md5: 5b3e1610ff8bd5443476b91d618f5b77 depends: - __osx >=11.0 arch: arm64 platform: osx license: Apache-2.0 WITH LLVM-exception license_family: Apache - size: 520992 - timestamp: 1734494699681 + size: 523505 + timestamp: 1736877862502 - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.23-h4ddbbb0_0.conda sha256: 511d801626d02f4247a04fff957cc6e9ec4cc7e8622bd9acd076bcdc5de5fe66 md5: 8dfae1d2e74767e9ce36d5fa0d8605db @@ -4726,13 +4726,13 @@ packages: license_family: BSD size: 4165774 timestamp: 1730772154295 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_7_cpu.conda - build_number: 7 - sha256: 55945b761130f60abdecf1551907ecfd05cb4a5958cf74d855b30c005ecb3592 - md5: b97013ef4e1dd2cf11594f06d5b5e83a +- conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_8_cpu.conda + build_number: 8 + sha256: 2c6d900d4e9dd3c4000886d76d3f8a099e904667ebc6935b49428e6e9b766481 + md5: a9fa0ef309406c84b46db3a28efd761e depends: - __glibc >=2.17,<3.0.a0 - - libarrow 18.1.0 hd595efa_7_cpu + - libarrow 18.1.0 h9d9f30d_8_cpu - libgcc >=13 - libstdcxx >=13 - libthrift >=0.21.0,<0.21.1.0a0 @@ -4741,14 +4741,14 @@ packages: platform: linux license: Apache-2.0 license_family: APACHE - size: 1205598 - timestamp: 1735684849150 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libparquet-18.1.0-hfc78867_7_cpu.conda - build_number: 7 - sha256: 6dff9bbe731dc2cefe96bd9c7981d2cbef2b564a3152840a29c9b6a493ea50d9 - md5: 184bec7a9392ab6ba8134041e81971d6 + size: 1207011 + timestamp: 1736610684584 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libparquet-18.1.0-hfc78867_8_cpu.conda + build_number: 8 + sha256: 2ed6b9eac4504051ddc094ea3f3a2b3198d4d25a443a96fa2971d8075d790c31 + md5: 9a907190c9e2c6bf1a29569700218f0b depends: - - libarrow 18.1.0 hb7781cd_7_cpu + - libarrow 18.1.0 h47f80e1_8_cpu - libgcc >=13 - libstdcxx >=13 - libthrift >=0.21.0,<0.21.1.0a0 @@ -4757,15 +4757,15 @@ packages: platform: linux license: Apache-2.0 license_family: APACHE - size: 1117825 - timestamp: 1735685495511 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_7_cpu.conda - build_number: 7 - sha256: bf42e43542a90edd86ba5aa5fd4543671625f1bc35f62be32688f00e18bae990 - md5: 93de9ba66a20db32a2646d313794b3a8 + size: 1117465 + timestamp: 1736611918180 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_8_cpu.conda + build_number: 8 + sha256: 4991519ef4264abc7160e9faaf8ff01d4731bf1497076bef1895d6c366f796eb + md5: b8bd275a49877fdec62ff787818a869d depends: - __osx >=11.0 - - libarrow 18.1.0 h0ad35bc_7_cpu + - libarrow 18.1.0 hf3eb8e5_8_cpu - libcxx >=18 - libthrift >=0.21.0,<0.21.1.0a0 - openssl >=3.4.0,<4.0a0 @@ -4773,8 +4773,8 @@ packages: platform: osx license: Apache-2.0 license_family: APACHE - size: 873251 - timestamp: 1735684582558 + size: 873593 + timestamp: 1736609701839 - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.45-h943b412_0.conda sha256: b8f5b5ba9a14dedf7c97c01300de492b1b52b68eacbc3249a13fdbfa82349a2f md5: 85cbdaacad93808395ac295b5667d25b @@ -4934,9 +4934,9 @@ packages: license: ISC size: 164972 timestamp: 1716828607917 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.2-hee588c1_0.conda - sha256: 48af21ebc2cbf358976f1e0f4a0ab9e91dfc83d0ef337cf3837c6f5bc22fb352 - md5: b58da17db24b6e08bcbf8fed2fb8c915 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.48.0-hee588c1_0.conda + sha256: 7bb84f44e1bd756da4a3d0d43308324a5533e6ba9f4772475884bce44d405064 + md5: 84bd1c9a82b455e7a2f390375fb38f90 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -4944,30 +4944,30 @@ packages: arch: x86_64 platform: linux license: Unlicense - size: 873551 - timestamp: 1733761824646 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.2-h5eb1b54_0.conda - sha256: 885a27fa84a5a73ed9779168c02b6c386e2fc7a53f0566b32a09ceca146b42b4 - md5: d4bf59f8783a4a66c0aec568f6de3ff4 + size: 876582 + timestamp: 1737123945341 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.48.0-h5eb1b54_0.conda + sha256: b4365ab7c74a2e6c0444eb950367fa3ca56a87c9921b2faa5ad032fe7a7df682 + md5: 1998946fa3ccf38a07b44a879b2227ae depends: - libgcc >=13 - libzlib >=1.3.1,<2.0a0 arch: aarch64 platform: linux license: Unlicense - size: 1042182 - timestamp: 1733761913736 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda - sha256: f192f3c8973de9ec4c214990715f13b781965247a5cedf9162e7f9e699cfc3c4 - md5: 122d6f29470f1a991e85608e77e56a8a + size: 1044953 + timestamp: 1737123983895 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.48.0-h3f77e49_0.conda + sha256: b31169cf0ca7b6835baca4ab92d6cf2eee83b1a12a11b72f39521e8baf4d6acb + md5: 714719df4f49e30f9728956f240846ca depends: - __osx >=11.0 - libzlib >=1.3.1,<2.0a0 arch: arm64 platform: osx license: Unlicense - size: 850553 - timestamp: 1733762057506 + size: 853163 + timestamp: 1737124192432 - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda sha256: 0407ac9fda2bb67e11e357066eff144c845801d00b5f664efbc48813af1e7bb9 md5: be2de152d8073ef1c01b7728475f2fe7 @@ -5208,9 +5208,9 @@ packages: license_family: BSD size: 35720 timestamp: 1680113474501 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda - sha256: a35cd81cd1a9add11024097da83cc06b0aae83186fe4124b77710876f37d8f31 - md5: 070e3c9ddab77e38799d5c30b109c633 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.50.0-hb9d3cd8_0.conda + sha256: b4a8890023902aef9f1f33e3e35603ad9c2f16c21fdb58e968fa6c1bd3e94c0b + md5: 771ee65e13bc599b0b62af5359d80169 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -5218,30 +5218,30 @@ packages: platform: linux license: MIT license_family: MIT - size: 884647 - timestamp: 1729322566955 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda - sha256: adf4eca89339ac7780f2394e7e6699be81259eb91f79f9d9fdf2c1bc6b26f210 - md5: 1899e1ec2be63386c41c4db31d3056af + size: 891272 + timestamp: 1737016632446 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.50.0-h86ecc28_0.conda + sha256: 67914c7f171d343059144d804c2f17fcd621a94e45f179a0fd843b8c1618823e + md5: 915db044076cbbdffb425170deb4ce38 depends: - libgcc >=13 arch: aarch64 platform: linux license: MIT license_family: MIT - size: 627484 - timestamp: 1729322575379 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda - sha256: 0e5176af1e788ad5006cf261c4ea5a288a935fda48993b0240ddd2e562dc3d02 - md5: 4bc348e3a1a74d20a3f9beb866d75e0a + size: 621056 + timestamp: 1737016626950 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.50.0-h5505292_0.conda + sha256: d13fb49d4c8262bf2c44ffb2c77bb2b5d0f85fc6de76bdb75208efeccb29fce6 + md5: 20717343fb30798ab7c23c2e92b748c1 depends: - __osx >=11.0 arch: arm64 platform: osx license: MIT license_family: MIT - size: 410500 - timestamp: 1729322654121 + size: 418890 + timestamp: 1737016751326 - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.5.0-h851e524_0.conda sha256: c45283fd3e90df5f0bd3dbcd31f59cdd2b001d424cf30a07223655413b158eaf md5: 63f790534398730f59e1b899c3644d4a @@ -5432,19 +5432,19 @@ packages: license_family: Other size: 46438 timestamp: 1727963202283 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.6-hdb05f8b_0.conda - sha256: a0f3e9139ab16f0a67b9d2bbabc15b78977168f4a5b5503fed4962dcb9a96102 - md5: 34fdeffa0555a1a56f38839415cc066c +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.7-hdb05f8b_0.conda + sha256: b92a669f2059874ebdcb69041b6c243d68ffc3fb356ac1339cec44aeb27245d7 + md5: c4d54bfd3817313ce758aa76283b118d depends: - __osx >=11.0 constrains: - - openmp 19.1.6|19.1.6.* + - openmp 19.1.7|19.1.7.* arch: arm64 platform: osx license: Apache-2.0 WITH LLVM-exception license_family: APACHE - size: 281251 - timestamp: 1734520462311 + size: 280830 + timestamp: 1736986295869 - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda sha256: 47326f811392a5fd3055f0f773036c392d26fdb32e4d8e7a8197eed951489346 md5: 9de5350a85c4a20c685259b889aa6393 @@ -5549,47 +5549,47 @@ packages: license_family: BSD size: 14467 timestamp: 1733417051523 -- conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011105-release.conda +- conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011705-release.conda noarch: python - sha256: 4bd3331f281b0d42b57e7e5d28eee3650cb52ffb3f9c381f349255034ab4d011 - md5: 9a12141b0beb110b83d4ae256d8de1b0 + sha256: 15578c7bc78001d3882c3b9af9d7d8bf3566c68ae133870038be055c8dfd90e9 + md5: 7e6c35d82044e8d31e9327e7d90bfb2b depends: - - max-core ==25.1.0.dev2025011105 release - - max-python >=25.1.0.dev2025011105,<26.0a0 - - mojo-jupyter ==25.1.0.dev2025011105 release - - mblack ==25.1.0.dev2025011105 release + - max-core ==25.1.0.dev2025011705 release + - max-python >=25.1.0.dev2025011705,<26.0a0 + - mojo-jupyter ==25.1.0.dev2025011705 release + - mblack ==25.1.0.dev2025011705 release license: LicenseRef-Modular-Proprietary - size: 9919 - timestamp: 1736572603494 -- conda: https://conda.modular.com/max-nightly/linux-64/max-core-25.1.0.dev2025011105-release.conda - sha256: 45fdbcfa2c105f01e3c06823e072f2b7b3ceeafe21188973a3f64a87c43c29e6 - md5: ba267ab335859f14f9c0d887d4a83f14 + size: 9920 + timestamp: 1737091778690 +- conda: https://conda.modular.com/max-nightly/linux-64/max-core-25.1.0.dev2025011705-release.conda + sha256: 3e39d779710559206129052c64ac530b9d262288f75812ba07c3e3e395a0e18e + md5: 5575de33b0503143e635ade746f057c3 depends: - - mblack ==25.1.0.dev2025011105 release + - mblack ==25.1.0.dev2025011705 release license: LicenseRef-Modular-Proprietary - size: 244035937 - timestamp: 1736572608009 -- conda: https://conda.modular.com/max-nightly/linux-aarch64/max-core-25.1.0.dev2025011105-release.conda - sha256: 23794990d901f563fd2492483d4f5e0b1b91ed616028bf70bd9e2eaace6bd56b - md5: e8f626acac2d17a591ac8353ba41f5d0 + size: 244764907 + timestamp: 1737091186388 +- conda: https://conda.modular.com/max-nightly/linux-aarch64/max-core-25.1.0.dev2025011705-release.conda + sha256: a9e7747e7cb7ff01dc58f4c7f5772d2b4483693dd200c88653b1ec2dda46bc8b + md5: a9b13b577fb1bcc14b330f5a4185023c depends: - - mblack ==25.1.0.dev2025011105 release + - mblack ==25.1.0.dev2025011705 release license: LicenseRef-Modular-Proprietary - size: 247708765 - timestamp: 1736572603492 -- conda: https://conda.modular.com/max-nightly/osx-arm64/max-core-25.1.0.dev2025011105-release.conda - sha256: 8cc71a4a35f96867f4131ddca60d084a8df937ec0f551b62601adc9202788a82 - md5: 4b8d6a0afbcebe7c2e5dc2ccd30c55a8 + size: 247240781 + timestamp: 1737091778688 +- conda: https://conda.modular.com/max-nightly/osx-arm64/max-core-25.1.0.dev2025011705-release.conda + sha256: 9369b738945ef783af1e4caf2676bd6a299ff86e4ef9504e7a5ee69841fffa01 + md5: c4397350b325ae5a0e07f61e483fc3e5 depends: - - mblack ==25.1.0.dev2025011105 release + - mblack ==25.1.0.dev2025011705 release license: LicenseRef-Modular-Proprietary - size: 206225127 - timestamp: 1736572820782 -- conda: https://conda.modular.com/max-nightly/linux-64/max-python-25.1.0.dev2025011105-3.12release.conda - sha256: 621688d96524cbf32ed8f33e4d572043973beb875708e69af36735ee730cc6c4 - md5: bb2eb7a24245cd62aed0b9d3e3e85604 + size: 206615275 + timestamp: 1737092643231 +- conda: https://conda.modular.com/max-nightly/linux-64/max-python-25.1.0.dev2025011705-3.12release.conda + sha256: bdda011f73105d5d91e29abdacc4e7304501249c3bb50e83517661cdea4ef56a + md5: 0ddfaa3caa3647a0cbcdf394774ee6be depends: - - max-core ==25.1.0.dev2025011105 release + - max-core ==25.1.0.dev2025011705 release - python 3.12.* - fastapi - httpx @@ -5610,13 +5610,13 @@ packages: - uvicorn - python_abi 3.12.* *_cp312 license: LicenseRef-Modular-Proprietary - size: 124216697 - timestamp: 1736572608017 -- conda: https://conda.modular.com/max-nightly/linux-aarch64/max-python-25.1.0.dev2025011105-3.12release.conda - sha256: fd2587af6018758078516561bfdb54d8175207edd4ce6dce211aeb9dffbfd967 - md5: 8d1481a3abe8cd46a76797465f6a9eb6 + size: 124617960 + timestamp: 1737091186397 +- conda: https://conda.modular.com/max-nightly/linux-aarch64/max-python-25.1.0.dev2025011705-3.12release.conda + sha256: 3ec1d98731b5c86829e7dd0d76b3ad820173a418f58833ea0237e34d356b58c6 + md5: 0ed0380d3ee48a36fe43f85f61fd9fe3 depends: - - max-core ==25.1.0.dev2025011105 release + - max-core ==25.1.0.dev2025011705 release - python 3.12.* - fastapi - httpx @@ -5637,13 +5637,13 @@ packages: - uvicorn - python_abi 3.12.* *_cp312 license: LicenseRef-Modular-Proprietary - size: 127983766 - timestamp: 1736572603503 -- conda: https://conda.modular.com/max-nightly/osx-arm64/max-python-25.1.0.dev2025011105-3.12release.conda - sha256: 5d6590e84cf64008fd48066ef10138c48cdbb6d6e2a1d3de01e71270d8d8d966 - md5: 92aa60fa7fe761433d03416f21c8d912 + size: 127367910 + timestamp: 1737091778698 +- conda: https://conda.modular.com/max-nightly/osx-arm64/max-python-25.1.0.dev2025011705-3.12release.conda + sha256: 853e12e0ac11f3dcf5392e94cc927233ba940a71a5cf73c0cec54ad4917256c0 + md5: 53e9620bd08e983c5e52e02afef0a990 depends: - - max-core ==25.1.0.dev2025011105 release + - max-core ==25.1.0.dev2025011705 release - python 3.12.* - fastapi - httpx @@ -5664,12 +5664,12 @@ packages: - uvicorn - python_abi 3.12.* *_cp312 license: LicenseRef-Modular-Proprietary - size: 110625116 - timestamp: 1736572820784 -- conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011105-release.conda + size: 110545057 + timestamp: 1737092643234 +- conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011705-release.conda noarch: python - sha256: f447d269d29bb49fd97275f623632a569638c31b40e88489367df3d7d4ce90e2 - md5: 32c691c7fc2c6a218e1ce2272965a101 + sha256: 180bbe7d8b76c5d0f453b72f81fae10522b7a98a31e6fbeff542dbb31bb9b613 + md5: 680622d3117019e99ddc173efab357c7 depends: - python >=3.9,<3.13 - click >=8.0.0 @@ -5679,8 +5679,8 @@ packages: - platformdirs >=2 - python license: MIT - size: 130815 - timestamp: 1736572603499 + size: 130807 + timestamp: 1737091778695 - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 md5: 592132998493b3ff25fd7479396e8351 @@ -5700,18 +5700,18 @@ packages: license_family: BSD size: 68803 timestamp: 1735686983426 -- conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011105-release.conda +- conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011705-release.conda noarch: python - sha256: 05af473b2b4983829660ba70eb0cb6607f019c4f4b8d107350ea491c6bd8d1cd - md5: 036f5ddfbcce66b3f9972cebf1cec107 + sha256: eab543a5c31c091b3d042980d068a950c51905d14a18532710f9be94ba88ba5d + md5: eea061b963a95002a8740d4b4f506d44 depends: - - max-core ==25.1.0.dev2025011105 release + - max-core ==25.1.0.dev2025011705 release - python >=3.9,<3.13 - jupyter_client >=8.6.2,<8.7 - python license: LicenseRef-Modular-Proprietary - size: 22937 - timestamp: 1736572603499 + size: 22929 + timestamp: 1737091778696 - conda: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.1.0-py312h178313f_2.conda sha256: b05bc8252a6e957bf4a776ed5e0e61d1ba88cdc46ccb55890c72cc58b10371f4 md5: 5b5e3267d915a107eca793d52e1b780a @@ -5860,37 +5860,37 @@ packages: license_family: BSD size: 100945 timestamp: 1733402844974 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda - sha256: 6a1d5d8634c1a07913f1c525db6455918cbc589d745fac46d9d6e30340c8731a - md5: 70caf8bb6cf39a0b6b7efc885f51c0fe +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda + sha256: 17fe6afd8a00446010220d52256bd222b1e4fcb93bd587e7784b03219f3dc358 + md5: 04b34b9a40cdc48cfdab261ab176ff74 depends: - __glibc >=2.17,<3.0.a0 - - libgcc-ng >=12 + - libgcc >=13 arch: x86_64 platform: linux license: X11 AND BSD-3-Clause - size: 889086 - timestamp: 1724658547447 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda - sha256: acad4cf1f57b12ee1e42995e6fac646fa06aa026529f05eb8c07eb0a84a47a84 - md5: 91d49c85cacd92caa40cf375ef72a25d + size: 894452 + timestamp: 1736683239706 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_2.conda + sha256: 9fd726174dde993c560dd6fa1a383e61d546d380e98e0b0348d22512e5d86e24 + md5: 779046fb585c71373e8a051be06c6011 depends: - - libgcc-ng >=12 + - libgcc >=13 arch: aarch64 platform: linux license: X11 AND BSD-3-Clause - size: 924472 - timestamp: 1724658573518 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - sha256: 27d0b9ff78ad46e1f3a6c96c479ab44beda5f96def88e2fe626e0a49429d8afc - md5: cb2b0ea909b97b3d70cd3921d1445e1a + size: 928402 + timestamp: 1736683192463 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda + sha256: b45c73348ec9841d5c893acc2e97adff24127548fe8c786109d03c41ed564e91 + md5: f6f7c5b7d0983be186c46c4f6f8f9af8 depends: - __osx >=11.0 arch: arm64 platform: osx license: X11 AND BSD-3-Clause - size: 802321 - timestamp: 1724658775723 + size: 796754 + timestamp: 1736683572099 - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda sha256: bb7b21d7fd0445ddc0631f64e66d91a179de4ba920b8381f29b9d006a42788c0 md5: 598fd7d4d0de2455fb74f56063969a97 @@ -6857,9 +6857,9 @@ packages: license_family: BSD size: 181512 timestamp: 1728714205508 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-core-10.3.2-py312hb9d441b_0.conda - sha256: 6c110c64e7cc0a28416414446698ab310a9261525a6aa630b2c4f50891867719 - md5: 663e894deb5a24c8931fd8224f19a1fd +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-core-11.0-py312hb9d441b_0.conda + sha256: 7805d910dd6ac686e2f780c879a986f35d7a4c73f4236c956c03bdcb26bec421 + md5: 0726db04477a28c51d1a260afb356b67 depends: - __osx >=11.0 - libffi >=3.4,<4.0a0 @@ -6871,15 +6871,15 @@ packages: platform: osx license: MIT license_family: MIT - size: 484571 - timestamp: 1732987487536 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-framework-cocoa-10.3.2-py312hb9d441b_0.conda - sha256: 5a78f97cb7414cb4b78b777dcfcffb08da42ced866e8ef6455a57c2230908bfe - md5: 41e4f28d545565e48f1f819cf8dac5c7 + size: 478921 + timestamp: 1736891272846 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-framework-cocoa-11.0-py312hb9d441b_0.conda + sha256: 53d099865f8f758029708f4365ee7c9184d9ffcc8fc8210971b723a3936f9c00 + md5: dc263e6e18b32318a43252dbb0596ad4 depends: - __osx >=11.0 - libffi >=3.4,<4.0a0 - - pyobjc-core 10.3.2.* + - pyobjc-core 11.0.* - python >=3.12,<3.13.0a0 - python >=3.12,<3.13.0a0 *_cpython - python_abi 3.12.* *_cp312 @@ -6887,8 +6887,8 @@ packages: platform: osx license: MIT license_family: MIT - size: 380414 - timestamp: 1733168930888 + size: 383608 + timestamp: 1736927118445 - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda sha256: ba3b032fa52709ce0d9fd388f63d330a026754587a2f461117cac9ab73d8d0d8 md5: 461219d1a5bd61342293efa2c0c90eac @@ -7287,17 +7287,17 @@ packages: license_family: GPL size: 250351 timestamp: 1679532511311 -- conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_1.conda - sha256: f972eecb4dc8e06257af37642f92b0f2df04a7fe4c950f2e1045505e5e93985f - md5: 8c9083612c1bfe6878715ed5732605f8 +- conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.36.1-pyhd8ed1ab_0.conda + sha256: 55a8c68d75bc70624be9dbd5550d2de0fae295363fb836860a4a5d244a5b088a + md5: dbb48421efd666ea133c6d5e67291766 depends: - attrs >=22.2.0 - python >=3.9 - rpds-py >=0.7.0 + - typing_extensions >=4.4.0 license: MIT - license_family: MIT - size: 42201 - timestamp: 1733366868091 + size: 42296 + timestamp: 1737120499679 - conda: https://conda.anaconda.org/conda-forge/linux-64/regex-2024.11.6-py312h66e93f0_0.conda sha256: fcb5687d3ec5fff580b64b8fb649d9d65c999a91a5c3108a313ecdd2de99f06b md5: 647770db979b43f9c9ca25dcfa7dc4e4 @@ -7941,12 +7941,12 @@ packages: license_family: APACHE size: 15183 timestamp: 1733331395943 -- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf - md5: 8ac3367aafb1cc0a068483c580af8015 +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda + sha256: c4b1ae8a2931fe9b274c44af29c5475a85b37693999f8c792dad0f8c6734b1de + md5: dbcace4706afdfb7eb891f7b37d07c04 license: LicenseRef-Public-Domain - size: 122354 - timestamp: 1728047496079 + size: 122921 + timestamp: 1737119101255 - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_1.conda sha256: e0eb6c8daf892b3056f08416a96d68b0a358b7c46b99c8a50481b22631a4dfc0 md5: e7cb0f5745e4c5035a460248334af7eb @@ -8054,6 +8054,7 @@ packages: arch: x86_64 platform: linux license: MIT + license_family: MIT size: 410192 timestamp: 1736550568524 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/watchfiles-1.0.4-py312h8cbf658_0.conda @@ -8070,6 +8071,7 @@ packages: arch: aarch64 platform: linux license: MIT + license_family: MIT size: 403791 timestamp: 1736550743174 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/watchfiles-1.0.4-py312hcd83bfe_0.conda @@ -8086,6 +8088,7 @@ packages: arch: arm64 platform: osx license: MIT + license_family: MIT size: 363822 timestamp: 1736550859472 - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda @@ -8175,9 +8178,9 @@ packages: license_family: MIT size: 62931 timestamp: 1733130309598 -- conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.0-py312h66e93f0_0.conda - sha256: a6fc0f4e90643d0c1fd4aab669b6a79f44a305a5474256f6f2da3354d2310fb4 - md5: ddbe3bb0e1356cb9074dd848570694f9 +- conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.2-py312h66e93f0_0.conda + sha256: ed3a1700ecc5d38c7e7dc7d2802df1bc1da6ba3d6f6017448b8ded0affb4ae00 + md5: 669e63af87710f8d52fdec9d4d63b404 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -8187,11 +8190,11 @@ packages: platform: linux license: BSD-2-Clause license_family: BSD - size: 63807 - timestamp: 1732523690292 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-1.17.0-py312hb2c0f52_0.conda - sha256: b9aa760a987ccc6bc9c61f57badba6798d9a3dcbd0814e5fb8df6d8d2935af73 - md5: 120d5d1c05386d8ce3efd65a4c86431f + size: 63590 + timestamp: 1736869574299 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-1.17.2-py312hb2c0f52_0.conda + sha256: cc28914462a21b2f64d9b763a9733bfcbc811dd2975d0d2e6e429e35f5b6d59c + md5: 8a5c6e3f809bae085be369b62dc5d06a depends: - libgcc >=13 - python >=3.12,<3.13.0a0 @@ -8201,11 +8204,11 @@ packages: platform: linux license: BSD-2-Clause license_family: BSD - size: 64783 - timestamp: 1732523806 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.0-py312hea69d52_0.conda - sha256: 0fb35c3d1642f9f47db87bdb33148f88ef19a3af1eb0ee99b5491551c57269c7 - md5: 73414acdb779a8694a14527865b4357a + size: 63967 + timestamp: 1736869675870 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.2-py312hea69d52_0.conda + sha256: 6a3e68b57de29802e8703d1791dcacb7613bfdc17bbb087c6b2ea2796e6893ef + md5: e49608c832fcf438f70cbcae09c3adc5 depends: - __osx >=11.0 - python >=3.12,<3.13.0a0 @@ -8215,8 +8218,8 @@ packages: platform: osx license: BSD-2-Clause license_family: BSD - size: 61043 - timestamp: 1732523852129 + size: 61198 + timestamp: 1736869673767 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb9d3cd8_0.conda sha256: ed10c9283974d311855ae08a16dfd7e56241fac632aec3b92e3cfe73cff31038 md5: f6ebe2cb3f82ba6c057dde5d9debe4f7 diff --git a/examples/operators/magic.lock b/examples/operators/magic.lock index 68572dbafe..6fa5a396b7 100644 --- a/examples/operators/magic.lock +++ b/examples/operators/magic.lock @@ -14,7 +14,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.8.0-hb921021_15.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.8.0-h205f482_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.8.1-h1a47875_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.10.6-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.0-h4e1184b_5.conda @@ -23,10 +23,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.15.3-h831e299_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.11.0-h11f4f37_12.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.7-hf454442_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.1-h4e1184b_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.2-h4e1184b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.2-h4e1184b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.29.7-hd92328a_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.458-hc430e4a_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.29.8-h8570fcd_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.458-h7001638_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda @@ -77,10 +77,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20240722.0-cxx17_hbbce691_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-18.1.0-hd595efa_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-18.1.0-h9d9f30d_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-26_linux64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda @@ -109,12 +109,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.45-h943b412_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.28.3-h6128344_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hbbce691_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.2-hee588c1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.48.0-hee588c1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda @@ -122,7 +122,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-hd9ff511_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.9.0-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.50.0-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.5.0-h851e524_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda @@ -131,16 +131,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py312h178313f_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/max-core-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/max-python-25.1.0.dev2025011105-3.12release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/max-core-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/max-python-25.1.0.dev2025011705-3.12release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.1.0-py312h178313f_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/multiprocess-0.70.15-py312h98912ed_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.3-h5fbd93e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda @@ -206,14 +206,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.1-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.0-pyh31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.34.0-h31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/uvloop-0.21.0-py312h66e93f0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/watchfiles-1.0.4-py312h12e396e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/websockets-14.1-py312h66e93f0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.0-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.2-py312h66e93f0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xxhash-0.8.2-hd590300_0.conda @@ -231,7 +231,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-auth-0.8.0-h2cb9fb3_15.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-auth-0.8.0-hb7ec8d5_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-cal-0.8.1-h740c5af_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-common-0.10.6-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-compression-0.3.0-h0f0193d_5.conda @@ -240,10 +240,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-io-0.15.3-h1a307af_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-mqtt-0.11.0-h5f50e26_12.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-s3-0.7.7-h2080895_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-sdkutils-0.2.1-h0f0193d_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-sdkutils-0.2.2-h0f0193d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-checksums-0.2.2-h0f0193d_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-crt-cpp-0.29.7-h8a4e35f_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-sdk-cpp-1.11.458-h849ce1a_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-crt-cpp-0.29.8-h92ee776_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-sdk-cpp-1.11.458-h90ecb4a_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/azure-core-cpp-1.14.0-h1887c18_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/azure-identity-cpp-1.10.0-h47b0b28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/azure-storage-blobs-cpp-12.13.0-h185ecfd_1.conda @@ -295,10 +295,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.0.0-h4de3ea5_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20240722.0-cxx17_h18dbdb1_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-18.1.0-hb7781cd_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-acero-18.1.0-h3b568fd_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-dataset-18.1.0-h3b568fd_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-substrait-18.1.0-h1e9d426_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-18.1.0-h47f80e1_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-acero-18.1.0-h3b568fd_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-dataset-18.1.0-h3b568fd_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-substrait-18.1.0-h1e9d426_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.9.0-26_linuxaarch64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlicommon-1.1.0-h86ecc28_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlidec-1.1.0-h86ecc28_2.conda @@ -327,12 +327,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnghttp2-1.64.0-hc8609a4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.28-pthreads_h9d3fd7e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libparquet-18.1.0-hfc78867_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libparquet-18.1.0-hfc78867_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.45-hec79eb8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-5.28.3-h44a3b7b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libre2-11-2024.07.02-h18dbdb1_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.2-h5eb1b54_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.48.0-h5eb1b54_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libssh2-1.11.1-ha41c0db_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda @@ -340,7 +340,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.0-h88f7998_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libutf8proc-2.9.0-h86ecc28_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.50.0-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.5.0-h0886dbf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda @@ -349,16 +349,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lz4-c-1.10.0-h5ad3122_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.2-py312h74ce7d3_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/max-core-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/max-python-25.1.0.dev2025011105-3.12release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/max-core-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/max-python-25.1.0.dev2025011705-3.12release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/multidict-6.1.0-py312hcc812fe_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/multiprocess-0.70.15-py312hdd3e373_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-1.26.4-py312h470d778_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.3-h3f56577_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.4.0-hd08dc88_1.conda @@ -371,7 +371,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-semantic-conventions-0.50b0-pyh3cfb1c2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/orc-2.0.3-hdd485aa_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pandas-2.2.3-py312ha2895bd_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pandas-2.2.3-py312ha2895bd_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-11.1.0-py312h719f0cf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_1.conda @@ -424,14 +424,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.1-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.0-pyh31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.34.0-h31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uvloop-0.21.0-py312hb2c0f52_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/watchfiles-1.0.4-py312h8cbf658_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/websockets-14.1-py312hb2c0f52_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-1.17.0-py312hb2c0f52_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-1.17.2-py312hb2c0f52_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.12-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-h57736b2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xxhash-0.8.2-h31becfc_0.conda @@ -448,7 +448,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.8.0-h8bc59a9_15.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.8.0-hfc2798a_16.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.8.1-hc8a0bd2_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.10.6-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.3.0-hc8a0bd2_5.conda @@ -457,10 +457,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.15.3-haba67d1_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.11.0-h24f418c_12.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.7.7-h1be5864_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.1-hc8a0bd2_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.2-hc8a0bd2_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.2.2-hc8a0bd2_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.29.7-h19a973c_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-he0ff2e4_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.29.8-h23176ea_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-h794939a_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-core-cpp-1.14.0-hd50102c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-identity-cpp-1.10.0-hc602bab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.13.0-h7585a09_1.conda @@ -510,10 +510,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.16-ha0e7c42_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20240722.0-cxx17_h07bc746_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-18.1.0-h0ad35bc_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-18.1.0-hf3eb8e5_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-26_osxarm64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.1.0-hd74edd7_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.1.0-hd74edd7_2.conda @@ -521,7 +521,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-26_osxarm64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.11.1-h73640d1_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.6-ha82da77_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.23-hec38601_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20240808-pl5321hafb1f1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda @@ -539,35 +539,35 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.6.3-h39f12f2_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.45-h3783ad8_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-5.28.3-h3bd63a1_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libre2-11-2024.07.02-h07bc746_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.48.0-h3f77e49_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.21.0-h64651cc_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.9.0-h5505292_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.50.0-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.13.5-h178c5d8_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.6-hdb05f8b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.7-hdb05f8b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.2-py312h998013c_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/max-core-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/max-python-25.1.0.dev2025011105-3.12release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/max-core-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/max-python-25.1.0.dev2025011705-3.12release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/multidict-6.1.0-py312hdb8e49c_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/multiprocess-0.70.15-py312h02f2b3b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-1.26.4-py312h8442bc7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.3-h8a3d83b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda @@ -632,14 +632,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.1-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.0-pyh31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.34.0-h31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uvloop-0.21.0-py312h0bf5046_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/watchfiles-1.0.4-py312hcd83bfe_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/websockets-14.1-py312hea69d52_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.0-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.2-py312hea69d52_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xxhash-0.8.2-hb547adb_0.conda @@ -804,55 +804,55 @@ packages: license_family: MIT size: 56354 timestamp: 1734348889193 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.8.0-hb921021_15.conda - sha256: 537006ad6d5097c134494166a6a1dc1451d5d050878d7b82cef498bfda40ba8a - md5: c79d50f64cffa5ad51ecc1a81057962f +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.8.0-h205f482_16.conda + sha256: 0695c285b70385913dc7dce05888d3ad1378247b65273bdab509494a2f8f0eea + md5: b0815d37ab812ade9c07239da7c3c369 depends: - __glibc >=2.17,<3.0.a0 - aws-c-cal >=0.8.1,<0.8.2.0a0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-http >=0.9.2,<0.9.3.0a0 - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - libgcc >=13 arch: x86_64 platform: linux license: Apache-2.0 license_family: Apache - size: 107614 - timestamp: 1734021692519 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-auth-0.8.0-h2cb9fb3_15.conda - sha256: 4ce859dc9ff128bf5515604c43f33fb511386022fc9765ca077990f2a3f23df5 - md5: e524686ace966acefb5b8cbc6e8b3daa + size: 107478 + timestamp: 1736592747413 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-auth-0.8.0-hb7ec8d5_16.conda + sha256: 5a2a2691f2e0028e8549b97a340d7e6c502e0d54b7deba00fad505812663a98b + md5: 56f166780076db46c5e273988693d8a3 depends: - aws-c-cal >=0.8.1,<0.8.2.0a0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-http >=0.9.2,<0.9.3.0a0 - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - libgcc >=13 arch: aarch64 platform: linux license: Apache-2.0 license_family: Apache - size: 111854 - timestamp: 1734021745104 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.8.0-h8bc59a9_15.conda - sha256: 0e41e56b662e76e024182adebcd91d09a4d38a83b35217c84e4967354dfff9a2 - md5: f688b8893c20ad9477a19e7ce614014a + size: 112264 + timestamp: 1736592695540 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.8.0-hfc2798a_16.conda + sha256: cdcd932332311db1b614289101b61e32cbae2478ba2bf85763aaf5a5cc7db6f6 + md5: 1e9a41d5296f50c08ae511d61fddef85 depends: - __osx >=11.0 - aws-c-cal >=0.8.1,<0.8.2.0a0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-http >=0.9.2,<0.9.3.0a0 - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 arch: arm64 platform: osx license: Apache-2.0 license_family: Apache - size: 92507 - timestamp: 1734021831330 + size: 92547 + timestamp: 1736592866387 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.8.1-h1a47875_3.conda sha256: 095ac824ea9303eff67e04090ae531d9eb33d2bf8f82eaade39b839c421e16e8 md5: 55a8561fdbbbd34f50f57d9be12ed084 @@ -1195,9 +1195,9 @@ packages: license_family: Apache size: 97598 timestamp: 1734146239038 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.1-h4e1184b_4.conda - sha256: df586f42210af1134b1c88ff4c278c3cb6d6c807c84eac48860062464b28554d - md5: a5126a90e74ac739b00564a4c7ddcc36 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.2-h4e1184b_0.conda + sha256: 0424e380c435ba03b5948d02e8c958866c4eee50ed29e57f99473a5f795a4cfc + md5: dcd498d493818b776a77fbc242fbf8e4 depends: - __glibc >=2.17,<3.0.a0 - aws-c-common >=0.10.6,<0.10.7.0a0 @@ -1206,11 +1206,11 @@ packages: platform: linux license: Apache-2.0 license_family: Apache - size: 56094 - timestamp: 1733994449690 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-sdkutils-0.2.1-h0f0193d_4.conda - sha256: ede8e782467c87ac80ceb9c9af9e917d121b7d8b8c698186d18e3cecd36f2210 - md5: 53e798d720dd78b78847a7b2fdb05fc9 + size: 55911 + timestamp: 1736535960724 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-sdkutils-0.2.2-h0f0193d_0.conda + sha256: fba38e469457764afcb94aa84d4d7788e6b5fa1554d34b05c904d2245fdd3c81 + md5: a78928881c652facde2a13ec6e776f3c depends: - aws-c-common >=0.10.6,<0.10.7.0a0 - libgcc >=13 @@ -1218,11 +1218,11 @@ packages: platform: linux license: Apache-2.0 license_family: Apache - size: 58621 - timestamp: 1733994421495 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.1-hc8a0bd2_4.conda - sha256: de98343ce42d2e569b3380292d20f47bf39bda08aadabcbb8e650d3f38fd742f - md5: 22f72f8cd7ead211304ac17d337d96e0 + size: 58221 + timestamp: 1736536003041 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.2-hc8a0bd2_0.conda + sha256: ea4f0f1e99056293c69615f581a997d65ba7e229e296e402e0d8ef750648a5b5 + md5: e7b5498ac7b7ab921a907be38f3a8080 depends: - __osx >=11.0 - aws-c-common >=0.10.6,<0.10.7.0a0 @@ -1230,8 +1230,8 @@ packages: platform: osx license: Apache-2.0 license_family: Apache - size: 49664 - timestamp: 1733994553014 + size: 49872 + timestamp: 1736536152332 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.2-h4e1184b_4.conda sha256: 1ed9a332d06ad595694907fad2d6d801082916c27cd5076096fda4061e6d24a8 md5: 74e8c3e4df4ceae34aa2959df4b28101 @@ -1269,9 +1269,9 @@ packages: license_family: Apache size: 70186 timestamp: 1733994496998 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.29.7-hd92328a_7.conda - sha256: 094cd81f1e5ba713e9e7a272ee52b5dde3ccc4842ea90f19c0354a00bbdac3d9 - md5: 02b95564257d5c3db9c06beccf711f95 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.29.8-h8570fcd_1.conda + sha256: ff8f08bc615d3ef6d970df80988200b3ecee76ecfa4885109cd82b30176cfda9 + md5: f21296b496cca1c1fa426b9a3b676e79 depends: - __glibc >=2.17,<3.0.a0 - aws-c-auth >=0.8.0,<0.8.1.0a0 @@ -1282,18 +1282,18 @@ packages: - aws-c-io >=0.15.3,<0.15.4.0a0 - aws-c-mqtt >=0.11.0,<0.11.1.0a0 - aws-c-s3 >=0.7.7,<0.7.8.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - libgcc >=13 - libstdcxx >=13 arch: x86_64 platform: linux license: Apache-2.0 license_family: Apache - size: 354703 - timestamp: 1734177883319 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-crt-cpp-0.29.7-h8a4e35f_7.conda - sha256: 5ba9188e0cb4e3faff9bc96774febb040aa3b802aedba29d847e00e7b5eab84e - md5: d77a9e3d7ce15399903e92825fd651b5 + size: 354328 + timestamp: 1736598991291 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-crt-cpp-0.29.8-h92ee776_1.conda + sha256: 114ac89d3936bf801dcbd488ba0b468c7e113a407cb1ee5898259a5202b7e750 + md5: 63546051b5687f793ae977c7994e1339 depends: - aws-c-auth >=0.8.0,<0.8.1.0a0 - aws-c-cal >=0.8.1,<0.8.2.0a0 @@ -1303,18 +1303,18 @@ packages: - aws-c-io >=0.15.3,<0.15.4.0a0 - aws-c-mqtt >=0.11.0,<0.11.1.0a0 - aws-c-s3 >=0.7.7,<0.7.8.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - libgcc >=13 - libstdcxx >=13 arch: aarch64 platform: linux license: Apache-2.0 license_family: Apache - size: 283154 - timestamp: 1734177845248 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.29.7-h19a973c_7.conda - sha256: 8269e6746eb3a5d15b732a3983888bf98dfc1f6594e95250fc8d16b43cfd5ff9 - md5: 95714136bef3e917bd5a2942d4682b20 + size: 284664 + timestamp: 1736598964131 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.29.8-h23176ea_1.conda + sha256: db6a31078bb82fb12044d7706239c003568273729f7ba4971c1479b7926ada82 + md5: 31fdd3ffb00f5472196fa95ef08087b7 depends: - __osx >=11.0 - aws-c-auth >=0.8.0,<0.8.1.0a0 @@ -1325,23 +1325,23 @@ packages: - aws-c-io >=0.15.3,<0.15.4.0a0 - aws-c-mqtt >=0.11.0,<0.11.1.0a0 - aws-c-s3 >=0.7.7,<0.7.8.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - libcxx >=18 arch: arm64 platform: osx license: Apache-2.0 license_family: Apache - size: 236249 - timestamp: 1734178020924 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.458-hc430e4a_4.conda - sha256: 2dc09f6f9c49127b5f96e7535b64a9c521b944d76d8b7d03d48ae80257ac1cea - md5: aeefac461bea1f126653c1285cf5af08 + size: 236269 + timestamp: 1736599024242 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.458-h7001638_5.conda + sha256: 849524b09865e84d6926aa814944cf71511aa4a00fffc5ad174c286d5dfac5f0 + md5: fc01d77a7f383b2915f276c73b7d0934 depends: - __glibc >=2.17,<3.0.a0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-event-stream >=0.5.0,<0.5.1.0a0 - aws-checksums >=0.2.2,<0.2.3.0a0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - libcurl >=8.11.1,<9.0a0 - libgcc >=13 - libstdcxx >=13 @@ -1351,16 +1351,16 @@ packages: platform: linux license: Apache-2.0 license_family: Apache - size: 3060561 - timestamp: 1734093737431 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-sdk-cpp-1.11.458-h849ce1a_4.conda - sha256: 51b9e9df8cbab4a13a1b9d39d6ef5ed162aaa29c09a745810e00bbe92e1045c1 - md5: cda7747f4398be8d1fb37362815917a7 + size: 3088636 + timestamp: 1736598504343 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-sdk-cpp-1.11.458-h90ecb4a_5.conda + sha256: 9467acd0f2df74ea7472aebdfb8b5656a8d403abad2edbce9743d6e88c94fd10 + md5: 33f86f8de1d8cd40f8fe628dc0784437 depends: - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-event-stream >=0.5.0,<0.5.1.0a0 - aws-checksums >=0.2.2,<0.2.3.0a0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - libcurl >=8.11.1,<9.0a0 - libgcc >=13 - libstdcxx >=13 @@ -1370,17 +1370,17 @@ packages: platform: linux license: Apache-2.0 license_family: Apache - size: 2920625 - timestamp: 1734093552712 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-he0ff2e4_4.conda - sha256: 535b970aaa13be45f8cab8205c59f044b17364111c41a227f061775a5c834e18 - md5: 0981ed87098b149bdb7d99a4a3fd0e58 + size: 2925443 + timestamp: 1736598526637 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-h794939a_5.conda + sha256: 2b1e7d5a45e82604bfdb6de63c53cf0e9495f596cfd90e644a1e67910de7f91c + md5: a2374b4182bf5b2d08b2903393d0c487 depends: - __osx >=11.0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-event-stream >=0.5.0,<0.5.1.0a0 - aws-checksums >=0.2.2,<0.2.3.0a0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - libcurl >=8.11.1,<9.0a0 - libcxx >=18 - libzlib >=1.3.1,<2.0a0 @@ -1389,8 +1389,8 @@ packages: platform: osx license: Apache-2.0 license_family: Apache - size: 2826534 - timestamp: 1734094018287 + size: 2824168 + timestamp: 1736598935034 - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda sha256: fe07debdb089a3db17f40a7f20d283d75284bb4fc269ef727b8ba6fc93f7cb5a md5: 0a8838771cc2e985cd295e01ae83baf1 @@ -2558,13 +2558,13 @@ packages: license_family: Apache size: 1178260 timestamp: 1736008642885 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-18.1.0-hd595efa_7_cpu.conda - build_number: 7 - sha256: 554ffa338264c1dc34d95adb7eb856d50a2f25e7fa303a1a51e4372301b7c96f - md5: 08d4aff5ee6dee9a1b9ab13fca927697 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-18.1.0-h9d9f30d_8_cpu.conda + build_number: 8 + sha256: f6c72ce82d145cb94a1131b68547b88056fb48158a382f9ce763286fce53ee65 + md5: 1c9caae53b14a385b59e87687adad2d6 depends: - __glibc >=2.17,<3.0.a0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - aws-sdk-cpp >=1.11.458,<1.11.459.0a0 - azure-core-cpp >=1.14.0,<1.14.1.0a0 - azure-identity-cpp >=1.10.0,<1.10.1.0a0 @@ -2597,14 +2597,14 @@ packages: platform: linux license: Apache-2.0 license_family: APACHE - size: 8770256 - timestamp: 1735684696564 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-18.1.0-hb7781cd_7_cpu.conda - build_number: 7 - sha256: f6107506bd16788560b47a4d18c1457b4df30a49334364d32613fe3f53ba6cbb - md5: 98cf7127ca7b3854c5d1c8bef1ed6e53 - depends: - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + size: 8801586 + timestamp: 1736610546493 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-18.1.0-h47f80e1_8_cpu.conda + build_number: 8 + sha256: bf381dfa84e94ffce715c46352dd99f6f6ace69859b0efb822500f8882be429a + md5: daceef1881b4ddc72bb5b225a122c633 + depends: + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - aws-sdk-cpp >=1.11.458,<1.11.459.0a0 - azure-core-cpp >=1.14.0,<1.14.1.0a0 - azure-identity-cpp >=1.10.0,<1.10.1.0a0 @@ -2631,21 +2631,21 @@ packages: - zstd >=1.5.6,<1.6.0a0 constrains: - arrow-cpp <0.0a0 - - parquet-cpp <0.0a0 - apache-arrow-proc =*=cpu + - parquet-cpp <0.0a0 arch: aarch64 platform: linux license: Apache-2.0 license_family: APACHE - size: 8026714 - timestamp: 1735685336542 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-18.1.0-h0ad35bc_7_cpu.conda - build_number: 7 - sha256: 4fbdd8bb89d912bf03f10f9373a8d96a1cdd7a7851e107393418a3d2715bc27e - md5: 4ba2173203f44bbf03d19aaba6ed07d3 + size: 8045923 + timestamp: 1736611764958 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-18.1.0-hf3eb8e5_8_cpu.conda + build_number: 8 + sha256: 766e46b45520773db93ee1a91951cc135a85544bba738e7b378d31f16097753f + md5: fdc79871e6c243b819497337215416d9 depends: - __osx >=11.0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - aws-sdk-cpp >=1.11.458,<1.11.459.0a0 - azure-core-cpp >=1.14.0,<1.14.1.0a0 - azure-identity-cpp >=1.10.0,<1.10.1.0a0 @@ -2676,111 +2676,111 @@ packages: platform: osx license: Apache-2.0 license_family: APACHE - size: 5506699 - timestamp: 1735682962976 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_7_cpu.conda - build_number: 7 - sha256: 87ea5d6a84d922d73975dce8661fccf257e72e755175b12c30e1181a34e37987 - md5: 12d84228204c56fec6ed113288014d11 + size: 5497383 + timestamp: 1736608604724 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_8_cpu.conda + build_number: 8 + sha256: 126a6e78199311d99e38b9d633ce3e0290795ac68ce3ee8a9b91436c85c4095d + md5: 544759904898499f634f8f88a9907f88 depends: - __glibc >=2.17,<3.0.a0 - - libarrow 18.1.0 hd595efa_7_cpu + - libarrow 18.1.0 h9d9f30d_8_cpu - libgcc >=13 - libstdcxx >=13 arch: x86_64 platform: linux license: Apache-2.0 license_family: APACHE - size: 612463 - timestamp: 1735684749868 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-acero-18.1.0-h3b568fd_7_cpu.conda - build_number: 7 - sha256: 42cbfc87096f745d565d814d65b7228c82d985f1898859d5e456016d73e81c82 - md5: 4c1d8c3feea249782148d3cd6a25392e + size: 611558 + timestamp: 1736610592458 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-acero-18.1.0-h3b568fd_8_cpu.conda + build_number: 8 + sha256: c94844ab1d8fafe17775161283bd1fe7ab1f93f660fc5ba0c01bd33fe3d21eaf + md5: 7a8e6a363d2f39a2f3df3f181d12692d depends: - - libarrow 18.1.0 hb7781cd_7_cpu + - libarrow 18.1.0 h47f80e1_8_cpu - libgcc >=13 - libstdcxx >=13 arch: aarch64 platform: linux license: Apache-2.0 license_family: APACHE - size: 578222 - timestamp: 1735685424850 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_7_cpu.conda - build_number: 7 - sha256: 86e20cebfdb4f335e98265c1b88f5053bf3e3648768a317856295846bfdbf2b4 - md5: 3eaf71fe987de13061db795e03bb1a1c + size: 579798 + timestamp: 1736611846905 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_8_cpu.conda + build_number: 8 + sha256: 29196dc6b2e4488f98bd8950de6333efe5d1a9d0cc62e186694946766185475e + md5: 8db96829f8e427167f450c7467a1ba44 depends: - __osx >=11.0 - - libarrow 18.1.0 h0ad35bc_7_cpu + - libarrow 18.1.0 hf3eb8e5_8_cpu - libcxx >=18 arch: arm64 platform: osx license: Apache-2.0 license_family: APACHE - size: 485185 - timestamp: 1735683071232 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_7_cpu.conda - build_number: 7 - sha256: 99c12511fba79c7947f78d676eae5857659084f687f375f68bc20bd4cddb0a0e - md5: 0a81eb63d7cd150f598c752e86388d57 + size: 484442 + timestamp: 1736608695654 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_8_cpu.conda + build_number: 8 + sha256: fe50edf030b5ccbadec2bf8f90d4cdf32d63ec52ba26233fc2c8bfbe43df3b15 + md5: 894a5ed78728b77c997fefeee222ac4d depends: - __glibc >=2.17,<3.0.a0 - - libarrow 18.1.0 hd595efa_7_cpu - - libarrow-acero 18.1.0 hcb10f89_7_cpu + - libarrow 18.1.0 h9d9f30d_8_cpu + - libarrow-acero 18.1.0 hcb10f89_8_cpu - libgcc >=13 - - libparquet 18.1.0 h081d1f1_7_cpu + - libparquet 18.1.0 h081d1f1_8_cpu - libstdcxx >=13 arch: x86_64 platform: linux license: Apache-2.0 license_family: APACHE - size: 587497 - timestamp: 1735684880531 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-dataset-18.1.0-h3b568fd_7_cpu.conda - build_number: 7 - sha256: 13ba7d3d08015aa26569eca9e198e2f8b2a0cd2d9c420e41c78cc2e5d5170f26 - md5: f39f5d725c2ca94c2e7b19e2717fd4ab + size: 588032 + timestamp: 1736610711976 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-dataset-18.1.0-h3b568fd_8_cpu.conda + build_number: 8 + sha256: bb87d8e633074c9759d93abb277d31314dc66fad741253b48e8265e186228c5b + md5: 11856da892b919cc27bd62638d701c65 depends: - - libarrow 18.1.0 hb7781cd_7_cpu - - libarrow-acero 18.1.0 h3b568fd_7_cpu + - libarrow 18.1.0 h47f80e1_8_cpu + - libarrow-acero 18.1.0 h3b568fd_8_cpu - libgcc >=13 - - libparquet 18.1.0 hfc78867_7_cpu + - libparquet 18.1.0 hfc78867_8_cpu - libstdcxx >=13 arch: aarch64 platform: linux license: Apache-2.0 license_family: APACHE - size: 560329 - timestamp: 1735685518922 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_7_cpu.conda - build_number: 7 - sha256: 52c5c4e9cd5f2ac91dcebb6a920ab2536febcea116ff8767e5439329d7da820b - md5: 97a2d3606682d94f7d73112e9ad684ae + size: 560571 + timestamp: 1736611941995 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_8_cpu.conda + build_number: 8 + sha256: bff2d39e418eadab8c522a536449ac90f070dd8e83e2bd5e67a9c3eb8ecf712f + md5: 7b3736f49b3ba299b7799aeb448cb830 depends: - __osx >=11.0 - - libarrow 18.1.0 h0ad35bc_7_cpu - - libarrow-acero 18.1.0 hf07054f_7_cpu + - libarrow 18.1.0 hf3eb8e5_8_cpu + - libarrow-acero 18.1.0 hf07054f_8_cpu - libcxx >=18 - - libparquet 18.1.0 h636d7b7_7_cpu + - libparquet 18.1.0 h636d7b7_8_cpu arch: arm64 platform: osx license: Apache-2.0 license_family: APACHE - size: 491237 - timestamp: 1735684688308 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_7_cpu.conda - build_number: 7 - sha256: 53ea53a06e137c2f81ebfdff3f978babb8b59e31f705a19b57056ec8754c1abf - md5: e128def53c133e8a23ac00cd4a479335 + size: 491001 + timestamp: 1736609758514 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_8_cpu.conda + build_number: 8 + sha256: dca372e27724904577315b8db3793e027a5c152a485e505e630a57b15634cd85 + md5: 46eaf81238da6f3ffab1f3ffdcee382e depends: - __glibc >=2.17,<3.0.a0 - libabseil * cxx17* - libabseil >=20240722.0,<20240723.0a0 - - libarrow 18.1.0 hd595efa_7_cpu - - libarrow-acero 18.1.0 hcb10f89_7_cpu - - libarrow-dataset 18.1.0 hcb10f89_7_cpu + - libarrow 18.1.0 h9d9f30d_8_cpu + - libarrow-acero 18.1.0 hcb10f89_8_cpu + - libarrow-dataset 18.1.0 hcb10f89_8_cpu - libgcc >=13 - libprotobuf >=5.28.3,<5.28.4.0a0 - libstdcxx >=13 @@ -2788,18 +2788,18 @@ packages: platform: linux license: Apache-2.0 license_family: APACHE - size: 521861 - timestamp: 1735684940668 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-substrait-18.1.0-h1e9d426_7_cpu.conda - build_number: 7 - sha256: 252e2a0d8c733f36b50499786480a05a59577d617f291868149c80534c1e8ffc - md5: 6da921d9e1c4e2ab2679eeea7cbd4c82 + size: 521707 + timestamp: 1736610765240 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-substrait-18.1.0-h1e9d426_8_cpu.conda + build_number: 8 + sha256: 1896ea00da28e10670f7ba51bb543e68a87f717e9f5692fee44268f1a13d9eee + md5: e7dc0209e065a2b51f19848cefa4b1ab depends: - libabseil * cxx17* - libabseil >=20240722.0,<20240723.0a0 - - libarrow 18.1.0 hb7781cd_7_cpu - - libarrow-acero 18.1.0 h3b568fd_7_cpu - - libarrow-dataset 18.1.0 h3b568fd_7_cpu + - libarrow 18.1.0 h47f80e1_8_cpu + - libarrow-acero 18.1.0 h3b568fd_8_cpu + - libarrow-dataset 18.1.0 h3b568fd_8_cpu - libgcc >=13 - libprotobuf >=5.28.3,<5.28.4.0a0 - libstdcxx >=13 @@ -2807,27 +2807,27 @@ packages: platform: linux license: Apache-2.0 license_family: APACHE - size: 516014 - timestamp: 1735685565929 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_7_cpu.conda - build_number: 7 - sha256: a45bbdd6932aed972d6c6ce30a7439aa8ec9d9b8ee5affb350d41e50abdc0127 - md5: 91927747173f65695e441346c7145e26 + size: 517189 + timestamp: 1736611989417 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_8_cpu.conda + build_number: 8 + sha256: ae52d926ebfc8edb0728824f2918a825d39bd85a4ef27fe2b73656cfecdd7c69 + md5: f67eb19d22ba355cced8c86073ad49b1 depends: - __osx >=11.0 - libabseil * cxx17* - libabseil >=20240722.0,<20240723.0a0 - - libarrow 18.1.0 h0ad35bc_7_cpu - - libarrow-acero 18.1.0 hf07054f_7_cpu - - libarrow-dataset 18.1.0 hf07054f_7_cpu + - libarrow 18.1.0 hf3eb8e5_8_cpu + - libarrow-acero 18.1.0 hf07054f_8_cpu + - libarrow-dataset 18.1.0 hf07054f_8_cpu - libcxx >=18 - libprotobuf >=5.28.3,<5.28.4.0a0 arch: arm64 platform: osx license: Apache-2.0 license_family: APACHE - size: 452385 - timestamp: 1735684993831 + size: 452161 + timestamp: 1736609917123 - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-26_linux64_openblas.conda build_number: 26 sha256: 30bd658682b124243f8e52d8edf8a19e7be1bc31e4fe4baec30a64002dc8cd0c @@ -3125,17 +3125,17 @@ packages: license_family: MIT size: 385098 timestamp: 1734000160270 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.6-ha82da77_1.conda - sha256: 2b2443404503cd862385fd2f2a2c73f9624686fd1e5a45050b4034cfc06904ec - md5: ce5252d8db110cdb4ae4173d0a63c7c5 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda + sha256: 776092346da87a2a23502e14d91eb0c32699c4a1522b7331537bd1c3751dcff5 + md5: 5b3e1610ff8bd5443476b91d618f5b77 depends: - __osx >=11.0 arch: arm64 platform: osx license: Apache-2.0 WITH LLVM-exception license_family: Apache - size: 520992 - timestamp: 1734494699681 + size: 523505 + timestamp: 1736877862502 - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.23-h4ddbbb0_0.conda sha256: 511d801626d02f4247a04fff957cc6e9ec4cc7e8622bd9acd076bcdc5de5fe66 md5: 8dfae1d2e74767e9ce36d5fa0d8605db @@ -3939,13 +3939,13 @@ packages: license_family: BSD size: 4165774 timestamp: 1730772154295 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_7_cpu.conda - build_number: 7 - sha256: 55945b761130f60abdecf1551907ecfd05cb4a5958cf74d855b30c005ecb3592 - md5: b97013ef4e1dd2cf11594f06d5b5e83a +- conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_8_cpu.conda + build_number: 8 + sha256: 2c6d900d4e9dd3c4000886d76d3f8a099e904667ebc6935b49428e6e9b766481 + md5: a9fa0ef309406c84b46db3a28efd761e depends: - __glibc >=2.17,<3.0.a0 - - libarrow 18.1.0 hd595efa_7_cpu + - libarrow 18.1.0 h9d9f30d_8_cpu - libgcc >=13 - libstdcxx >=13 - libthrift >=0.21.0,<0.21.1.0a0 @@ -3954,14 +3954,14 @@ packages: platform: linux license: Apache-2.0 license_family: APACHE - size: 1205598 - timestamp: 1735684849150 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libparquet-18.1.0-hfc78867_7_cpu.conda - build_number: 7 - sha256: 6dff9bbe731dc2cefe96bd9c7981d2cbef2b564a3152840a29c9b6a493ea50d9 - md5: 184bec7a9392ab6ba8134041e81971d6 + size: 1207011 + timestamp: 1736610684584 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libparquet-18.1.0-hfc78867_8_cpu.conda + build_number: 8 + sha256: 2ed6b9eac4504051ddc094ea3f3a2b3198d4d25a443a96fa2971d8075d790c31 + md5: 9a907190c9e2c6bf1a29569700218f0b depends: - - libarrow 18.1.0 hb7781cd_7_cpu + - libarrow 18.1.0 h47f80e1_8_cpu - libgcc >=13 - libstdcxx >=13 - libthrift >=0.21.0,<0.21.1.0a0 @@ -3970,15 +3970,15 @@ packages: platform: linux license: Apache-2.0 license_family: APACHE - size: 1117825 - timestamp: 1735685495511 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_7_cpu.conda - build_number: 7 - sha256: bf42e43542a90edd86ba5aa5fd4543671625f1bc35f62be32688f00e18bae990 - md5: 93de9ba66a20db32a2646d313794b3a8 + size: 1117465 + timestamp: 1736611918180 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_8_cpu.conda + build_number: 8 + sha256: 4991519ef4264abc7160e9faaf8ff01d4731bf1497076bef1895d6c366f796eb + md5: b8bd275a49877fdec62ff787818a869d depends: - __osx >=11.0 - - libarrow 18.1.0 h0ad35bc_7_cpu + - libarrow 18.1.0 hf3eb8e5_8_cpu - libcxx >=18 - libthrift >=0.21.0,<0.21.1.0a0 - openssl >=3.4.0,<4.0a0 @@ -3986,8 +3986,8 @@ packages: platform: osx license: Apache-2.0 license_family: APACHE - size: 873251 - timestamp: 1735684582558 + size: 873593 + timestamp: 1736609701839 - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.45-h943b412_0.conda sha256: b8f5b5ba9a14dedf7c97c01300de492b1b52b68eacbc3249a13fdbfa82349a2f md5: 85cbdaacad93808395ac295b5667d25b @@ -4147,9 +4147,9 @@ packages: license: ISC size: 164972 timestamp: 1716828607917 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.2-hee588c1_0.conda - sha256: 48af21ebc2cbf358976f1e0f4a0ab9e91dfc83d0ef337cf3837c6f5bc22fb352 - md5: b58da17db24b6e08bcbf8fed2fb8c915 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.48.0-hee588c1_0.conda + sha256: 7bb84f44e1bd756da4a3d0d43308324a5533e6ba9f4772475884bce44d405064 + md5: 84bd1c9a82b455e7a2f390375fb38f90 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -4157,30 +4157,30 @@ packages: arch: x86_64 platform: linux license: Unlicense - size: 873551 - timestamp: 1733761824646 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.2-h5eb1b54_0.conda - sha256: 885a27fa84a5a73ed9779168c02b6c386e2fc7a53f0566b32a09ceca146b42b4 - md5: d4bf59f8783a4a66c0aec568f6de3ff4 + size: 876582 + timestamp: 1737123945341 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.48.0-h5eb1b54_0.conda + sha256: b4365ab7c74a2e6c0444eb950367fa3ca56a87c9921b2faa5ad032fe7a7df682 + md5: 1998946fa3ccf38a07b44a879b2227ae depends: - libgcc >=13 - libzlib >=1.3.1,<2.0a0 arch: aarch64 platform: linux license: Unlicense - size: 1042182 - timestamp: 1733761913736 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda - sha256: f192f3c8973de9ec4c214990715f13b781965247a5cedf9162e7f9e699cfc3c4 - md5: 122d6f29470f1a991e85608e77e56a8a + size: 1044953 + timestamp: 1737123983895 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.48.0-h3f77e49_0.conda + sha256: b31169cf0ca7b6835baca4ab92d6cf2eee83b1a12a11b72f39521e8baf4d6acb + md5: 714719df4f49e30f9728956f240846ca depends: - __osx >=11.0 - libzlib >=1.3.1,<2.0a0 arch: arm64 platform: osx license: Unlicense - size: 850553 - timestamp: 1733762057506 + size: 853163 + timestamp: 1737124192432 - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda sha256: 0407ac9fda2bb67e11e357066eff144c845801d00b5f664efbc48813af1e7bb9 md5: be2de152d8073ef1c01b7728475f2fe7 @@ -4421,9 +4421,9 @@ packages: license_family: BSD size: 35720 timestamp: 1680113474501 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda - sha256: a35cd81cd1a9add11024097da83cc06b0aae83186fe4124b77710876f37d8f31 - md5: 070e3c9ddab77e38799d5c30b109c633 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.50.0-hb9d3cd8_0.conda + sha256: b4a8890023902aef9f1f33e3e35603ad9c2f16c21fdb58e968fa6c1bd3e94c0b + md5: 771ee65e13bc599b0b62af5359d80169 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -4431,30 +4431,30 @@ packages: platform: linux license: MIT license_family: MIT - size: 884647 - timestamp: 1729322566955 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda - sha256: adf4eca89339ac7780f2394e7e6699be81259eb91f79f9d9fdf2c1bc6b26f210 - md5: 1899e1ec2be63386c41c4db31d3056af + size: 891272 + timestamp: 1737016632446 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.50.0-h86ecc28_0.conda + sha256: 67914c7f171d343059144d804c2f17fcd621a94e45f179a0fd843b8c1618823e + md5: 915db044076cbbdffb425170deb4ce38 depends: - libgcc >=13 arch: aarch64 platform: linux license: MIT license_family: MIT - size: 627484 - timestamp: 1729322575379 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda - sha256: 0e5176af1e788ad5006cf261c4ea5a288a935fda48993b0240ddd2e562dc3d02 - md5: 4bc348e3a1a74d20a3f9beb866d75e0a + size: 621056 + timestamp: 1737016626950 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.50.0-h5505292_0.conda + sha256: d13fb49d4c8262bf2c44ffb2c77bb2b5d0f85fc6de76bdb75208efeccb29fce6 + md5: 20717343fb30798ab7c23c2e92b748c1 depends: - __osx >=11.0 arch: arm64 platform: osx license: MIT license_family: MIT - size: 410500 - timestamp: 1729322654121 + size: 418890 + timestamp: 1737016751326 - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.5.0-h851e524_0.conda sha256: c45283fd3e90df5f0bd3dbcd31f59cdd2b001d424cf30a07223655413b158eaf md5: 63f790534398730f59e1b899c3644d4a @@ -4645,19 +4645,19 @@ packages: license_family: Other size: 46438 timestamp: 1727963202283 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.6-hdb05f8b_0.conda - sha256: a0f3e9139ab16f0a67b9d2bbabc15b78977168f4a5b5503fed4962dcb9a96102 - md5: 34fdeffa0555a1a56f38839415cc066c +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.7-hdb05f8b_0.conda + sha256: b92a669f2059874ebdcb69041b6c243d68ffc3fb356ac1339cec44aeb27245d7 + md5: c4d54bfd3817313ce758aa76283b118d depends: - __osx >=11.0 constrains: - - openmp 19.1.6|19.1.6.* + - openmp 19.1.7|19.1.7.* arch: arm64 platform: osx license: Apache-2.0 WITH LLVM-exception license_family: APACHE - size: 281251 - timestamp: 1734520462311 + size: 280830 + timestamp: 1736986295869 - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda sha256: 47326f811392a5fd3055f0f773036c392d26fdb32e4d8e7a8197eed951489346 md5: 9de5350a85c4a20c685259b889aa6393 @@ -4752,47 +4752,47 @@ packages: license_family: BSD size: 24048 timestamp: 1733219945697 -- conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011105-release.conda +- conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011705-release.conda noarch: python - sha256: 4bd3331f281b0d42b57e7e5d28eee3650cb52ffb3f9c381f349255034ab4d011 - md5: 9a12141b0beb110b83d4ae256d8de1b0 + sha256: 15578c7bc78001d3882c3b9af9d7d8bf3566c68ae133870038be055c8dfd90e9 + md5: 7e6c35d82044e8d31e9327e7d90bfb2b depends: - - max-core ==25.1.0.dev2025011105 release - - max-python >=25.1.0.dev2025011105,<26.0a0 - - mojo-jupyter ==25.1.0.dev2025011105 release - - mblack ==25.1.0.dev2025011105 release + - max-core ==25.1.0.dev2025011705 release + - max-python >=25.1.0.dev2025011705,<26.0a0 + - mojo-jupyter ==25.1.0.dev2025011705 release + - mblack ==25.1.0.dev2025011705 release license: LicenseRef-Modular-Proprietary - size: 9919 - timestamp: 1736572603494 -- conda: https://conda.modular.com/max-nightly/linux-64/max-core-25.1.0.dev2025011105-release.conda - sha256: 45fdbcfa2c105f01e3c06823e072f2b7b3ceeafe21188973a3f64a87c43c29e6 - md5: ba267ab335859f14f9c0d887d4a83f14 + size: 9920 + timestamp: 1737091778690 +- conda: https://conda.modular.com/max-nightly/linux-64/max-core-25.1.0.dev2025011705-release.conda + sha256: 3e39d779710559206129052c64ac530b9d262288f75812ba07c3e3e395a0e18e + md5: 5575de33b0503143e635ade746f057c3 depends: - - mblack ==25.1.0.dev2025011105 release + - mblack ==25.1.0.dev2025011705 release license: LicenseRef-Modular-Proprietary - size: 244035937 - timestamp: 1736572608009 -- conda: https://conda.modular.com/max-nightly/linux-aarch64/max-core-25.1.0.dev2025011105-release.conda - sha256: 23794990d901f563fd2492483d4f5e0b1b91ed616028bf70bd9e2eaace6bd56b - md5: e8f626acac2d17a591ac8353ba41f5d0 + size: 244764907 + timestamp: 1737091186388 +- conda: https://conda.modular.com/max-nightly/linux-aarch64/max-core-25.1.0.dev2025011705-release.conda + sha256: a9e7747e7cb7ff01dc58f4c7f5772d2b4483693dd200c88653b1ec2dda46bc8b + md5: a9b13b577fb1bcc14b330f5a4185023c depends: - - mblack ==25.1.0.dev2025011105 release + - mblack ==25.1.0.dev2025011705 release license: LicenseRef-Modular-Proprietary - size: 247708765 - timestamp: 1736572603492 -- conda: https://conda.modular.com/max-nightly/osx-arm64/max-core-25.1.0.dev2025011105-release.conda - sha256: 8cc71a4a35f96867f4131ddca60d084a8df937ec0f551b62601adc9202788a82 - md5: 4b8d6a0afbcebe7c2e5dc2ccd30c55a8 + size: 247240781 + timestamp: 1737091778688 +- conda: https://conda.modular.com/max-nightly/osx-arm64/max-core-25.1.0.dev2025011705-release.conda + sha256: 9369b738945ef783af1e4caf2676bd6a299ff86e4ef9504e7a5ee69841fffa01 + md5: c4397350b325ae5a0e07f61e483fc3e5 depends: - - mblack ==25.1.0.dev2025011105 release + - mblack ==25.1.0.dev2025011705 release license: LicenseRef-Modular-Proprietary - size: 206225127 - timestamp: 1736572820782 -- conda: https://conda.modular.com/max-nightly/linux-64/max-python-25.1.0.dev2025011105-3.12release.conda - sha256: 621688d96524cbf32ed8f33e4d572043973beb875708e69af36735ee730cc6c4 - md5: bb2eb7a24245cd62aed0b9d3e3e85604 + size: 206615275 + timestamp: 1737092643231 +- conda: https://conda.modular.com/max-nightly/linux-64/max-python-25.1.0.dev2025011705-3.12release.conda + sha256: bdda011f73105d5d91e29abdacc4e7304501249c3bb50e83517661cdea4ef56a + md5: 0ddfaa3caa3647a0cbcdf394774ee6be depends: - - max-core ==25.1.0.dev2025011105 release + - max-core ==25.1.0.dev2025011705 release - python 3.12.* - fastapi - httpx @@ -4813,13 +4813,13 @@ packages: - uvicorn - python_abi 3.12.* *_cp312 license: LicenseRef-Modular-Proprietary - size: 124216697 - timestamp: 1736572608017 -- conda: https://conda.modular.com/max-nightly/linux-aarch64/max-python-25.1.0.dev2025011105-3.12release.conda - sha256: fd2587af6018758078516561bfdb54d8175207edd4ce6dce211aeb9dffbfd967 - md5: 8d1481a3abe8cd46a76797465f6a9eb6 + size: 124617960 + timestamp: 1737091186397 +- conda: https://conda.modular.com/max-nightly/linux-aarch64/max-python-25.1.0.dev2025011705-3.12release.conda + sha256: 3ec1d98731b5c86829e7dd0d76b3ad820173a418f58833ea0237e34d356b58c6 + md5: 0ed0380d3ee48a36fe43f85f61fd9fe3 depends: - - max-core ==25.1.0.dev2025011105 release + - max-core ==25.1.0.dev2025011705 release - python 3.12.* - fastapi - httpx @@ -4840,13 +4840,13 @@ packages: - uvicorn - python_abi 3.12.* *_cp312 license: LicenseRef-Modular-Proprietary - size: 127983766 - timestamp: 1736572603503 -- conda: https://conda.modular.com/max-nightly/osx-arm64/max-python-25.1.0.dev2025011105-3.12release.conda - sha256: 5d6590e84cf64008fd48066ef10138c48cdbb6d6e2a1d3de01e71270d8d8d966 - md5: 92aa60fa7fe761433d03416f21c8d912 + size: 127367910 + timestamp: 1737091778698 +- conda: https://conda.modular.com/max-nightly/osx-arm64/max-python-25.1.0.dev2025011705-3.12release.conda + sha256: 853e12e0ac11f3dcf5392e94cc927233ba940a71a5cf73c0cec54ad4917256c0 + md5: 53e9620bd08e983c5e52e02afef0a990 depends: - - max-core ==25.1.0.dev2025011105 release + - max-core ==25.1.0.dev2025011705 release - python 3.12.* - fastapi - httpx @@ -4867,12 +4867,12 @@ packages: - uvicorn - python_abi 3.12.* *_cp312 license: LicenseRef-Modular-Proprietary - size: 110625116 - timestamp: 1736572820784 -- conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011105-release.conda + size: 110545057 + timestamp: 1737092643234 +- conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011705-release.conda noarch: python - sha256: f447d269d29bb49fd97275f623632a569638c31b40e88489367df3d7d4ce90e2 - md5: 32c691c7fc2c6a218e1ce2272965a101 + sha256: 180bbe7d8b76c5d0f453b72f81fae10522b7a98a31e6fbeff542dbb31bb9b613 + md5: 680622d3117019e99ddc173efab357c7 depends: - python >=3.9,<3.13 - click >=8.0.0 @@ -4882,8 +4882,8 @@ packages: - platformdirs >=2 - python license: MIT - size: 130815 - timestamp: 1736572603499 + size: 130807 + timestamp: 1737091778695 - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 md5: 592132998493b3ff25fd7479396e8351 @@ -4893,18 +4893,18 @@ packages: license_family: MIT size: 14465 timestamp: 1733255681319 -- conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011105-release.conda +- conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011705-release.conda noarch: python - sha256: 05af473b2b4983829660ba70eb0cb6607f019c4f4b8d107350ea491c6bd8d1cd - md5: 036f5ddfbcce66b3f9972cebf1cec107 + sha256: eab543a5c31c091b3d042980d068a950c51905d14a18532710f9be94ba88ba5d + md5: eea061b963a95002a8740d4b4f506d44 depends: - - max-core ==25.1.0.dev2025011105 release + - max-core ==25.1.0.dev2025011705 release - python >=3.9,<3.13 - jupyter_client >=8.6.2,<8.7 - python license: LicenseRef-Modular-Proprietary - size: 22937 - timestamp: 1736572603499 + size: 22929 + timestamp: 1737091778696 - conda: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.1.0-py312h178313f_2.conda sha256: b05bc8252a6e957bf4a776ed5e0e61d1ba88cdc46ccb55890c72cc58b10371f4 md5: 5b5e3267d915a107eca793d52e1b780a @@ -4999,37 +4999,37 @@ packages: license_family: MIT size: 10854 timestamp: 1733230986902 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda - sha256: 6a1d5d8634c1a07913f1c525db6455918cbc589d745fac46d9d6e30340c8731a - md5: 70caf8bb6cf39a0b6b7efc885f51c0fe +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda + sha256: 17fe6afd8a00446010220d52256bd222b1e4fcb93bd587e7784b03219f3dc358 + md5: 04b34b9a40cdc48cfdab261ab176ff74 depends: - __glibc >=2.17,<3.0.a0 - - libgcc-ng >=12 + - libgcc >=13 arch: x86_64 platform: linux license: X11 AND BSD-3-Clause - size: 889086 - timestamp: 1724658547447 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda - sha256: acad4cf1f57b12ee1e42995e6fac646fa06aa026529f05eb8c07eb0a84a47a84 - md5: 91d49c85cacd92caa40cf375ef72a25d + size: 894452 + timestamp: 1736683239706 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_2.conda + sha256: 9fd726174dde993c560dd6fa1a383e61d546d380e98e0b0348d22512e5d86e24 + md5: 779046fb585c71373e8a051be06c6011 depends: - - libgcc-ng >=12 + - libgcc >=13 arch: aarch64 platform: linux license: X11 AND BSD-3-Clause - size: 924472 - timestamp: 1724658573518 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - sha256: 27d0b9ff78ad46e1f3a6c96c479ab44beda5f96def88e2fe626e0a49429d8afc - md5: cb2b0ea909b97b3d70cd3921d1445e1a + size: 928402 + timestamp: 1736683192463 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda + sha256: b45c73348ec9841d5c893acc2e97adff24127548fe8c786109d03c41ed564e91 + md5: f6f7c5b7d0983be186c46c4f6f8f9af8 depends: - __osx >=11.0 arch: arm64 platform: osx license: X11 AND BSD-3-Clause - size: 802321 - timestamp: 1724658775723 + size: 796754 + timestamp: 1736683572099 - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda sha256: fe3459c75cf84dcef6ef14efcc4adb0ade66038ddd27cadb894f34f4797687d8 md5: d8285bea2a350f63fab23bf460221f3f @@ -5339,9 +5339,9 @@ packages: license_family: BSD size: 15436913 timestamp: 1726879054912 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pandas-2.2.3-py312ha2895bd_1.conda - sha256: 585e05f95d14afe3df43ded14f86800c70da26b27e27b59de95932f8888af5d3 - md5: 80b873ac4fdf36641afa0eaafff3a664 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pandas-2.2.3-py312ha2895bd_2.conda + sha256: a34b10077de97eea72c81cb96e3ddc7d48320c0fc7d9b28ba8d9d2bead1d8297 + md5: 39a91ac336d350513de6aad56da5a920 depends: - libgcc >=13 - libstdcxx >=13 @@ -5353,12 +5353,38 @@ packages: - python-tzdata >=2022a - python_abi 3.12.* *_cp312 - pytz >=2020.1,<2024.2 + constrains: + - fsspec >=2022.11.0 + - s3fs >=2022.11.0 + - fastparquet >=2022.12.0 + - pyreadstat >=1.2.0 + - qtpy >=2.3.0 + - scipy >=1.10.0 + - beautifulsoup4 >=4.11.2 + - gcsfs >=2022.11.0 + - numexpr >=2.8.4 + - sqlalchemy >=2.0.0 + - pyxlsb >=1.0.10 + - numba >=0.56.4 + - lxml >=4.9.2 + - matplotlib >=3.6.3 + - psycopg2 >=2.9.6 + - tzdata >=2022.7 + - bottleneck >=1.3.6 + - xarray >=2022.12.0 + - xlsxwriter >=3.0.5 + - zstandard >=0.19.0 + - blosc >=1.21.3 + - pytables >=3.8.0 + - openpyxl >=3.1.0 + - pyqt5 >=5.15.8 + - tabulate >=0.9.0 arch: aarch64 platform: linux license: BSD-3-Clause license_family: BSD - size: 15159625 - timestamp: 1726879151211 + size: 15162992 + timestamp: 1736811533875 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.2.3-py312hcd31e36_1.conda sha256: ff0cb54b5d058c7987b4a0984066e893642d1865a7bb695294b6172e2fcdc457 md5: c68bfa69e6086c381c74e16fd72613a8 @@ -6700,12 +6726,12 @@ packages: license_family: PSF size: 39637 timestamp: 1733188758212 -- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf - md5: 8ac3367aafb1cc0a068483c580af8015 +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda + sha256: c4b1ae8a2931fe9b274c44af29c5475a85b37693999f8c792dad0f8c6734b1de + md5: dbcace4706afdfb7eb891f7b37d07c04 license: LicenseRef-Public-Domain - size: 122354 - timestamp: 1728047496079 + size: 122921 + timestamp: 1737119101255 - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda sha256: 114919ffa80c328127dab9c8e7a38f9d563c617691fb81fccb11c1e86763727e md5: 32674f8dbfb7b26410ed580dd3c10a29 @@ -6804,6 +6830,7 @@ packages: arch: x86_64 platform: linux license: MIT + license_family: MIT size: 410192 timestamp: 1736550568524 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/watchfiles-1.0.4-py312h8cbf658_0.conda @@ -6820,6 +6847,7 @@ packages: arch: aarch64 platform: linux license: MIT + license_family: MIT size: 403791 timestamp: 1736550743174 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/watchfiles-1.0.4-py312hcd83bfe_0.conda @@ -6836,6 +6864,7 @@ packages: arch: arm64 platform: osx license: MIT + license_family: MIT size: 363822 timestamp: 1736550859472 - conda: https://conda.anaconda.org/conda-forge/linux-64/websockets-14.1-py312h66e93f0_0.conda @@ -6880,9 +6909,9 @@ packages: license_family: BSD size: 243131 timestamp: 1731498944076 -- conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.0-py312h66e93f0_0.conda - sha256: a6fc0f4e90643d0c1fd4aab669b6a79f44a305a5474256f6f2da3354d2310fb4 - md5: ddbe3bb0e1356cb9074dd848570694f9 +- conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.2-py312h66e93f0_0.conda + sha256: ed3a1700ecc5d38c7e7dc7d2802df1bc1da6ba3d6f6017448b8ded0affb4ae00 + md5: 669e63af87710f8d52fdec9d4d63b404 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -6892,11 +6921,11 @@ packages: platform: linux license: BSD-2-Clause license_family: BSD - size: 63807 - timestamp: 1732523690292 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-1.17.0-py312hb2c0f52_0.conda - sha256: b9aa760a987ccc6bc9c61f57badba6798d9a3dcbd0814e5fb8df6d8d2935af73 - md5: 120d5d1c05386d8ce3efd65a4c86431f + size: 63590 + timestamp: 1736869574299 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-1.17.2-py312hb2c0f52_0.conda + sha256: cc28914462a21b2f64d9b763a9733bfcbc811dd2975d0d2e6e429e35f5b6d59c + md5: 8a5c6e3f809bae085be369b62dc5d06a depends: - libgcc >=13 - python >=3.12,<3.13.0a0 @@ -6906,11 +6935,11 @@ packages: platform: linux license: BSD-2-Clause license_family: BSD - size: 64783 - timestamp: 1732523806 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.0-py312hea69d52_0.conda - sha256: 0fb35c3d1642f9f47db87bdb33148f88ef19a3af1eb0ee99b5491551c57269c7 - md5: 73414acdb779a8694a14527865b4357a + size: 63967 + timestamp: 1736869675870 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.2-py312hea69d52_0.conda + sha256: 6a3e68b57de29802e8703d1791dcacb7613bfdc17bbb087c6b2ea2796e6893ef + md5: e49608c832fcf438f70cbcae09c3adc5 depends: - __osx >=11.0 - python >=3.12,<3.13.0a0 @@ -6920,8 +6949,8 @@ packages: platform: osx license: BSD-2-Clause license_family: BSD - size: 61043 - timestamp: 1732523852129 + size: 61198 + timestamp: 1736869673767 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb9d3cd8_0.conda sha256: ed10c9283974d311855ae08a16dfd7e56241fac632aec3b92e3cfe73cff31038 md5: f6ebe2cb3f82ba6c057dde5d9debe4f7 diff --git a/examples/operators/main.mojo b/examples/operators/main.mojo index 413b68cd10..1cffa1cbbc 100644 --- a/examples/operators/main.mojo +++ b/examples/operators/main.mojo @@ -24,10 +24,10 @@ def main(): print() - # Examples of using Complex values with str(), repr(), and print() + # Examples of using Complex values with String(), repr(), and print() c3 = Complex(3.14159, -2.71828) print("c3 =", c3) - var msg: String = "The value is: " + str(c3) + var msg: String = "The value is: " + String(c3) print(msg) print(String("{!r}").format(c3)) diff --git a/examples/operators/test_my_complex.mojo b/examples/operators/test_my_complex.mojo index 1e6481aef7..2846f01bea 100644 --- a/examples/operators/test_my_complex.mojo +++ b/examples/operators/test_my_complex.mojo @@ -35,7 +35,7 @@ def test_str(): str1 = "({} + {}i)".format(re1, im1) out_str1 = String() c1 = Complex(re1, im1) - assert_equal(str1, str(c1)) + assert_equal(str1, String(c1)) c1.write_to(out_str1) assert_equal(str1, out_str1) @@ -45,7 +45,7 @@ def test_str(): str2 = "({} - {}i)".format(re2, abs(im2)) out_str2 = String() c2 = Complex(re2, im2) - assert_equal(str2, str(c2)) + assert_equal(str2, String(c2)) c2.write_to(out_str2) assert_equal(str2, out_str2) diff --git a/examples/testing/.gitattributes b/examples/testing/.gitattributes new file mode 100644 index 0000000000..8f61a8e774 --- /dev/null +++ b/examples/testing/.gitattributes @@ -0,0 +1,2 @@ +# SCM syntax highlighting +pixi.lock linguist-language=YAML linguist-generated=true diff --git a/examples/testing/.gitignore b/examples/testing/.gitignore new file mode 100644 index 0000000000..4edde08eef --- /dev/null +++ b/examples/testing/.gitignore @@ -0,0 +1,6 @@ +# pixi environments +.pixi +*.egg-info + +# Magic environments +.magic diff --git a/examples/testing/README.md b/examples/testing/README.md new file mode 100644 index 0000000000..849554de04 --- /dev/null +++ b/examples/testing/README.md @@ -0,0 +1,68 @@ +# Modular testing framework examples + +This directory contains examples of using the Mojo testing framework. It +demonstrates using the testing framework for both unit testing and testing code +examples in the [documentation +strings](https://docs.modular.com/mojo/manual/basics#code-comments) (also known +as *docstrings*) of Mojo API documentation. See the +[Testing](https://docs.modular.com/mojo/tools/testing) section of the [Mojo +manual](https://docs.modular.com/mojo/manual/) for a complete discussion of how +to use the Mojo testing framework. + +## Files + +This directory contains the following files: + +- `src/my_math/__init__.mojo`: a Mojo package file with package-level docstrings + containing code examples to test + +- `src/my_math/utils.mojo`: a Mojo module source file with both module-level and + function-level docstrings containing code examples to test + +- `src/example.mojo`: a simple Mojo program that uses the functions from the + `my_math` package + +- `test/my_math/test_*.mojo`: Mojo test files containing unit tests for + functions defined in the `my_math` package + +- `mojoproject.toml`: a [Magic](https://docs.modular.com/magic/) project file + containing the project dependencies and task definitions. + +## Run the code + +This example project uses the [Magic](https://docs.modular.com/magic/) package +and virtual environment manager. To run the code in this project, you should +follow the instructions in [Install +Magic](https://docs.modular.com/nightly/magic/#install-magic) first. + +Once you have installed Magic, activate the project's virtual environment by +navigating to the project's root directory and executing: + +```bash +magic shell +``` + +Run the unit tests contained in the `test` directory by executing: + +```bash +mojo test -I src test +``` + +Run the docstring tests for the API documentation contained in the `src` +directory by executing: + +```bash +mojo test src +``` + +If desired, you can run the example program by executing: + +```bash +mojo src/example.mojo +``` + +Once you're done, deactivate the project's virtual environment by executing: + +```bash +exit +``` diff --git a/examples/testing/magic.lock b/examples/testing/magic.lock new file mode 100644 index 0000000000..6fa5a396b7 --- /dev/null +++ b/examples/testing/magic.lock @@ -0,0 +1,7275 @@ +version: 6 +environments: + default: + channels: + - url: https://conda.anaconda.org/conda-forge/ + - url: https://conda.modular.com/max-nightly/ + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.4.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.11.11-py312h178313f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.3.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.3.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.8.0-h205f482_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.8.1-h1a47875_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.10.6-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.0-h4e1184b_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.0-h7959bf6_11.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.9.2-hefd7a92_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.15.3-h831e299_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.11.0-h11f4f37_12.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.7-hf454442_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.2-h4e1184b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.2-h4e1184b_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.29.8-h8570fcd_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.458-h7001638_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-common-cpp-12.8.0-h736e048_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-files-datalake-cpp-12.12.0-ha633028_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backoff-2.2.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h2ec8cdc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.4-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.12.14-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.12.14-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/datasets-2.14.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.2.15-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dill-0.3.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dnspython-2.7.0-pyhff2d567_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/email-validator-2.2.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/email_validator-2.2.0-hd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.115.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/frozenlist-1.5.0-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2024.12.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/googleapis-common-protos-1.66.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.7-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/httptools-0.6.4-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/huggingface_hub-0.27.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20240722.0-cxx17_hbbce691_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-18.1.0-h9d9f30d_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-26_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-26_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.11.1-h332b0f4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.23-h4ddbbb0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20240808-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.4-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.33.0-h2b5623c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.33.0-h0121fbd_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.67.1-h25350d4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-26_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.6.3-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.45-h943b412_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.28.3-h6128344_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hbbce691_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.48.0-hee588c1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.21.0-h0e7cc3e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-hd9ff511_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.9.0-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.50.0-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.5.0-h851e524_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.5-h0d44e9d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py312h178313f_1.conda + - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/max-core-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/max-python-25.1.0.dev2025011705-3.12release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011705-release.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011705-release.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.1.0-py312h178313f_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/multiprocess-0.70.15-py312h98912ed_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.3-h5fbd93e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-api-1.29.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-exporter-otlp-proto-common-1.29.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-exporter-otlp-proto-http-1.29.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-exporter-prometheus-1.12.0rc1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-proto-1.29.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-sdk-1.29.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-semantic-conventions-0.50b0-pyh3cfb1c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.0.3-h12ee42a_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py312hf9745cd_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.1.0-py312h80c1187_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.21.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/propcache-0.2.1-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/protobuf-5.28.3-py312h2ec8cdc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-18.1.0-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-18.1.0-py312h01725c0_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.10.5-pyh3cfb1c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.27.2-py312h12e396e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.7.1-pyh3cfb1c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyinstrument-5.0.0-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.8-h9e4cc4f_1_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.0.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-multipart-0.0.20-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.5.0-py312h66e93f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py312h66e93f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.2.0-py312hbf22597_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2024.07.02-h9925aae_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/regex-2024.11.6-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-toolkit-0.11.3-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.10-hb5b8611_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/safetensors-0.5.2-py312h12e396e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.1-h8bd8927_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sse-starlette-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.41.3-pyha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tokenizers-0.21.0-py312h8360d73_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.2-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/transformers-4.48.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.1-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.0-pyh31011fe_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.34.0-h31011fe_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/uvloop-0.21.0-py312h66e93f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/watchfiles-1.0.4-py312h12e396e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/websockets-14.1-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.2-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xxhash-0.8.2-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/yarl-1.18.3-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h3b0a872_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + linux-aarch64: + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.4.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aiohttp-3.11.11-py312hcc812fe_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.3.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.3.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-auth-0.8.0-hb7ec8d5_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-cal-0.8.1-h740c5af_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-common-0.10.6-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-compression-0.3.0-h0f0193d_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-event-stream-0.5.0-hcbd8f92_11.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-http-0.9.2-h3df160d_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-io-0.15.3-h1a307af_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-mqtt-0.11.0-h5f50e26_12.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-s3-0.7.7-h2080895_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-sdkutils-0.2.2-h0f0193d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-checksums-0.2.2-h0f0193d_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-crt-cpp-0.29.8-h92ee776_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-sdk-cpp-1.11.458-h90ecb4a_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/azure-core-cpp-1.14.0-h1887c18_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/azure-identity-cpp-1.10.0-h47b0b28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/azure-storage-blobs-cpp-12.13.0-h185ecfd_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/azure-storage-common-cpp-12.8.0-h1b94036_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/azure-storage-files-datalake-cpp-12.12.0-h37d6d07_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backoff-2.2.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-python-1.1.0-py312h6f74592_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/c-ares-1.34.4-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.12.14-hcefe29a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.12.14-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/datasets-2.14.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.2.15-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dill-0.3.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dnspython-2.7.0-pyhff2d567_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/email-validator-2.2.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/email_validator-2.2.0-hd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.115.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.12.1-hf0a5ef3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/frozenlist-1.5.0-py312hb2c0f52_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2024.12.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gflags-2.2.2-h5ad3122_1005.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glog-0.7.1-h468a4a4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/googleapis-common-protos-1.66.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.7-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/httptools-0.6.4-py312hb2c0f52_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/huggingface_hub-0.27.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.1-h4e544f5_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.16-h922389a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.0.0-h4de3ea5_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20240722.0-cxx17_h18dbdb1_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-18.1.0-h47f80e1_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-acero-18.1.0-h3b568fd_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-dataset-18.1.0-h3b568fd_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-substrait-18.1.0-h1e9d426_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.9.0-26_linuxaarch64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlicommon-1.1.0-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlidec-1.1.0-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlienc-1.1.0-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.9.0-26_linuxaarch64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcrc32c-1.1.2-h01db608_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcurl-8.11.1-h6702fde_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.23-h5e3c512_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20240808-pl5321h976ea20_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libev-4.33-h31becfc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libevent-2.1.12-h4ba1bb4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.4-h5ad3122_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-14.2.0-he9431aa_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-14.2.0-hb6113d0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgoogle-cloud-2.33.0-hccf9d24_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgoogle-cloud-storage-2.33.0-hb9b2b65_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgrpc-1.67.1-hf7ccdd3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.0.0-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.9.0-26_linuxaarch64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.6.3-h86ecc28_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnghttp2-1.64.0-hc8609a4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.28-pthreads_h9d3fd7e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libparquet-18.1.0-hfc78867_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.45-hec79eb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-5.28.3-h44a3b7b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libre2-11-2024.07.02-h18dbdb1_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.48.0-h5eb1b54_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libssh2-1.11.1-ha41c0db_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libthrift-0.21.0-h154c74f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.0-h88f7998_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libutf8proc-2.9.0-h86ecc28_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.50.0-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.5.0-h0886dbf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.13.5-h2e0c361_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lz4-c-1.10.0-h5ad3122_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.2-py312h74ce7d3_1.conda + - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/max-core-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/max-python-25.1.0.dev2025011705-3.12release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011705-release.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011705-release.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/multidict-6.1.0-py312hcc812fe_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/multiprocess-0.70.15-py312hdd3e373_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-1.26.4-py312h470d778_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.3-h3f56577_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.4.0-hd08dc88_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-api-1.29.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-exporter-otlp-proto-common-1.29.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-exporter-otlp-proto-http-1.29.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-exporter-prometheus-1.12.0rc1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-proto-1.29.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-sdk-1.29.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-semantic-conventions-0.50b0-pyh3cfb1c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/orc-2.0.3-hdd485aa_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pandas-2.2.3-py312ha2895bd_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-11.1.0-py312h719f0cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.21.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/propcache-0.2.1-py312hb2c0f52_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/protobuf-5.28.3-py312h6f74592_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyarrow-18.1.0-py312h8025657_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyarrow-core-18.1.0-py312h66f7834_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.10.5-pyh3cfb1c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pydantic-core-2.27.2-py312h8cbf658_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.7.1-pyh3cfb1c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyinstrument-5.0.0-py312hb2c0f52_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.8-h1683364_1_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.0.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-multipart-0.0.20-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-xxhash-3.5.0-py312h52516f5_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.2-py312hb2c0f52_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-26.2.0-py312h2427ae1_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/re2-2024.07.02-haa97905_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/regex-2024.11.6-py312hb2c0f52_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-toolkit-0.11.3-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/s2n-1.5.10-h5df210e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/safetensors-0.5.2-py312h8cbf658_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/snappy-1.2.1-hd4fb6f5_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sse-starlette-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.41.3-pyha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tokenizers-0.21.0-py312ha0d6ea1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.4.2-py312h52516f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/transformers-4.48.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.1-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.0-pyh31011fe_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.34.0-h31011fe_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uvloop-0.21.0-py312hb2c0f52_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/watchfiles-1.0.4-py312h8cbf658_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/websockets-14.1-py312hb2c0f52_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-1.17.2-py312hb2c0f52_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.12-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-h57736b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xxhash-0.8.2-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-0.2.5-hf897c2e_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yarl-1.18.3-py312hb2c0f52_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-h5efb499_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.4.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aiohttp-3.11.11-py312h998013c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.3.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.3.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.8.0-hfc2798a_16.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.8.1-hc8a0bd2_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.10.6-h5505292_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.3.0-hc8a0bd2_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-event-stream-0.5.0-h54f970a_11.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.9.2-h96aa502_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.15.3-haba67d1_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.11.0-h24f418c_12.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.7.7-h1be5864_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.2-hc8a0bd2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.2.2-hc8a0bd2_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.29.8-h23176ea_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-h794939a_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-core-cpp-1.14.0-hd50102c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-identity-cpp-1.10.0-hc602bab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.13.0-h7585a09_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-common-cpp-12.8.0-h9ca1f76_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-files-datalake-cpp-12.12.0-hcdd55da_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backoff-2.2.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py312hde4cb15_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.4-h5505292_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.12.14-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.12.14-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/datasets-2.14.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.2.15-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dill-0.3.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dnspython-2.7.0-pyhff2d567_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/email-validator-2.2.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/email_validator-2.2.0-hd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.115.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.12.1-hadb7bae_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/frozenlist-1.5.0-py312h0bf5046_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2024.12.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gflags-2.2.2-hf9b8971_1005.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.7.1-heb240a5_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/googleapis-common-protos-1.66.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.7-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/httptools-0.6.4-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/huggingface_hub-0.27.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.16-ha0e7c42_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20240722.0-cxx17_h07bc746_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-18.1.0-hf3eb8e5_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-26_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.1.0-hd74edd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.1.0-hd74edd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.1.0-hd74edd7_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-26_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.11.1-h73640d1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.23-hec38601_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20240808-pl5321hafb1f1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libevent-2.1.12-h2757513_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.33.0-hdbe95d5_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-storage-2.33.0-h7081f7f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.67.1-h0a426d6_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-26_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.6.3-h39f12f2_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.45-h3783ad8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-5.28.3-h3bd63a1_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libre2-11-2024.07.02-h07bc746_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.48.0-h3f77e49_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.21.0-h64651cc_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.9.0-h5505292_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.50.0-h5505292_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.13.5-h178c5d8_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.7-hdb05f8b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.2-py312h998013c_1.conda + - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/max-core-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/max-python-25.1.0.dev2025011705-3.12release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011705-release.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011705-release.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/multidict-6.1.0-py312hdb8e49c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/multiprocess-0.70.15-py312h02f2b3b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-1.26.4-py312h8442bc7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.3-h8a3d83b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-api-1.29.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-exporter-otlp-proto-common-1.29.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-exporter-otlp-proto-http-1.29.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-exporter-prometheus-1.12.0rc1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-proto-1.29.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-sdk-1.29.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-semantic-conventions-0.50b0-pyh3cfb1c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/orc-2.0.3-h0ff2369_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.2.3-py312hcd31e36_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-11.1.0-py312h50aef2c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.21.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/propcache-0.2.1-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/protobuf-5.28.3-py312hd8f9ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-18.1.0-py312h1f38498_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-core-18.1.0-py312hc40f475_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.10.5-pyh3cfb1c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pydantic-core-2.27.2-py312hcd83bfe_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.7.1-pyh3cfb1c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyinstrument-5.0.0-py312h0bf5046_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.8-hc22306f_1_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.0.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-multipart-0.0.20-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-xxhash-3.5.0-py312h024a12e_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.2-py312h024a12e_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-26.2.0-py312hf8a1cbd_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2024.07.02-h6589ca4_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/regex-2024.11.6-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-toolkit-0.11.3-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/safetensors-0.5.2-py312hcd83bfe_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.1-h98b9ce2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sse-starlette-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.41.3-pyha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tokenizers-0.21.0-py312hf3e4074_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.4.2-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/transformers-4.48.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.1-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.0-pyh31011fe_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.34.0-h31011fe_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uvloop-0.21.0-py312h0bf5046_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/watchfiles-1.0.4-py312hcd83bfe_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/websockets-14.1-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.2-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-h5505292_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xxhash-0.8.2-hb547adb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h3422bc3_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yarl-1.18.3-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-hc1bb282_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda +packages: +- conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 + md5: d7c89558ba9fa0495403155b64376d81 + arch: x86_64 + platform: linux + license: None + size: 2562 + timestamp: 1578324546067 +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + build_number: 16 + sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 + md5: 73aaf86a425cc6e73fcf236a5a46396d + depends: + - _libgcc_mutex 0.1 conda_forge + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 23621 + timestamp: 1650670423406 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + build_number: 16 + sha256: 3702bef2f0a4d38bd8288bbe54aace623602a1343c2cfbefd3fa188e015bebf0 + md5: 6168d71addc746e8f2b8d57dfd2edcea + depends: + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + arch: aarch64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 23712 + timestamp: 1650670790230 +- conda: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.4.4-pyhd8ed1ab_1.conda + sha256: 95d4713e49ea92ae50cf42393683ede706b7875af5f7cb14c253438180afa732 + md5: 296b403617bafa89df4971567af79013 + depends: + - python >=3.9 + license: PSF-2.0 + license_family: PSF + size: 19351 + timestamp: 1733332029649 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.11.11-py312h178313f_0.conda + sha256: 2e817805e8a4fed33f23f116ff5649f8651af693328e9ed82d9d11a951338693 + md5: 8219afa093757bbe07b9825eb1973ed9 + depends: + - __glibc >=2.17,<3.0.a0 + - aiohappyeyeballs >=2.3.0 + - aiosignal >=1.1.2 + - attrs >=17.3.0 + - frozenlist >=1.1.1 + - libgcc >=13 + - multidict >=4.5,<7.0 + - propcache >=0.2.0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - yarl >=1.17.0,<2.0 + arch: x86_64 + platform: linux + license: MIT AND Apache-2.0 + license_family: Apache + size: 915358 + timestamp: 1734597073870 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aiohttp-3.11.11-py312hcc812fe_0.conda + sha256: f28e81e458d19df4ca0002f8a92d7f647fa25e8179887a8676801dfe44edb1f2 + md5: 11fa88136d9bf39d2136b2378f7c10be + depends: + - aiohappyeyeballs >=2.3.0 + - aiosignal >=1.1.2 + - attrs >=17.3.0 + - frozenlist >=1.1.1 + - libgcc >=13 + - multidict >=4.5,<7.0 + - propcache >=0.2.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - yarl >=1.17.0,<2.0 + arch: aarch64 + platform: linux + license: MIT AND Apache-2.0 + license_family: Apache + size: 902422 + timestamp: 1734597104529 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aiohttp-3.11.11-py312h998013c_0.conda + sha256: 446f078e7a7b892894d7f4851a278b7834ffb4f5632313646a55c3abe13690d4 + md5: c69c904691364cfb27d15aa7153e9c29 + depends: + - __osx >=11.0 + - aiohappyeyeballs >=2.3.0 + - aiosignal >=1.1.2 + - attrs >=17.3.0 + - frozenlist >=1.1.1 + - multidict >=4.5,<7.0 + - propcache >=0.2.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - yarl >=1.17.0,<2.0 + arch: arm64 + platform: osx + license: MIT AND Apache-2.0 + license_family: Apache + size: 875711 + timestamp: 1734597277258 +- conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.3.2-pyhd8ed1ab_0.conda + sha256: 7de8ced1918bbdadecf8e1c1c68237fe5709c097bd9e0d254f4cad118f4345d0 + md5: 1a3981115a398535dbe3f6d5faae3d36 + depends: + - frozenlist >=1.1.0 + - python >=3.9 + license: Apache-2.0 + license_family: APACHE + size: 13229 + timestamp: 1734342253061 +- conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda + sha256: e0ea1ba78fbb64f17062601edda82097fcf815012cf52bb704150a2668110d48 + md5: 2934f256a8acfe48f6ebb4fce6cde29c + depends: + - python >=3.9 + - typing-extensions >=4.0.0 + license: MIT + license_family: MIT + size: 18074 + timestamp: 1733247158254 +- conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.8.0-pyhd8ed1ab_0.conda + sha256: f1455d2953e3eb6d71bc49881c8558d8e01888469dfd21061dd48afb6183e836 + md5: 848d25bfbadf020ee4d4ba90e5668252 + depends: + - exceptiongroup >=1.0.2 + - idna >=2.8 + - python >=3.9 + - sniffio >=1.1 + - typing_extensions >=4.5 + constrains: + - trio >=0.26.1 + - uvloop >=0.21 + license: MIT + license_family: MIT + size: 115305 + timestamp: 1736174485476 +- conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.3.0-pyh71513ae_0.conda + sha256: 750186af694a7130eaf7119fbb56db0d2326d8995ad5b8eae23c622b85fea29a + md5: 356927ace43302bf6f5926e2a58dae6a + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 56354 + timestamp: 1734348889193 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.8.0-h205f482_16.conda + sha256: 0695c285b70385913dc7dce05888d3ad1378247b65273bdab509494a2f8f0eea + md5: b0815d37ab812ade9c07239da7c3c369 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-cal >=0.8.1,<0.8.2.0a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - aws-c-http >=0.9.2,<0.9.3.0a0 + - aws-c-io >=0.15.3,<0.15.4.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 107478 + timestamp: 1736592747413 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-auth-0.8.0-hb7ec8d5_16.conda + sha256: 5a2a2691f2e0028e8549b97a340d7e6c502e0d54b7deba00fad505812663a98b + md5: 56f166780076db46c5e273988693d8a3 + depends: + - aws-c-cal >=0.8.1,<0.8.2.0a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - aws-c-http >=0.9.2,<0.9.3.0a0 + - aws-c-io >=0.15.3,<0.15.4.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 + - libgcc >=13 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 112264 + timestamp: 1736592695540 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.8.0-hfc2798a_16.conda + sha256: cdcd932332311db1b614289101b61e32cbae2478ba2bf85763aaf5a5cc7db6f6 + md5: 1e9a41d5296f50c08ae511d61fddef85 + depends: + - __osx >=11.0 + - aws-c-cal >=0.8.1,<0.8.2.0a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - aws-c-http >=0.9.2,<0.9.3.0a0 + - aws-c-io >=0.15.3,<0.15.4.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: Apache + size: 92547 + timestamp: 1736592866387 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.8.1-h1a47875_3.conda + sha256: 095ac824ea9303eff67e04090ae531d9eb33d2bf8f82eaade39b839c421e16e8 + md5: 55a8561fdbbbd34f50f57d9be12ed084 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - libgcc >=13 + - openssl >=3.3.1,<4.0a0 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 47601 + timestamp: 1733991564405 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-cal-0.8.1-h740c5af_3.conda + sha256: c5c7961d48ca7320ed3560c036f7aa5244df4b85d9657f70aacc5faba3e1509a + md5: 57ed2c445d7ef01d121b9bcea0522913 + depends: + - aws-c-common >=0.10.6,<0.10.7.0a0 + - libgcc >=13 + - openssl >=3.3.1,<4.0a0 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 50036 + timestamp: 1733991581303 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.8.1-hc8a0bd2_3.conda + sha256: 1f44be36e1daa17b4b081debb8aee492d13571084f38b503ad13e869fef24fe4 + md5: 8b0ce61384e5a33d2b301a64f3d22ac5 + depends: + - __osx >=11.0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - openssl >=3.3.1,<4.0a0 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: Apache + size: 39925 + timestamp: 1733991649383 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.10.6-hb9d3cd8_0.conda + sha256: 496e92f2150fdc351eacf6e236015deedb3d0d3114f8e5954341cbf9f3dda257 + md5: d7d4680337a14001b0e043e96529409b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 236574 + timestamp: 1733975453350 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-common-0.10.6-h86ecc28_0.conda + sha256: 57288ec5df35781bea8fc6a8c9099cad6695b747784fc1b8862a0f9e5b3bf5ab + md5: fef806a0f6de853670c746bbece01966 + depends: + - libgcc >=13 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 259031 + timestamp: 1733975520465 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.10.6-h5505292_0.conda + sha256: 3bde135c8e74987c0f79ecd4fa17ec9cff0d658b3090168727ca1af3815ae57a + md5: 145e5b4c9702ed279d7d68aaf096f77d + depends: + - __osx >=11.0 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: Apache + size: 221863 + timestamp: 1733975576886 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.0-h4e1184b_5.conda + sha256: 62ca84da83585e7814a40240a1e750b1563b2680b032a471464eccc001c3309b + md5: 3f4c1197462a6df2be6dc8241828fe93 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 19086 + timestamp: 1733991637424 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-compression-0.3.0-h0f0193d_5.conda + sha256: 3f05d19f68ef800f33d44ea2a4211003124076516c8469abc7d432236344df53 + md5: 3a1421d12435df5b4c412cc4c8fac64d + depends: + - aws-c-common >=0.10.6,<0.10.7.0a0 + - libgcc >=13 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 19740 + timestamp: 1733991625201 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.3.0-hc8a0bd2_5.conda + sha256: 47b2813f652ce7e64ac442f771b2a5f7d4af4ad0d07ff51f6075ea80ed2e3f09 + md5: a8b6c17732d14ed49d0e9b59c43186bc + depends: + - __osx >=11.0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: Apache + size: 18068 + timestamp: 1733991869211 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.5.0-h7959bf6_11.conda + sha256: 10d7240c7db0c941fb1a59c4f8ea6689a434b03309ee7b766fa15a809c553c02 + md5: 9b3fb60fe57925a92f399bc3fc42eccf + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - aws-c-io >=0.15.3,<0.15.4.0a0 + - aws-checksums >=0.2.2,<0.2.3.0a0 + - libgcc >=13 + - libstdcxx >=13 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 54003 + timestamp: 1734024480949 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-event-stream-0.5.0-hcbd8f92_11.conda + sha256: 79aa363c71c891a27496c0498f8d498b2ddc87b3ccb3b6c9da5b50b05936ebb8 + md5: e0772c59af4243a9b2565baa5d79e5b6 + depends: + - aws-c-common >=0.10.6,<0.10.7.0a0 + - aws-c-io >=0.15.3,<0.15.4.0a0 + - aws-checksums >=0.2.2,<0.2.3.0a0 + - libgcc >=13 + - libstdcxx >=13 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 55207 + timestamp: 1734024546663 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-event-stream-0.5.0-h54f970a_11.conda + sha256: f0667935f4e0d4c25e0e51da035640310b5ceeb8f723156734439bde8b848d7d + md5: ba41238f8e653998d7d2f42e3a8db054 + depends: + - __osx >=11.0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - aws-c-io >=0.15.3,<0.15.4.0a0 + - aws-checksums >=0.2.2,<0.2.3.0a0 + - libcxx >=18 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: Apache + size: 47078 + timestamp: 1734024749727 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.9.2-hefd7a92_4.conda + sha256: 4a330206bd51148f6c13ca0b7a4db40f29a46f090642ebacdeb88b8a4abd7f99 + md5: 5ce4df662d32d3123ea8da15571b6f51 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-cal >=0.8.1,<0.8.2.0a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - aws-c-compression >=0.3.0,<0.3.1.0a0 + - aws-c-io >=0.15.3,<0.15.4.0a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 197731 + timestamp: 1734008380764 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-http-0.9.2-h3df160d_4.conda + sha256: 3a1d2d332945306be9d49e569b95e4cc172d825f10e88715513a172f28ebb59e + md5: 28f00aa7fd9556c4c461328cf146c20b + depends: + - aws-c-cal >=0.8.1,<0.8.2.0a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - aws-c-compression >=0.3.0,<0.3.1.0a0 + - aws-c-io >=0.15.3,<0.15.4.0a0 + - libgcc >=13 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 190586 + timestamp: 1734008442362 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.9.2-h96aa502_4.conda + sha256: 22e4737c8a885995b7c1ae1d79c1f6e78d489e16ec079615980fdde067aeaf76 + md5: 495c93a4f08b17deb3c04894512330e6 + depends: + - __osx >=11.0 + - aws-c-cal >=0.8.1,<0.8.2.0a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - aws-c-compression >=0.3.0,<0.3.1.0a0 + - aws-c-io >=0.15.3,<0.15.4.0a0 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: Apache + size: 152983 + timestamp: 1734008451473 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.15.3-h831e299_5.conda + sha256: 5920009b1c6f9a2bc131a36725251894e4b4773fce29c4b1065d4213ae337abe + md5: 80dd9f0ddf935290d1dc00ec75ff3023 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-cal >=0.8.1,<0.8.2.0a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - libgcc >=13 + - s2n >=1.5.10,<1.5.11.0a0 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 157864 + timestamp: 1734433578570 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-io-0.15.3-h1a307af_5.conda + sha256: 71f5bf891299f831dceaea12f926c393bf754569e5305387a88b77e1f94612d8 + md5: da8ab0f3eeac93449ec3d531ede92caa + depends: + - aws-c-cal >=0.8.1,<0.8.2.0a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - libgcc >=13 + - s2n >=1.5.10,<1.5.11.0a0 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 161889 + timestamp: 1734433686109 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.15.3-haba67d1_5.conda + sha256: c0a1a2b0750225ac3dc07fd258c88c2be866bf8ac67ba3d50bb4ecec852ff8ee + md5: 4c5ff4134e76426a75b8c548984fa933 + depends: + - __osx >=11.0 + - aws-c-cal >=0.8.1,<0.8.2.0a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: Apache + size: 135729 + timestamp: 1734433832730 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.11.0-h11f4f37_12.conda + sha256: 512d3969426152d9d5fd886e27b13706122dc3fa90eb08c37b0d51a33d7bb14a + md5: 96c3e0221fa2da97619ee82faa341a73 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - aws-c-http >=0.9.2,<0.9.3.0a0 + - aws-c-io >=0.15.3,<0.15.4.0a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 194672 + timestamp: 1734025626798 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-mqtt-0.11.0-h5f50e26_12.conda + sha256: ffeb9100cc8fd4093e1a6fdfd938bc4a396dd77480b7fb17aa42855a4d5e2c70 + md5: 031ca33115d4b1eeb43f435d6215778c + depends: + - aws-c-common >=0.10.6,<0.10.7.0a0 + - aws-c-http >=0.9.2,<0.9.3.0a0 + - aws-c-io >=0.15.3,<0.15.4.0a0 + - libgcc >=13 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 169516 + timestamp: 1734025167885 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.11.0-h24f418c_12.conda + sha256: 96575ea1dd2a9ea94763882e40a66dcbff9c41f702bf37c9514c4c719b3c11dd + md5: c072045a6206f88015d02fcba1705ea1 + depends: + - __osx >=11.0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - aws-c-http >=0.9.2,<0.9.3.0a0 + - aws-c-io >=0.15.3,<0.15.4.0a0 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: Apache + size: 134371 + timestamp: 1734025379525 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.7-hf454442_0.conda + sha256: c2f205a7bf64c5f40eea373b3a0a7c363c9aa9246a13dd7f3d9c6a4434c4fe2d + md5: 947c82025693bebd557f782bb5d6b469 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-auth >=0.8.0,<0.8.1.0a0 + - aws-c-cal >=0.8.1,<0.8.2.0a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - aws-c-http >=0.9.2,<0.9.3.0a0 + - aws-c-io >=0.15.3,<0.15.4.0a0 + - aws-checksums >=0.2.2,<0.2.3.0a0 + - libgcc >=13 + - openssl >=3.4.0,<4.0a0 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 114156 + timestamp: 1734146123386 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-s3-0.7.7-h2080895_0.conda + sha256: 20bc2dd60e6518d9b8215c2b652ab5c52ee8a997d3b9a5f69e2dabd28cbf26b2 + md5: ae223efa63fbb4262a2d85c3ab3bc4f5 + depends: + - aws-c-auth >=0.8.0,<0.8.1.0a0 + - aws-c-cal >=0.8.1,<0.8.2.0a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - aws-c-http >=0.9.2,<0.9.3.0a0 + - aws-c-io >=0.15.3,<0.15.4.0a0 + - aws-checksums >=0.2.2,<0.2.3.0a0 + - libgcc >=13 + - openssl >=3.4.0,<4.0a0 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 117641 + timestamp: 1734146239779 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.7.7-h1be5864_0.conda + sha256: 22966164d63808689fffd35945f57756c95337327e28099b5d77b29fc6a56ecc + md5: a37bba7acb62dd70492ee01eacca3b8f + depends: + - __osx >=11.0 + - aws-c-auth >=0.8.0,<0.8.1.0a0 + - aws-c-cal >=0.8.1,<0.8.2.0a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - aws-c-http >=0.9.2,<0.9.3.0a0 + - aws-c-io >=0.15.3,<0.15.4.0a0 + - aws-checksums >=0.2.2,<0.2.3.0a0 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: Apache + size: 97598 + timestamp: 1734146239038 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.2-h4e1184b_0.conda + sha256: 0424e380c435ba03b5948d02e8c958866c4eee50ed29e57f99473a5f795a4cfc + md5: dcd498d493818b776a77fbc242fbf8e4 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 55911 + timestamp: 1736535960724 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-sdkutils-0.2.2-h0f0193d_0.conda + sha256: fba38e469457764afcb94aa84d4d7788e6b5fa1554d34b05c904d2245fdd3c81 + md5: a78928881c652facde2a13ec6e776f3c + depends: + - aws-c-common >=0.10.6,<0.10.7.0a0 + - libgcc >=13 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 58221 + timestamp: 1736536003041 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.2-hc8a0bd2_0.conda + sha256: ea4f0f1e99056293c69615f581a997d65ba7e229e296e402e0d8ef750648a5b5 + md5: e7b5498ac7b7ab921a907be38f3a8080 + depends: + - __osx >=11.0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: Apache + size: 49872 + timestamp: 1736536152332 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.2-h4e1184b_4.conda + sha256: 1ed9a332d06ad595694907fad2d6d801082916c27cd5076096fda4061e6d24a8 + md5: 74e8c3e4df4ceae34aa2959df4b28101 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 72762 + timestamp: 1733994347547 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-checksums-0.2.2-h0f0193d_4.conda + sha256: 9f1e3635a587bcf92b61d88c7af7d24cd89c147c6d0ae58afbde08e65bcf48da + md5: 3bd35b0adab3d743f09e0252cc441d6b + depends: + - aws-c-common >=0.10.6,<0.10.7.0a0 + - libgcc >=13 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 72154 + timestamp: 1733994384415 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.2.2-hc8a0bd2_4.conda + sha256: 215086d95e8ff1d3fcb0197ada116cc9d7db1fdae7573f5e810d20fa9215b47c + md5: e70e88a357a3749b67679c0788c5b08a + depends: + - __osx >=11.0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: Apache + size: 70186 + timestamp: 1733994496998 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.29.8-h8570fcd_1.conda + sha256: ff8f08bc615d3ef6d970df80988200b3ecee76ecfa4885109cd82b30176cfda9 + md5: f21296b496cca1c1fa426b9a3b676e79 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-auth >=0.8.0,<0.8.1.0a0 + - aws-c-cal >=0.8.1,<0.8.2.0a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - aws-c-event-stream >=0.5.0,<0.5.1.0a0 + - aws-c-http >=0.9.2,<0.9.3.0a0 + - aws-c-io >=0.15.3,<0.15.4.0a0 + - aws-c-mqtt >=0.11.0,<0.11.1.0a0 + - aws-c-s3 >=0.7.7,<0.7.8.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 + - libgcc >=13 + - libstdcxx >=13 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 354328 + timestamp: 1736598991291 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-crt-cpp-0.29.8-h92ee776_1.conda + sha256: 114ac89d3936bf801dcbd488ba0b468c7e113a407cb1ee5898259a5202b7e750 + md5: 63546051b5687f793ae977c7994e1339 + depends: + - aws-c-auth >=0.8.0,<0.8.1.0a0 + - aws-c-cal >=0.8.1,<0.8.2.0a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - aws-c-event-stream >=0.5.0,<0.5.1.0a0 + - aws-c-http >=0.9.2,<0.9.3.0a0 + - aws-c-io >=0.15.3,<0.15.4.0a0 + - aws-c-mqtt >=0.11.0,<0.11.1.0a0 + - aws-c-s3 >=0.7.7,<0.7.8.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 + - libgcc >=13 + - libstdcxx >=13 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 284664 + timestamp: 1736598964131 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.29.8-h23176ea_1.conda + sha256: db6a31078bb82fb12044d7706239c003568273729f7ba4971c1479b7926ada82 + md5: 31fdd3ffb00f5472196fa95ef08087b7 + depends: + - __osx >=11.0 + - aws-c-auth >=0.8.0,<0.8.1.0a0 + - aws-c-cal >=0.8.1,<0.8.2.0a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - aws-c-event-stream >=0.5.0,<0.5.1.0a0 + - aws-c-http >=0.9.2,<0.9.3.0a0 + - aws-c-io >=0.15.3,<0.15.4.0a0 + - aws-c-mqtt >=0.11.0,<0.11.1.0a0 + - aws-c-s3 >=0.7.7,<0.7.8.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 + - libcxx >=18 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: Apache + size: 236269 + timestamp: 1736599024242 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.458-h7001638_5.conda + sha256: 849524b09865e84d6926aa814944cf71511aa4a00fffc5ad174c286d5dfac5f0 + md5: fc01d77a7f383b2915f276c73b7d0934 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - aws-c-event-stream >=0.5.0,<0.5.1.0a0 + - aws-checksums >=0.2.2,<0.2.3.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 + - libcurl >=8.11.1,<9.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.4.0,<4.0a0 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 3088636 + timestamp: 1736598504343 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-sdk-cpp-1.11.458-h90ecb4a_5.conda + sha256: 9467acd0f2df74ea7472aebdfb8b5656a8d403abad2edbce9743d6e88c94fd10 + md5: 33f86f8de1d8cd40f8fe628dc0784437 + depends: + - aws-c-common >=0.10.6,<0.10.7.0a0 + - aws-c-event-stream >=0.5.0,<0.5.1.0a0 + - aws-checksums >=0.2.2,<0.2.3.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 + - libcurl >=8.11.1,<9.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.4.0,<4.0a0 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 2925443 + timestamp: 1736598526637 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-h794939a_5.conda + sha256: 2b1e7d5a45e82604bfdb6de63c53cf0e9495f596cfd90e644a1e67910de7f91c + md5: a2374b4182bf5b2d08b2903393d0c487 + depends: + - __osx >=11.0 + - aws-c-common >=0.10.6,<0.10.7.0a0 + - aws-c-event-stream >=0.5.0,<0.5.1.0a0 + - aws-checksums >=0.2.2,<0.2.3.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 + - libcurl >=8.11.1,<9.0a0 + - libcxx >=18 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.4.0,<4.0a0 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: Apache + size: 2824168 + timestamp: 1736598935034 +- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda + sha256: fe07debdb089a3db17f40a7f20d283d75284bb4fc269ef727b8ba6fc93f7cb5a + md5: 0a8838771cc2e985cd295e01ae83baf1 + depends: + - __glibc >=2.17,<3.0.a0 + - libcurl >=8.10.1,<9.0a0 + - libgcc >=13 + - libstdcxx >=13 + - openssl >=3.3.2,<4.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 345117 + timestamp: 1728053909574 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/azure-core-cpp-1.14.0-h1887c18_0.conda + sha256: 8967b3ccee4d74e61f6ec82dd8efb9deb854ee7ba012dfe767b7a92e0ac77724 + md5: e0c3a906a41be769f0ae20ca3e31cfc0 + depends: + - libcurl >=8.10.1,<9.0a0 + - libgcc >=13 + - libstdcxx >=13 + - openssl >=3.3.2,<4.0a0 + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 338650 + timestamp: 1728055589907 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-core-cpp-1.14.0-hd50102c_0.conda + sha256: f5b91329ed59ffc0be8747784c6e4cc7e56250c54032883a83bc11808ef6a87e + md5: f093a11dcf3cdcca010b20a818fcc6dc + depends: + - __osx >=11.0 + - libcurl >=8.10.1,<9.0a0 + - libcxx >=17 + - openssl >=3.3.2,<4.0a0 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 294299 + timestamp: 1728054014060 +- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda + sha256: 286b31616c191486626cb49e9ceb5920d29394b9e913c23adb7eb637629ba4de + md5: 73f73f60854f325a55f1d31459f2ab73 + depends: + - __glibc >=2.17,<3.0.a0 + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - libgcc >=13 + - libstdcxx >=13 + - openssl >=3.3.2,<4.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 232351 + timestamp: 1728486729511 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/azure-identity-cpp-1.10.0-h47b0b28_0.conda + sha256: 1c72423b9beba167d2f01b80dc204da77240a8266f1edb3d89510c852b300d69 + md5: 94e73a7877743a85c57091d8afab2348 + depends: + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - libgcc >=13 + - libstdcxx >=13 + - openssl >=3.3.2,<4.0a0 + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 217132 + timestamp: 1728488096615 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-identity-cpp-1.10.0-hc602bab_0.conda + sha256: bde446b916fff5150606f8ed3e6058ffc55a3aa72381e46f1ab346590b1ae40a + md5: d7b71593a937459f2d4b67e1a4727dc2 + depends: + - __osx >=11.0 + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - libcxx >=17 + - openssl >=3.3.2,<4.0a0 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 166907 + timestamp: 1728486882502 +- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda + sha256: 2606260e5379eed255bcdc6adc39b93fb31477337bcd911c121fc43cd29bf394 + md5: 7eb66060455c7a47d9dcdbfa9f46579b + depends: + - __glibc >=2.17,<3.0.a0 + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - azure-storage-common-cpp >=12.8.0,<12.8.1.0a0 + - libgcc >=13 + - libstdcxx >=13 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 549342 + timestamp: 1728578123088 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/azure-storage-blobs-cpp-12.13.0-h185ecfd_1.conda + sha256: 280ec70009a92626054f58e45b168fce393e71a9710587488bd8401628cda481 + md5: 221e1e5ecb2643e113f32b3229d5ba33 + depends: + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - azure-storage-common-cpp >=12.8.0,<12.8.1.0a0 + - libgcc >=13 + - libstdcxx >=13 + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 502934 + timestamp: 1728580241002 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.13.0-h7585a09_1.conda + sha256: 08d52d130addc0fb55d5ba10d9fa483e39be25d69bac7f4c676c2c3069207590 + md5: 704238ef05d46144dae2e6b5853df8bc + depends: + - __osx >=11.0 + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - azure-storage-common-cpp >=12.8.0,<12.8.1.0a0 + - libcxx >=17 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 438636 + timestamp: 1728578216193 +- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-common-cpp-12.8.0-h736e048_1.conda + sha256: 273475f002b091b66ce7366da04bf164c3732c03f8692ab2ee2d23335b6a82ba + md5: 13de36be8de3ae3f05ba127631599213 + depends: + - __glibc >=2.17,<3.0.a0 + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libxml2 >=2.12.7,<3.0a0 + - openssl >=3.3.2,<4.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 149312 + timestamp: 1728563338704 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/azure-storage-common-cpp-12.8.0-h1b94036_1.conda + sha256: 146e76aac169e3dbdce5d3b142b7930ac643795c765e7655d1989905ec7d3231 + md5: 793b1080ab2d958980f137a8643cd6e8 + depends: + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libxml2 >=2.12.7,<3.0a0 + - openssl >=3.3.2,<4.0a0 + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 140832 + timestamp: 1728565334900 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-common-cpp-12.8.0-h9ca1f76_1.conda + sha256: 77ab04e8fe5636a2de9c718f72a43645f7502cd208868c8a91ffba385547d585 + md5: 7a187cd7b1445afc80253bb186a607cc + depends: + - __osx >=11.0 + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - libcxx >=17 + - libxml2 >=2.12.7,<3.0a0 + - openssl >=3.3.2,<4.0a0 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 121278 + timestamp: 1728563418777 +- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-files-datalake-cpp-12.12.0-ha633028_1.conda + sha256: 5371e4f3f920933bb89b926a85a67f24388227419abd6e99f6086481e5e8d5f2 + md5: 7c1980f89dd41b097549782121a73490 + depends: + - __glibc >=2.17,<3.0.a0 + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - azure-storage-blobs-cpp >=12.13.0,<12.13.1.0a0 + - azure-storage-common-cpp >=12.8.0,<12.8.1.0a0 + - libgcc >=13 + - libstdcxx >=13 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 287366 + timestamp: 1728729530295 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/azure-storage-files-datalake-cpp-12.12.0-h37d6d07_1.conda + sha256: 4079c617a75682e49bae63670d58fd6078ccfbbe55ca1f994acab3a74ab6bbcc + md5: b724f3b4b7f4e9b36c58cbe3ed8610a2 + depends: + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - azure-storage-blobs-cpp >=12.13.0,<12.13.1.0a0 + - azure-storage-common-cpp >=12.8.0,<12.8.1.0a0 + - libgcc >=13 + - libstdcxx >=13 + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 260547 + timestamp: 1728730924071 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-files-datalake-cpp-12.12.0-hcdd55da_1.conda + sha256: f48523f8aa0b5b80f45a92f0556b388dd96f44ac2dc2f44a01d08c1822eec97d + md5: c49fbc5233fcbaa86391162ff1adef38 + depends: + - __osx >=11.0 + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - azure-storage-blobs-cpp >=12.13.0,<12.13.1.0a0 + - azure-storage-common-cpp >=12.8.0,<12.8.1.0a0 + - libcxx >=17 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 196032 + timestamp: 1728729672889 +- conda: https://conda.anaconda.org/conda-forge/noarch/backoff-2.2.1-pyhd8ed1ab_1.conda + sha256: f334115c6b0c6c2cd0d28595365f205ec7eaa60bcc5ff91a75d7245f728be820 + md5: a38b801f2bcc12af80c2e02a9e4ce7d9 + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 18816 + timestamp: 1733771192649 +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h2ec8cdc_2.conda + sha256: f2a59ccd20b4816dea9a2a5cb917eb69728271dbf1aeab4e1b7e609330a50b6f + md5: b0b867af6fc74b2a0aa206da29c0f3cf + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - libbrotlicommon 1.1.0 hb9d3cd8_2 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 349867 + timestamp: 1725267732089 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-python-1.1.0-py312h6f74592_2.conda + sha256: 9736bf660a0e4260c68f81d2635b51067f817813e6490ac9e8abd9a835dcbf6d + md5: e1e9727063057168d95f27a032acd0a4 + depends: + - libgcc >=13 + - libstdcxx >=13 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - libbrotlicommon 1.1.0 h86ecc28_2 + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 356878 + timestamp: 1725267878508 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py312hde4cb15_2.conda + sha256: 254b411fa78ccc226f42daf606772972466f93e9bc6895eabb4cfda22f5178af + md5: a83c2ef76ccb11bc2349f4f17696b15d + depends: + - __osx >=11.0 + - libcxx >=17 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - libbrotlicommon 1.1.0 hd74edd7_2 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 339360 + timestamp: 1725268143995 +- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d + md5: 62ee74e96c5ebb0af99386de58cf9553 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + arch: x86_64 + platform: linux + license: bzip2-1.0.6 + license_family: BSD + size: 252783 + timestamp: 1720974456583 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda + sha256: 2258b0b33e1cb3a9852d47557984abb6e7ea58e3d7f92706ec1f8e879290c4cb + md5: 56398c28220513b9ea13d7b450acfb20 + depends: + - libgcc-ng >=12 + arch: aarch64 + platform: linux + license: bzip2-1.0.6 + license_family: BSD + size: 189884 + timestamp: 1720974504976 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + sha256: adfa71f158cbd872a36394c56c3568e6034aa55c623634b37a4836bd036e6b91 + md5: fc6948412dbbbe9a4c9ddbbcfe0a79ab + depends: + - __osx >=11.0 + arch: arm64 + platform: osx + license: bzip2-1.0.6 + license_family: BSD + size: 122909 + timestamp: 1720974522888 +- conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.4-hb9d3cd8_0.conda + sha256: d4f28d87b6339b94f74762c0076e29c8ef8ddfff51a564a92da2843573c18320 + md5: e2775acf57efd5af15b8e3d1d74d72d3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 206085 + timestamp: 1734208189009 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/c-ares-1.34.4-h86ecc28_0.conda + sha256: 1187a41d4bb2afe02cb18690682edc98d1e9f5e0ccda638d8704a75ea1875bbe + md5: 356da36f35d36dcba16e43f1589d4e39 + depends: + - libgcc >=13 + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 215979 + timestamp: 1734208193181 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.4-h5505292_0.conda + sha256: 09c0c8476e50b2955f474a4a1c17c4c047dd52993b5366b6ea8e968e583b921f + md5: c1c999a38a4303b29d75c636eaa13cf9 + depends: + - __osx >=11.0 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 179496 + timestamp: 1734208291879 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.12.14-hbcca054_0.conda + sha256: 1afd7274cbc9a334d6d0bc62fa760acc7afdaceb0b91a8df370ec01fd75dc7dd + md5: 720523eb0d6a9b0f6120c16b2aa4e7de + arch: x86_64 + platform: linux + license: ISC + size: 157088 + timestamp: 1734208393264 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ca-certificates-2024.12.14-hcefe29a_0.conda + sha256: ad7b43211051332a5a4e788bb4619a2d0ecb5be73e0f76be17f733a87d7effd1 + md5: 83b4ad1e6dc14df5891f3fcfdeb44351 + arch: aarch64 + platform: linux + license: ISC + size: 157096 + timestamp: 1734209301744 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.12.14-hf0a4a13_0.conda + sha256: 256be633fd0882ccc1a7a32bc278547e1703f85082c0789a87a603ee3ab8fb82 + md5: 7cb381a6783d91902638e4ed1ebd478e + arch: arm64 + platform: osx + license: ISC + size: 157091 + timestamp: 1734208344343 +- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.12.14-pyhd8ed1ab_0.conda + sha256: 048c16a9cbcb1fbad02083414d3bc7c1d0eea4b39aee6aa6bf8d1d5089ca8bad + md5: 6feb87357ecd66733be3279f16a8c400 + depends: + - python >=3.9 + license: ISC + size: 161642 + timestamp: 1734380604767 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda + sha256: cba6ea83c4b0b4f5b5dc59cb19830519b28f95d7ebef7c9c5cf1c14843621457 + md5: a861504bbea4161a9170b85d4d2be840 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 294403 + timestamp: 1725560714366 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-1.17.1-py312hac81daf_0.conda + sha256: 1162e3ca039e7ca7c0e78f0a020ed1bde968096841b663e3f393c966eb82f0f0 + md5: 1a256e5581b1099e9295cb84d53db3ea + depends: + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 312892 + timestamp: 1725561779888 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda + sha256: 8d91a0d01358b5c3f20297c6c536c5d24ccd3e0c2ddd37f9d0593d0f0070226f + md5: 19a5456f72f505881ba493979777b24e + depends: + - __osx >=11.0 + - libffi >=3.4,<4.0a0 + - pycparser + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 281206 + timestamp: 1725560813378 +- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda + sha256: 4e0ee91b97e5de3e74567bdacea27f0139709fceca4db8adffbe24deffccb09b + md5: e83a31202d1c0a000fce3e9cf3825875 + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 47438 + timestamp: 1735929811779 +- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda + sha256: c920d23cd1fcf565031c679adb62d848af60d6fbb0edc2d50ba475cea4f0d8ab + md5: f22f4d4970e09d68a10b922cbb0408d3 + depends: + - __unix + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + size: 84705 + timestamp: 1734858922844 +- conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287 + md5: 962b9857ee8e7018c22f2776ffa0b2d7 + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + size: 27011 + timestamp: 1733218222191 +- conda: https://conda.anaconda.org/conda-forge/noarch/datasets-2.14.4-pyhd8ed1ab_0.conda + sha256: 7e09bd083a609138b780fcc4535924cb96814d2c908a36d4c64a2ba9ee3efe7f + md5: 3e087f072ce03c43a9b60522f5d0ca2f + depends: + - aiohttp + - dill >=0.3.0,<0.3.8 + - fsspec >=2021.11.1 + - huggingface_hub >=0.14.0,<1.0.0 + - importlib-metadata + - multiprocess + - numpy >=1.17 + - packaging + - pandas + - pyarrow >=8.0.0 + - python >=3.8.0 + - python-xxhash + - pyyaml >=5.1 + - requests >=2.19.0 + - tqdm >=4.62.1 + license: Apache-2.0 + license_family: Apache + size: 347303 + timestamp: 1691593908658 +- conda: https://conda.anaconda.org/conda-forge/noarch/deprecated-1.2.15-pyhd8ed1ab_1.conda + sha256: a20ebf2c9b02a6eb32412ceb5c4cffaae49417db7e75414a76417538293a9402 + md5: eaef2e94d5bd76f758545d172c1fda67 + depends: + - python >=3.9 + - wrapt <2,>=1.10 + license: MIT + license_family: MIT + size: 14297 + timestamp: 1733662697343 +- conda: https://conda.anaconda.org/conda-forge/noarch/dill-0.3.7-pyhd8ed1ab_0.conda + sha256: 4ff20c6be028be2825235631c45d9e4a75bca1de65f8840c02dfb28ea0137c45 + md5: 5e4f3466526c52bc9af2d2353a1460bd + depends: + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + size: 87553 + timestamp: 1690101185422 +- conda: https://conda.anaconda.org/conda-forge/noarch/dnspython-2.7.0-pyhff2d567_1.conda + sha256: 3ec40ccf63f2450c5e6c7dd579e42fc2e97caf0d8cd4ba24aa434e6fc264eda0 + md5: 5fbd60d61d21b4bd2f9d7a48fe100418 + depends: + - python >=3.9,<4.0.0 + - sniffio + constrains: + - aioquic >=1.0.0 + - wmi >=1.5.1 + - httpx >=0.26.0 + - trio >=0.23 + - cryptography >=43 + - httpcore >=1.0.0 + - idna >=3.7 + - h2 >=4.1.0 + license: ISC + license_family: OTHER + size: 172172 + timestamp: 1733256829961 +- conda: https://conda.anaconda.org/conda-forge/noarch/email-validator-2.2.0-pyhd8ed1ab_1.conda + sha256: b91a19eb78edfc2dbb36de9a67f74ee2416f1b5273dd7327abe53f2dbf864736 + md5: da16dd3b0b71339060cd44cb7110ddf9 + depends: + - dnspython >=2.0.0 + - idna >=2.0.0 + - python >=3.9 + license: Unlicense + size: 44401 + timestamp: 1733300827551 +- conda: https://conda.anaconda.org/conda-forge/noarch/email_validator-2.2.0-hd8ed1ab_1.conda + sha256: e0d0fdf587aa0ed0ff08b2bce3ab355f46687b87b0775bfba01cc80a859ee6a2 + md5: 0794f8807ff2c6f020422cacb1bd7bfa + depends: + - email-validator >=2.2.0,<2.2.1.0a0 + license: Unlicense + size: 6552 + timestamp: 1733300828176 +- conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda + sha256: cbde2c64ec317118fc06b223c5fd87c8a680255e7348dd60e7b292d2e103e701 + md5: a16662747cdeb9abbac74d0057cc976e + depends: + - python >=3.9 + license: MIT and PSF-2.0 + size: 20486 + timestamp: 1733208916977 +- conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.115.6-pyhd8ed1ab_0.conda + sha256: d7826d537c667093c9de96411a09585a8d620c84a830a0195e58e9a0df45f018 + md5: 1b1e0c97830cdf75f1f371bd467ab657 + depends: + - email_validator >=2.0.0 + - fastapi-cli >=0.0.5 + - httpx >=0.23.0 + - jinja2 >=2.11.2 + - pydantic >=1.7.4,!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0 + - python >=3.9 + - python-multipart >=0.0.7 + - starlette >=0.40.0,<0.42.0 + - typing_extensions >=4.8.0 + - uvicorn-standard >=0.12.0 + license: MIT + license_family: MIT + size: 73084 + timestamp: 1733362427885 +- conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.7-pyhd8ed1ab_0.conda + sha256: 300683731013b7221922339cd40430bb3c2ddeeb658fd7e37f5099ffe64e4db0 + md5: d960e0ea9e1c561aa928f6c4439f04c7 + depends: + - python >=3.9 + - rich-toolkit >=0.11.1 + - typer >=0.12.3 + - uvicorn-standard >=0.15.0 + license: MIT + license_family: MIT + size: 15546 + timestamp: 1734302408607 +- conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.16.1-pyhd8ed1ab_1.conda + sha256: 18dca6e2194732df7ebf824abaefe999e4765ebe8e8a061269406ab88fc418b9 + md5: d692e9ba6f92dc51484bf3477e36ce7c + depends: + - python >=3.9 + license: Unlicense + size: 17441 + timestamp: 1733240909987 +- conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda + sha256: b2e3c449ec9d907dd4656cb0dc93e140f447175b125a3824b31368b06c666bb6 + md5: 9ae35c3d96db2c94ce0cef86efdfa2cb + depends: + - libgcc-ng >=12 + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + arch: x86_64 + platform: linux + license: GPL-2.0-only OR FTL + size: 634972 + timestamp: 1694615932610 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.12.1-hf0a5ef3_2.conda + sha256: 7af93030f4407f076dce181062360efac2cd54dce863b5d7765287a6f5382537 + md5: a5ab74c5bd158c3d5532b66d8d83d907 + depends: + - libgcc-ng >=12 + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + arch: aarch64 + platform: linux + license: GPL-2.0-only OR FTL + size: 642092 + timestamp: 1694617858496 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.12.1-hadb7bae_2.conda + sha256: 791673127e037a2dc0eebe122dc4f904cb3f6e635bb888f42cbe1a76b48748d9 + md5: e6085e516a3e304ce41a8ee08b9b89ad + depends: + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + arch: arm64 + platform: osx + license: GPL-2.0-only OR FTL + size: 596430 + timestamp: 1694616332835 +- conda: https://conda.anaconda.org/conda-forge/linux-64/frozenlist-1.5.0-py312h66e93f0_0.conda + sha256: 7e0c12983b20f2816b3712729b5a35ecb7ee152132ca7cf805427c62395ea823 + md5: f98e36c96b2c66d9043187179ddb04f4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 60968 + timestamp: 1729699568442 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/frozenlist-1.5.0-py312hb2c0f52_0.conda + sha256: b0a9ff3e71452eed70877b2f3175d41cd85070da6deac381c5f3f61e1f19bccb + md5: 62fc11b0738ca15e0dd19b60cf280d12 + depends: + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 59967 + timestamp: 1729699642726 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/frozenlist-1.5.0-py312h0bf5046_0.conda + sha256: 44d6d6b332421e621c029fb149f12dba1ccb5ed6ac632e2e807a9d92d6cb2864 + md5: 7960352935cc95ac23883c9b8c97f2ff + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: APACHE + size: 53366 + timestamp: 1729699762631 +- conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2024.12.0-pyhd8ed1ab_0.conda + sha256: 3320970c4604989eadf908397a9475f9e6a96a773c185915111399cbfbe47817 + md5: e041ad4c43ab5e10c74587f95378ebc7 + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + size: 137756 + timestamp: 1734650349242 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda + sha256: 6c33bf0c4d8f418546ba9c250db4e4221040936aef8956353bc764d4877bc39a + md5: d411fc29e338efb48c5fd4576d71d881 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 119654 + timestamp: 1726600001928 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gflags-2.2.2-h5ad3122_1005.conda + sha256: 28fe6b40b20454106d5e4ef6947cf298c13cc72a46347bbc49b563cd3a463bfa + md5: 4ff634d515abbf664774b5e1168a9744 + depends: + - libgcc >=13 + - libstdcxx >=13 + arch: aarch64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 106638 + timestamp: 1726599967617 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/gflags-2.2.2-hf9b8971_1005.conda + sha256: fd56ed8a1dab72ab90d8a8929b6f916a6d9220ca297ff077f8f04c5ed3408e20 + md5: 57a511a5905caa37540eb914dfcbf1fb + depends: + - __osx >=11.0 + - libcxx >=17 + arch: arm64 + platform: osx + license: BSD-3-Clause + license_family: BSD + size: 82090 + timestamp: 1726600145480 +- conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda + sha256: dc824dc1d0aa358e28da2ecbbb9f03d932d976c8dca11214aa1dcdfcbd054ba2 + md5: ff862eebdfeb2fd048ae9dc92510baca + depends: + - gflags >=2.2.2,<2.3.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 143452 + timestamp: 1718284177264 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glog-0.7.1-h468a4a4_0.conda + sha256: 920795d4f775a9f47e91c2223e64847f0b212b3fedc56c137c5889e32efe8ba0 + md5: 08940a32c6ced3703d1412dd37df4f62 + depends: + - gflags >=2.2.2,<2.3.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + arch: aarch64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 145811 + timestamp: 1718284208668 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.7.1-heb240a5_0.conda + sha256: 9fc77de416953aa959039db72bc41bfa4600ae3ff84acad04a7d0c1ab9552602 + md5: fef68d0a95aa5b84b5c1a4f6f3bf40e1 + depends: + - __osx >=11.0 + - gflags >=2.2.2,<2.3.0a0 + - libcxx >=16 + arch: arm64 + platform: osx + license: BSD-3-Clause + license_family: BSD + size: 112215 + timestamp: 1718284365403 +- conda: https://conda.anaconda.org/conda-forge/noarch/googleapis-common-protos-1.66.0-pyhff2d567_0.conda + sha256: d8d19575a827f2c62500949b9536efdd6b5406c9f546a73b6a87ac90b03a5875 + md5: 4861e30ff0cd566ea6fb4593e3b7c22a + depends: + - protobuf >=3.20.2,<6.0.0.dev0,!=3.20.0,!=3.20.1,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5 + - python >=3.9 + license: Apache-2.0 + license_family: APACHE + size: 116522 + timestamp: 1731459019854 +- conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_1.conda + sha256: 622516185a7c740d5c7f27016d0c15b45782c1501e5611deec63fd70344ce7c8 + md5: 7ee49e89531c0dcbba9466f6d115d585 + depends: + - python >=3.9 + - typing_extensions + license: MIT + license_family: MIT + size: 51846 + timestamp: 1733327599467 +- conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda + sha256: 843ddad410c370672a8250470697027618f104153612439076d4d7b91eeb7b5c + md5: 825927dc7b0f287ef8d4d0011bb113b1 + depends: + - hpack >=4.0,<5 + - hyperframe >=6.0,<7 + - python >=3.9 + license: MIT + license_family: MIT + size: 52000 + timestamp: 1733298867359 +- conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda + sha256: ec89b7e5b8aa2f0219f666084446e1fb7b54545861e9caa892acb24d125761b5 + md5: 2aa5ff7fa34a81b9196532c84c10d865 + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 29412 + timestamp: 1733299296857 +- conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.7-pyh29332c3_1.conda + sha256: c84d012a245171f3ed666a8bf9319580c269b7843ffa79f26468842da3abd5df + md5: 2ca8e6dbc86525c8b95e3c0ffa26442e + depends: + - python >=3.8 + - h11 >=0.13,<0.15 + - h2 >=3,<5 + - sniffio 1.* + - anyio >=3.0,<5.0 + - certifi + license: BSD-3-Clause + license_family: BSD + size: 48959 + timestamp: 1731707562362 +- conda: https://conda.anaconda.org/conda-forge/linux-64/httptools-0.6.4-py312h66e93f0_0.conda + sha256: 621e7e050b888e5239d33e37ea72d6419f8367e5babcad38b755586f20264796 + md5: 8b1160b32557290b64d5be68db3d996d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 101872 + timestamp: 1732707756745 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/httptools-0.6.4-py312hb2c0f52_0.conda + sha256: 0bd1f30224af142711d11033a7469ae402a1147143f399f7341bbc1d8178c722 + md5: 5e70a6de59352f9a52e9caa7f3447390 + depends: + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 101255 + timestamp: 1732707891645 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/httptools-0.6.4-py312hea69d52_0.conda + sha256: 5e93cda79e32e8c0039e05ea1939e688da336187dab025f699b42ef529e848be + md5: e1747a8e8d2aca5499aaea9993bf31ff + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 85623 + timestamp: 1732707871414 +- conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + sha256: cd0f1de3697b252df95f98383e9edb1d00386bfdd03fdf607fa42fe5fcb09950 + md5: d6989ead454181f4f9bc987d3dc4e285 + depends: + - anyio + - certifi + - httpcore 1.* + - idna + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + size: 63082 + timestamp: 1733663449209 +- conda: https://conda.anaconda.org/conda-forge/noarch/huggingface_hub-0.27.1-pyhd8ed1ab_0.conda + sha256: 4597d7aa720f4acdddacc27b3f9e8d4336cb79477c53aee2d7ab96d136169cdb + md5: 8c9a53ecd0c3c278efbdac567dd12ed0 + depends: + - filelock + - fsspec >=2023.5.0 + - packaging >=20.9 + - python >=3.9 + - pyyaml >=5.1 + - requests + - tqdm >=4.42.1 + - typing-extensions >=3.7.4.3 + - typing_extensions >=3.7.4.3 + license: Apache-2.0 + license_family: APACHE + size: 278363 + timestamp: 1736350219225 +- conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda + sha256: e91c6ef09d076e1d9a02819cd00fa7ee18ecf30cdd667605c853980216584d1b + md5: 566e75c90c1d0c8c459eb0ad9833dc7a + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 17239 + timestamp: 1733298862681 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda + sha256: 813298f2e54ef087dbfc9cc2e56e08ded41de65cff34c639cc8ba4e27e4540c9 + md5: 268203e8b983fddb6412b36f2024e75c + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 12282786 + timestamp: 1720853454991 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620 + md5: 5eb22c1d7b3fc4abb50d92d621583137 + depends: + - __osx >=11.0 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 11857802 + timestamp: 1720853997952 +- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda + sha256: d7a472c9fd479e2e8dcb83fb8d433fce971ea369d704ece380e876f9c3494e87 + md5: 39a4f67be3286c86d696df570b1201b7 + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + size: 49765 + timestamp: 1733211921194 +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_1.conda + sha256: 13766b88fc5b23581530d3a0287c0c58ad82f60401afefab283bf158d2be55a9 + md5: 315607a3030ad5d5227e76e0733798ff + depends: + - python >=3.9 + - zipp >=0.5 + license: Apache-2.0 + license_family: APACHE + size: 28623 + timestamp: 1733223207185 +- conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda + sha256: 98977694b9ecaa3218662f843425f39501f81973c450f995eec68f1803ed71c3 + md5: 2752a6ed44105bfb18c9bef1177d9dcd + depends: + - markupsafe >=2.0 + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + size: 112561 + timestamp: 1734824044952 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + sha256: 19d8bd5bb2fde910ec59e081eeb59529491995ce0d653a5209366611023a0b3a + md5: 4ebae00eae9705b0c3d6d1018a81d047 + depends: + - importlib-metadata >=4.8.3 + - jupyter_core >=4.12,!=5.0.* + - python >=3.9 + - python-dateutil >=2.8.2 + - pyzmq >=23.0 + - tornado >=6.2 + - traitlets >=5.3 + license: BSD-3-Clause + license_family: BSD + size: 106342 + timestamp: 1733441040958 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda + sha256: 732b1e8536bc22a5a174baa79842d79db2f4956d90293dd82dc1b3f6099bcccd + md5: 0a2980dada0dd7fd0998f0342308b1b1 + depends: + - __unix + - platformdirs >=2.5 + - python >=3.8 + - traitlets >=5.3 + license: BSD-3-Clause + license_family: BSD + size: 57671 + timestamp: 1727163547058 +- conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 + sha256: 150c05a6e538610ca7c43beb3a40d65c90537497a4f6a5f4d15ec0451b6f5ebb + md5: 30186d27e2c9fa62b45fb1476b7200e3 + depends: + - libgcc-ng >=10.3.0 + arch: x86_64 + platform: linux + license: LGPL-2.1-or-later + size: 117831 + timestamp: 1646151697040 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.1-h4e544f5_0.tar.bz2 + sha256: 6d4233d97a9b38acbb26e1268bcf8c10a8e79c2aed7e5a385ec3769967e3e65b + md5: 1f24853e59c68892452ef94ddd8afd4b + depends: + - libgcc-ng >=10.3.0 + arch: aarch64 + platform: linux + license: LGPL-2.1-or-later + size: 112327 + timestamp: 1646166857935 +- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + sha256: 99df692f7a8a5c27cd14b5fb1374ee55e756631b9c3d659ed3ee60830249b238 + md5: 3f43953b7d3fb3aaa1d0d0723d91e368 + depends: + - keyutils >=1.6.1,<2.0a0 + - libedit >=3.1.20191231,<3.2.0a0 + - libedit >=3.1.20191231,<4.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - openssl >=3.3.1,<4.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 1370023 + timestamp: 1719463201255 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda + sha256: 0ec272afcf7ea7fbf007e07a3b4678384b7da4047348107b2ae02630a570a815 + md5: 29c10432a2ca1472b53f299ffb2ffa37 + depends: + - keyutils >=1.6.1,<2.0a0 + - libedit >=3.1.20191231,<3.2.0a0 + - libedit >=3.1.20191231,<4.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - openssl >=3.3.1,<4.0a0 + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 1474620 + timestamp: 1719463205834 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda + sha256: 4442f957c3c77d69d9da3521268cad5d54c9033f1a73f99cde0a3658937b159b + md5: c6dc8a0fdec13a0565936655c33069a1 + depends: + - __osx >=11.0 + - libcxx >=16 + - libedit >=3.1.20191231,<3.2.0a0 + - libedit >=3.1.20191231,<4.0a0 + - openssl >=3.3.1,<4.0a0 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 1155530 + timestamp: 1719463474401 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda + sha256: 5c878d104b461b7ef922abe6320711c0d01772f4cd55de18b674f88547870041 + md5: 51bb7010fc86f70eee639b4bb7a894f5 + depends: + - libgcc-ng >=12 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 245247 + timestamp: 1701647787198 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.16-h922389a_0.conda + sha256: be4847b1014d3cbbc524a53bdbf66182f86125775020563e11d914c8468dd97d + md5: ffdd8267a04c515e7ce69c727b051414 + depends: + - libgcc-ng >=12 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 296219 + timestamp: 1701647961116 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.16-ha0e7c42_0.conda + sha256: 151e0c84feb7e0747fabcc85006b8973b22f5abbc3af76a9add0b0ef0320ebe4 + md5: 66f6c134e76fe13cce8a9ea5814b5dd5 + depends: + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 211959 + timestamp: 1701647962657 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda + sha256: 7c91cea91b13f4314d125d1bedb9d03a29ebbd5080ccdea70260363424646dbe + md5: 048b02e3962f066da18efe3a21b77672 + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - binutils_impl_linux-64 2.43 + arch: x86_64 + platform: linux + license: GPL-3.0-only + license_family: GPL + size: 669211 + timestamp: 1729655358674 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_2.conda + sha256: 80ec7e8f006196808fac5bd4b3773a652847f97bbf08044cd87731424ac64f8b + md5: fcbde5ea19d55468953bf588770c0501 + constrains: + - binutils_impl_linux-aarch64 2.43 + arch: aarch64 + platform: linux + license: GPL-3.0-only + license_family: GPL + size: 698245 + timestamp: 1729655345825 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 + sha256: cb55f36dcd898203927133280ae1dc643368af041a48bcf7c026acb7c47b0c12 + md5: 76bbff344f0134279f225174e9064c8f + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 281798 + timestamp: 1657977462600 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.0.0-h4de3ea5_0.tar.bz2 + sha256: 2d09ef9b7796d83364957e420b41c32d94e628c3f0520b61c332518a7b5cd586 + md5: 1a0ffc65e03ce81559dbcb0695ad1476 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 262096 + timestamp: 1657978241894 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 + sha256: 6f068bb53dfb6147d3147d981bb851bb5477e769407ad4e6a68edf482fdcb958 + md5: de462d5aacda3b30721b512c5da4e742 + depends: + - libcxx >=13.0.1 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: Apache + size: 215721 + timestamp: 1657977558796 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20240722.0-cxx17_hbbce691_4.conda + sha256: 143a586aa67d50622ef703de57b9d43f44945836d6568e0e7aa174bd8c45e0d4 + md5: 488f260ccda0afaf08acb286db439c2f + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - libabseil-static =20240722.0=cxx17* + - abseil-cpp =20240722.0 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 1311599 + timestamp: 1736008414161 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20240722.0-cxx17_h18dbdb1_4.conda + sha256: bb6c5fb3b8de5f90735c5252b57efb3c268ee222c755569dac18065f05147670 + md5: 633b9fe454ffea2aaf29e191d946a83b + depends: + - libgcc >=13 + - libstdcxx >=13 + constrains: + - abseil-cpp =20240722.0 + - libabseil-static =20240722.0=cxx17* + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 1334844 + timestamp: 1736008472455 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20240722.0-cxx17_h07bc746_4.conda + sha256: 05fa5e5e908962b9c5aba95f962e2ca81d9599c4715aebe5e4ddb72b309d1770 + md5: c2d95bd7aa8d564a9bd7eca5e571a5b3 + depends: + - __osx >=11.0 + - libcxx >=18 + constrains: + - libabseil-static =20240722.0=cxx17* + - abseil-cpp =20240722.0 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: Apache + size: 1178260 + timestamp: 1736008642885 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-18.1.0-h9d9f30d_8_cpu.conda + build_number: 8 + sha256: f6c72ce82d145cb94a1131b68547b88056fb48158a382f9ce763286fce53ee65 + md5: 1c9caae53b14a385b59e87687adad2d6 + depends: + - __glibc >=2.17,<3.0.a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 + - aws-sdk-cpp >=1.11.458,<1.11.459.0a0 + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - azure-identity-cpp >=1.10.0,<1.10.1.0a0 + - azure-storage-blobs-cpp >=12.13.0,<12.13.1.0a0 + - azure-storage-files-datalake-cpp >=12.12.0,<12.12.1.0a0 + - bzip2 >=1.0.8,<2.0a0 + - gflags >=2.2.2,<2.3.0a0 + - glog >=0.7.1,<0.8.0a0 + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libbrotlidec >=1.1.0,<1.2.0a0 + - libbrotlienc >=1.1.0,<1.2.0a0 + - libgcc >=13 + - libgoogle-cloud >=2.33.0,<2.34.0a0 + - libgoogle-cloud-storage >=2.33.0,<2.34.0a0 + - libre2-11 >=2024.7.2 + - libstdcxx >=13 + - libutf8proc >=2.9.0,<2.10.0a0 + - libzlib >=1.3.1,<2.0a0 + - lz4-c >=1.10.0,<1.11.0a0 + - orc >=2.0.3,<2.0.4.0a0 + - re2 + - snappy >=1.2.1,<1.3.0a0 + - zstd >=1.5.6,<1.6.0a0 + constrains: + - arrow-cpp <0.0a0 + - parquet-cpp <0.0a0 + - apache-arrow-proc =*=cpu + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 8801586 + timestamp: 1736610546493 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-18.1.0-h47f80e1_8_cpu.conda + build_number: 8 + sha256: bf381dfa84e94ffce715c46352dd99f6f6ace69859b0efb822500f8882be429a + md5: daceef1881b4ddc72bb5b225a122c633 + depends: + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 + - aws-sdk-cpp >=1.11.458,<1.11.459.0a0 + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - azure-identity-cpp >=1.10.0,<1.10.1.0a0 + - azure-storage-blobs-cpp >=12.13.0,<12.13.1.0a0 + - azure-storage-files-datalake-cpp >=12.12.0,<12.12.1.0a0 + - bzip2 >=1.0.8,<2.0a0 + - gflags >=2.2.2,<2.3.0a0 + - glog >=0.7.1,<0.8.0a0 + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libbrotlidec >=1.1.0,<1.2.0a0 + - libbrotlienc >=1.1.0,<1.2.0a0 + - libgcc >=13 + - libgoogle-cloud >=2.33.0,<2.34.0a0 + - libgoogle-cloud-storage >=2.33.0,<2.34.0a0 + - libre2-11 >=2024.7.2 + - libstdcxx >=13 + - libutf8proc >=2.9.0,<2.10.0a0 + - libzlib >=1.3.1,<2.0a0 + - lz4-c >=1.10.0,<1.11.0a0 + - orc >=2.0.3,<2.0.4.0a0 + - re2 + - snappy >=1.2.1,<1.3.0a0 + - zstd >=1.5.6,<1.6.0a0 + constrains: + - arrow-cpp <0.0a0 + - apache-arrow-proc =*=cpu + - parquet-cpp <0.0a0 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 8045923 + timestamp: 1736611764958 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-18.1.0-hf3eb8e5_8_cpu.conda + build_number: 8 + sha256: 766e46b45520773db93ee1a91951cc135a85544bba738e7b378d31f16097753f + md5: fdc79871e6c243b819497337215416d9 + depends: + - __osx >=11.0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 + - aws-sdk-cpp >=1.11.458,<1.11.459.0a0 + - azure-core-cpp >=1.14.0,<1.14.1.0a0 + - azure-identity-cpp >=1.10.0,<1.10.1.0a0 + - azure-storage-blobs-cpp >=12.13.0,<12.13.1.0a0 + - azure-storage-files-datalake-cpp >=12.12.0,<12.12.1.0a0 + - bzip2 >=1.0.8,<2.0a0 + - glog >=0.7.1,<0.8.0a0 + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libbrotlidec >=1.1.0,<1.2.0a0 + - libbrotlienc >=1.1.0,<1.2.0a0 + - libcxx >=18 + - libgoogle-cloud >=2.33.0,<2.34.0a0 + - libgoogle-cloud-storage >=2.33.0,<2.34.0a0 + - libre2-11 >=2024.7.2 + - libutf8proc >=2.9.0,<2.10.0a0 + - libzlib >=1.3.1,<2.0a0 + - lz4-c >=1.10.0,<1.11.0a0 + - orc >=2.0.3,<2.0.4.0a0 + - re2 + - snappy >=1.2.1,<1.3.0a0 + - zstd >=1.5.6,<1.6.0a0 + constrains: + - arrow-cpp <0.0a0 + - parquet-cpp <0.0a0 + - apache-arrow-proc =*=cpu + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: APACHE + size: 5497383 + timestamp: 1736608604724 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_8_cpu.conda + build_number: 8 + sha256: 126a6e78199311d99e38b9d633ce3e0290795ac68ce3ee8a9b91436c85c4095d + md5: 544759904898499f634f8f88a9907f88 + depends: + - __glibc >=2.17,<3.0.a0 + - libarrow 18.1.0 h9d9f30d_8_cpu + - libgcc >=13 + - libstdcxx >=13 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 611558 + timestamp: 1736610592458 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-acero-18.1.0-h3b568fd_8_cpu.conda + build_number: 8 + sha256: c94844ab1d8fafe17775161283bd1fe7ab1f93f660fc5ba0c01bd33fe3d21eaf + md5: 7a8e6a363d2f39a2f3df3f181d12692d + depends: + - libarrow 18.1.0 h47f80e1_8_cpu + - libgcc >=13 + - libstdcxx >=13 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 579798 + timestamp: 1736611846905 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_8_cpu.conda + build_number: 8 + sha256: 29196dc6b2e4488f98bd8950de6333efe5d1a9d0cc62e186694946766185475e + md5: 8db96829f8e427167f450c7467a1ba44 + depends: + - __osx >=11.0 + - libarrow 18.1.0 hf3eb8e5_8_cpu + - libcxx >=18 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: APACHE + size: 484442 + timestamp: 1736608695654 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_8_cpu.conda + build_number: 8 + sha256: fe50edf030b5ccbadec2bf8f90d4cdf32d63ec52ba26233fc2c8bfbe43df3b15 + md5: 894a5ed78728b77c997fefeee222ac4d + depends: + - __glibc >=2.17,<3.0.a0 + - libarrow 18.1.0 h9d9f30d_8_cpu + - libarrow-acero 18.1.0 hcb10f89_8_cpu + - libgcc >=13 + - libparquet 18.1.0 h081d1f1_8_cpu + - libstdcxx >=13 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 588032 + timestamp: 1736610711976 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-dataset-18.1.0-h3b568fd_8_cpu.conda + build_number: 8 + sha256: bb87d8e633074c9759d93abb277d31314dc66fad741253b48e8265e186228c5b + md5: 11856da892b919cc27bd62638d701c65 + depends: + - libarrow 18.1.0 h47f80e1_8_cpu + - libarrow-acero 18.1.0 h3b568fd_8_cpu + - libgcc >=13 + - libparquet 18.1.0 hfc78867_8_cpu + - libstdcxx >=13 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 560571 + timestamp: 1736611941995 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_8_cpu.conda + build_number: 8 + sha256: bff2d39e418eadab8c522a536449ac90f070dd8e83e2bd5e67a9c3eb8ecf712f + md5: 7b3736f49b3ba299b7799aeb448cb830 + depends: + - __osx >=11.0 + - libarrow 18.1.0 hf3eb8e5_8_cpu + - libarrow-acero 18.1.0 hf07054f_8_cpu + - libcxx >=18 + - libparquet 18.1.0 h636d7b7_8_cpu + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: APACHE + size: 491001 + timestamp: 1736609758514 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_8_cpu.conda + build_number: 8 + sha256: dca372e27724904577315b8db3793e027a5c152a485e505e630a57b15634cd85 + md5: 46eaf81238da6f3ffab1f3ffdcee382e + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libarrow 18.1.0 h9d9f30d_8_cpu + - libarrow-acero 18.1.0 hcb10f89_8_cpu + - libarrow-dataset 18.1.0 hcb10f89_8_cpu + - libgcc >=13 + - libprotobuf >=5.28.3,<5.28.4.0a0 + - libstdcxx >=13 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 521707 + timestamp: 1736610765240 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-substrait-18.1.0-h1e9d426_8_cpu.conda + build_number: 8 + sha256: 1896ea00da28e10670f7ba51bb543e68a87f717e9f5692fee44268f1a13d9eee + md5: e7dc0209e065a2b51f19848cefa4b1ab + depends: + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libarrow 18.1.0 h47f80e1_8_cpu + - libarrow-acero 18.1.0 h3b568fd_8_cpu + - libarrow-dataset 18.1.0 h3b568fd_8_cpu + - libgcc >=13 + - libprotobuf >=5.28.3,<5.28.4.0a0 + - libstdcxx >=13 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 517189 + timestamp: 1736611989417 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_8_cpu.conda + build_number: 8 + sha256: ae52d926ebfc8edb0728824f2918a825d39bd85a4ef27fe2b73656cfecdd7c69 + md5: f67eb19d22ba355cced8c86073ad49b1 + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libarrow 18.1.0 hf3eb8e5_8_cpu + - libarrow-acero 18.1.0 hf07054f_8_cpu + - libarrow-dataset 18.1.0 hf07054f_8_cpu + - libcxx >=18 + - libprotobuf >=5.28.3,<5.28.4.0a0 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: APACHE + size: 452161 + timestamp: 1736609917123 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-26_linux64_openblas.conda + build_number: 26 + sha256: 30bd658682b124243f8e52d8edf8a19e7be1bc31e4fe4baec30a64002dc8cd0c + md5: ac52800af2e0c0e7dac770b435ce768a + depends: + - libopenblas >=0.3.28,<0.3.29.0a0 + - libopenblas >=0.3.28,<1.0a0 + constrains: + - libcblas 3.9.0 26_linux64_openblas + - liblapack 3.9.0 26_linux64_openblas + - liblapacke 3.9.0 26_linux64_openblas + - blas * openblas + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 16393 + timestamp: 1734432564346 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.9.0-26_linuxaarch64_openblas.conda + build_number: 26 + sha256: df6d8ee34d45cf35609ecdd55c1ff03e32e0cd87ae41ebe4ef3747a8e09ead4d + md5: 8d900b7079a00969d70305e9aad550b7 + depends: + - libopenblas >=0.3.28,<0.3.29.0a0 + - libopenblas >=0.3.28,<1.0a0 + constrains: + - blas * openblas + - liblapacke 3.9.0 26_linuxaarch64_openblas + - libcblas 3.9.0 26_linuxaarch64_openblas + - liblapack 3.9.0 26_linuxaarch64_openblas + arch: aarch64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 16477 + timestamp: 1734432576699 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-26_osxarm64_openblas.conda + build_number: 26 + sha256: 597f9c3779caa979c8c6abbb3ba8c7191b84e1a910d6b0d10e5faf35284c450c + md5: 21be102c9ae80a67ba7de23b129aa7f6 + depends: + - libopenblas >=0.3.28,<0.3.29.0a0 + - libopenblas >=0.3.28,<1.0a0 + constrains: + - liblapack 3.9.0 26_osxarm64_openblas + - liblapacke 3.9.0 26_osxarm64_openblas + - libcblas 3.9.0 26_osxarm64_openblas + - blas * openblas + arch: arm64 + platform: osx + license: BSD-3-Clause + license_family: BSD + size: 16714 + timestamp: 1734433054681 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda + sha256: d9db2de60ea917298e658143354a530e9ca5f9c63471c65cf47ab39fd2f429e3 + md5: 41b599ed2b02abcfdd84302bff174b23 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 68851 + timestamp: 1725267660471 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlicommon-1.1.0-h86ecc28_2.conda + sha256: 64112af913974b309d67fd342e065fd184347043a6387933b3db796778a28019 + md5: 3ee026955c688f551a9999840cff4c67 + depends: + - libgcc >=13 + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 68982 + timestamp: 1725267774142 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.1.0-hd74edd7_2.conda + sha256: 839dacb741bdbb25e58f42088a2001b649f4f12195aeb700b5ddfca3267749e5 + md5: d0bf1dff146b799b319ea0434b93f779 + depends: + - __osx >=11.0 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 68426 + timestamp: 1725267943211 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda + sha256: 2892d512cad096cb03f1b66361deeab58b64e15ba525d6592bb6d609e7045edf + md5: 9566f0bd264fbd463002e759b8a82401 + depends: + - __glibc >=2.17,<3.0.a0 + - libbrotlicommon 1.1.0 hb9d3cd8_2 + - libgcc >=13 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 32696 + timestamp: 1725267669305 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlidec-1.1.0-h86ecc28_2.conda + sha256: 94c808d9ca3eb6ef30976a9843e27f027cf3a1e84e8c6835cbb696b7bdb35c4c + md5: e64d0f3b59c7c4047446b97a8624a72d + depends: + - libbrotlicommon 1.1.0 h86ecc28_2 + - libgcc >=13 + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 31708 + timestamp: 1725267783442 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.1.0-hd74edd7_2.conda + sha256: 6c6862eb274f21a7c0b60e5345467a12e6dda8b9af4438c66d496a2c1a538264 + md5: 55e66e68ce55523a6811633dd1ac74e2 + depends: + - __osx >=11.0 + - libbrotlicommon 1.1.0 hd74edd7_2 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 28378 + timestamp: 1725267980316 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda + sha256: 779f58174e99de3600e939fa46eddb453ec5d3c60bb46cdaa8b4c127224dbf29 + md5: 06f70867945ea6a84d35836af780f1de + depends: + - __glibc >=2.17,<3.0.a0 + - libbrotlicommon 1.1.0 hb9d3cd8_2 + - libgcc >=13 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 281750 + timestamp: 1725267679782 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlienc-1.1.0-h86ecc28_2.conda + sha256: 41385e17bc73834b235c5aff12d6d82eccb534acb3c30986996f9dad92a0d54c + md5: 0e9bd365480c72b25c71a448257b537d + depends: + - libbrotlicommon 1.1.0 h86ecc28_2 + - libgcc >=13 + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 290230 + timestamp: 1725267792697 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.1.0-hd74edd7_2.conda + sha256: eeb1eb0d58b9d02bc1b98dc0a058f104ab168eb2f7d1c7bfa0570a12cfcdb7b7 + md5: 4f3a434504c67b2c42565c0b85c1885c + depends: + - __osx >=11.0 + - libbrotlicommon 1.1.0 hd74edd7_2 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 279644 + timestamp: 1725268003553 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-26_linux64_openblas.conda + build_number: 26 + sha256: 9c74e536c9bc868e356ffd43f81c2cb398aec84b40fcadc312315b164a5500ee + md5: ebcc5f37a435aa3c19640533c82f8d76 + depends: + - libblas 3.9.0 26_linux64_openblas + constrains: + - liblapack 3.9.0 26_linux64_openblas + - liblapacke 3.9.0 26_linux64_openblas + - blas * openblas + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 16336 + timestamp: 1734432570482 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.9.0-26_linuxaarch64_openblas.conda + build_number: 26 + sha256: 521e78be0c4170f229c43e1a6c94337a72db3ebcbe6e5960f8413aa438dcb8f9 + md5: d77f943ae4083f3aeddca698f2d28262 + depends: + - libblas 3.9.0 26_linuxaarch64_openblas + constrains: + - blas * openblas + - liblapacke 3.9.0 26_linuxaarch64_openblas + - liblapack 3.9.0 26_linuxaarch64_openblas + arch: aarch64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 16398 + timestamp: 1734432580937 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-26_osxarm64_openblas.conda + build_number: 26 + sha256: 27a29ef6b2fd2179bc3a0bb9db351f078ba140ca10485dca147c399639f84c93 + md5: a0e9980fe12d42f6d0c0ec009f67e948 + depends: + - libblas 3.9.0 26_osxarm64_openblas + constrains: + - liblapack 3.9.0 26_osxarm64_openblas + - liblapacke 3.9.0 26_osxarm64_openblas + - blas * openblas + arch: arm64 + platform: osx + license: BSD-3-Clause + license_family: BSD + size: 16628 + timestamp: 1734433061517 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 + sha256: fd1d153962764433fe6233f34a72cdeed5dcf8a883a85769e8295ce940b5b0c5 + md5: c965a5aa0d5c1c37ffc62dff36e28400 + depends: + - libgcc-ng >=9.4.0 + - libstdcxx-ng >=9.4.0 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 20440 + timestamp: 1633683576494 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcrc32c-1.1.2-h01db608_0.tar.bz2 + sha256: b8b8c57a87da86b3ea24280fd6aa8efaf92f4e684b606bf2db5d3cb06ffbe2ea + md5: 268ee639c17ada0002fb04dd21816cc2 + depends: + - libgcc-ng >=9.4.0 + - libstdcxx-ng >=9.4.0 + arch: aarch64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 18669 + timestamp: 1633683724891 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 + sha256: 58477b67cc719060b5b069ba57161e20ba69b8695d154a719cb4b60caf577929 + md5: 32bd82a6a625ea6ce090a81c3d34edeb + depends: + - libcxx >=11.1.0 + arch: arm64 + platform: osx + license: BSD-3-Clause + license_family: BSD + size: 18765 + timestamp: 1633683992603 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.11.1-h332b0f4_0.conda + sha256: 3cd4075b2a7b5562e46c8ec626f6f9ca57aeecaa94ff7df57eca26daa94c9906 + md5: 2b3e0081006dc21e8bf53a91c83a055c + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.21.3,<1.22.0a0 + - libgcc >=13 + - libnghttp2 >=1.64.0,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.4.0,<4.0a0 + - zstd >=1.5.6,<1.6.0a0 + arch: x86_64 + platform: linux + license: curl + license_family: MIT + size: 423011 + timestamp: 1733999897624 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcurl-8.11.1-h6702fde_0.conda + sha256: 9fc65d21a58f4aad1bc39dfb94a178893aeb035850c5cf0ed9736674279f390b + md5: 7dec1cd271c403d1636bda5aa388a55d + depends: + - krb5 >=1.21.3,<1.22.0a0 + - libgcc >=13 + - libnghttp2 >=1.64.0,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.4.0,<4.0a0 + - zstd >=1.5.6,<1.6.0a0 + arch: aarch64 + platform: linux + license: curl + license_family: MIT + size: 440737 + timestamp: 1733999835504 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.11.1-h73640d1_0.conda + sha256: f47c35938144c23278987c7d12096f6a42d7c850ffc277222b032073412383b6 + md5: 46d7524cabfdd199bffe63f8f19a552b + depends: + - __osx >=11.0 + - krb5 >=1.21.3,<1.22.0a0 + - libnghttp2 >=1.64.0,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.4.0,<4.0a0 + - zstd >=1.5.6,<1.6.0a0 + arch: arm64 + platform: osx + license: curl + license_family: MIT + size: 385098 + timestamp: 1734000160270 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda + sha256: 776092346da87a2a23502e14d91eb0c32699c4a1522b7331537bd1c3751dcff5 + md5: 5b3e1610ff8bd5443476b91d618f5b77 + depends: + - __osx >=11.0 + arch: arm64 + platform: osx + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 523505 + timestamp: 1736877862502 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.23-h4ddbbb0_0.conda + sha256: 511d801626d02f4247a04fff957cc6e9ec4cc7e8622bd9acd076bcdc5de5fe66 + md5: 8dfae1d2e74767e9ce36d5fa0d8605db + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 72255 + timestamp: 1734373823254 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.23-h5e3c512_0.conda + sha256: 959419d87cd2b789a9055db95704c614f31aeb70bef7949fa2f734122a3a2863 + md5: 7e7ca2607b11b180120cefc2354fc0cb + depends: + - libgcc >=13 + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 69862 + timestamp: 1734373858306 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.23-hec38601_0.conda + sha256: 887c02deaed6d583459eba6367023e36d8761085b2f7126e389424f57155da53 + md5: 1d8b9588be14e71df38c525767a1ac30 + depends: + - __osx >=11.0 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 54132 + timestamp: 1734373971372 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20240808-pl5321h7949ede_0.conda + sha256: 4d0d69ddf9cc7d724a1ccf3a9852e44c8aea9825692582bac2c4e8d21ec95ccd + md5: 8247f80f3dc464d9322e85007e307fe8 + depends: + - ncurses + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - ncurses >=6.5,<7.0a0 + arch: x86_64 + platform: linux + license: BSD-2-Clause + license_family: BSD + size: 134657 + timestamp: 1736191912705 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20240808-pl5321h976ea20_0.conda + sha256: 031daea98cf278f858b7957ad5dc475f1b5673cd5e718850529401ced64cef2c + md5: 0be40129d3dd1a152fff29a85f0785d0 + depends: + - ncurses + - libgcc >=13 + - ncurses >=6.5,<7.0a0 + arch: aarch64 + platform: linux + license: BSD-2-Clause + license_family: BSD + size: 148120 + timestamp: 1736192137151 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20240808-pl5321hafb1f1b_0.conda + sha256: fb934d7a03279ec8eae4bf1913ac9058fcf6fed35290d8ffa6e04157f396a3b1 + md5: af89aa84ffb5ee551ce0c137b951a3b5 + depends: + - ncurses + - __osx >=11.0 + - ncurses >=6.5,<7.0a0 + arch: arm64 + platform: osx + license: BSD-2-Clause + license_family: BSD + size: 107634 + timestamp: 1736192034117 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4 + md5: 172bf1cd1ff8629f2b1179945ed45055 + depends: + - libgcc-ng >=12 + arch: x86_64 + platform: linux + license: BSD-2-Clause + license_family: BSD + size: 112766 + timestamp: 1702146165126 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libev-4.33-h31becfc_2.conda + sha256: 973af77e297f1955dd1f69c2cbdc5ab9dfc88388a5576cd152cda178af0fd006 + md5: a9a13cb143bbaa477b1ebaefbe47a302 + depends: + - libgcc-ng >=12 + arch: aarch64 + platform: linux + license: BSD-2-Clause + license_family: BSD + size: 115123 + timestamp: 1702146237623 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + sha256: 95cecb3902fbe0399c3a7e67a5bed1db813e5ab0e22f4023a5e0f722f2cc214f + md5: 36d33e440c31857372a72137f78bacf5 + arch: arm64 + platform: osx + license: BSD-2-Clause + license_family: BSD + size: 107458 + timestamp: 1702146414478 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda + sha256: 2e14399d81fb348e9d231a82ca4d816bf855206923759b69ad006ba482764131 + md5: a1cfcc585f0c42bf8d5546bb1dfb668d + depends: + - libgcc-ng >=12 + - openssl >=3.1.1,<4.0a0 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 427426 + timestamp: 1685725977222 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libevent-2.1.12-h4ba1bb4_1.conda + sha256: 01333cc7d6e6985dd5700b43660d90e9e58049182017fd24862088ecbe1458e4 + md5: 96ae6083cd1ac9f6bc81631ac835b317 + depends: + - libgcc-ng >=12 + - openssl >=3.1.1,<4.0a0 + arch: aarch64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 438992 + timestamp: 1685726046519 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libevent-2.1.12-h2757513_1.conda + sha256: 8c136d7586259bb5c0d2b913aaadc5b9737787ae4f40e3ad1beaf96c80b919b7 + md5: 1a109764bff3bdc7bdd84088347d71dc + depends: + - openssl >=3.1.1,<4.0a0 + arch: arm64 + platform: osx + license: BSD-3-Clause + license_family: BSD + size: 368167 + timestamp: 1685726248899 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.4-h5888daf_0.conda + sha256: 56541b98447b58e52d824bd59d6382d609e11de1f8adf20b23143e353d2b8d26 + md5: db833e03127376d461e1e13e76f09b6c + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - expat 2.6.4.* + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 73304 + timestamp: 1730967041968 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.6.4-h5ad3122_0.conda + sha256: f42e758009ba9db90d1fe7992bc3e60d0c52f71fb20923375d2c44ae69a5a2b3 + md5: f1b3fab36861b3ce945a13f0dfdfc688 + depends: + - libgcc >=13 + constrains: + - expat 2.6.4.* + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 72345 + timestamp: 1730967203789 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda + sha256: e42ab5ace927ee7c84e3f0f7d813671e1cf3529f5f06ee5899606630498c2745 + md5: 38d2656dd914feb0cab8c629370768bf + depends: + - __osx >=11.0 + constrains: + - expat 2.6.4.* + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 64693 + timestamp: 1730967175868 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + sha256: ab6e9856c21709b7b517e940ae7028ae0737546122f83c2aa5d692860c3b149e + md5: d645c6d2ac96843a2bfaccd2d62b3ac3 + depends: + - libgcc-ng >=9.4.0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 58292 + timestamp: 1636488182923 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.2-h3557bc0_5.tar.bz2 + sha256: 7e9258a102480757fe3faeb225a3ca04dffd10fecd2a958c65cdb4cdf75f2c3c + md5: dddd85f4d52121fab0a8b099c5e06501 + depends: + - libgcc-ng >=9.4.0 + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 59450 + timestamp: 1636488255090 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + sha256: 41b3d13efb775e340e4dba549ab5c029611ea6918703096b2eaa9c015c0750ca + md5: 086914b672be056eb70fd4285b6783b6 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 39020 + timestamp: 1636488587153 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + sha256: 53eb8a79365e58849e7b1a068d31f4f9e718dc938d6f2c03e960345739a03569 + md5: 3cb76c3f10d3bc7f1105b2fc9db984df + depends: + - _libgcc_mutex 0.1 conda_forge + - _openmp_mutex >=4.5 + constrains: + - libgomp 14.2.0 h77fa898_1 + - libgcc-ng ==14.2.0=*_1 + arch: x86_64 + platform: linux + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 848745 + timestamp: 1729027721139 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-14.2.0-he277a41_1.conda + sha256: 5d56757ccad208c79214395b00d006d8d18929a4ba49c47bd9460789a7620943 + md5: 511b511c5445e324066c3377481bcab8 + depends: + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==14.2.0=*_1 + - libgomp 14.2.0 he277a41_1 + arch: aarch64 + platform: linux + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 535243 + timestamp: 1729089435134 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + sha256: 3a76969c80e9af8b6e7a55090088bc41da4cffcde9e2c71b17f44d37b7cb87f7 + md5: e39480b9ca41323497b05492a63bc35b + depends: + - libgcc 14.2.0 h77fa898_1 + arch: x86_64 + platform: linux + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 54142 + timestamp: 1729027726517 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-14.2.0-he9431aa_1.conda + sha256: 9b5cf168a6c7361cae869cb74b716766ee7c6d6b3f6172b32ba9bf91135efdc4 + md5: 0694c249c61469f2c0f7e2990782af21 + depends: + - libgcc 14.2.0 he277a41_1 + arch: aarch64 + platform: linux + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 54104 + timestamp: 1729089444587 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_1.conda + sha256: fc9e7f22a17faf74da904ebfc4d88699013d2992e55505e4aa0eb01770290977 + md5: f1fd30127802683586f768875127a987 + depends: + - libgfortran5 14.2.0 hd5240d6_1 + constrains: + - libgfortran-ng ==14.2.0=*_1 + arch: x86_64 + platform: linux + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 53997 + timestamp: 1729027752995 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-14.2.0-he9431aa_1.conda + sha256: cb66e411fa32a5c6040f4e5e2a63c00897aae4c3133a9c004c2e929ccf19575b + md5: 0294b92d2f47a240bebb1e3336b495f1 + depends: + - libgfortran5 14.2.0 hb6113d0_1 + constrains: + - libgfortran-ng ==14.2.0=*_1 + arch: aarch64 + platform: linux + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 54105 + timestamp: 1729089471124 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda + sha256: 44e541b4821c96b28b27fef5630883a60ce4fee91fd9c79f25a199f8f73f337b + md5: 4a55d9e169114b2b90d3ec4604cd7bbf + depends: + - libgfortran5 13.2.0 hf226fd6_3 + arch: arm64 + platform: osx + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 110233 + timestamp: 1707330749033 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda + sha256: d149a37ca73611e425041f33b9d8dbed6e52ec506fe8cc1fc0ee054bddeb6d5d + md5: 9822b874ea29af082e5d36098d25427d + depends: + - libgcc >=14.2.0 + constrains: + - libgfortran 14.2.0 + arch: x86_64 + platform: linux + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 1462645 + timestamp: 1729027735353 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-14.2.0-hb6113d0_1.conda + sha256: a87ff46d19916403cbf68cf1d785bf56b4d1ab7b2552468d2ea775d70782493f + md5: fc068e11b10e18f184e027782baa12b6 + depends: + - libgcc >=14.2.0 + constrains: + - libgfortran 14.2.0 + arch: aarch64 + platform: linux + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 1102158 + timestamp: 1729089452640 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda + sha256: bafc679eedb468a86aa4636061c55966186399ee0a04b605920d208d97ac579a + md5: 66ac81d54e95c534ae488726c1f698ea + depends: + - llvm-openmp >=8.0.0 + constrains: + - libgfortran 5.0.0 13_2_0_*_3 + arch: arm64 + platform: osx + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 997381 + timestamp: 1707330687590 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + sha256: 1911c29975ec99b6b906904040c855772ccb265a1c79d5d75c8ceec4ed89cd63 + md5: cc3573974587f12dda90d96e3e55a702 + depends: + - _libgcc_mutex 0.1 conda_forge + arch: x86_64 + platform: linux + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 460992 + timestamp: 1729027639220 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-14.2.0-he277a41_1.conda + sha256: 5aa53874a5e57a00f2e0c2e2910684eb674429cd5fcb803619b226a73e89aedf + md5: 376f0e73abbda6d23c0cb749adc195ef + arch: aarch64 + platform: linux + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 463521 + timestamp: 1729089357313 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.33.0-h2b5623c_1.conda + sha256: ae48ee93e2c226bf682f1e389c2fd51ae7bf77c2ce4b3aee069764f4be1c63f2 + md5: 61829a8dd5f4e2327e707572065bae41 + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libcurl >=8.11.1,<9.0a0 + - libgcc >=13 + - libgrpc >=1.67.1,<1.68.0a0 + - libprotobuf >=5.28.3,<5.28.4.0a0 + - libstdcxx >=13 + - openssl >=3.4.0,<4.0a0 + constrains: + - libgoogle-cloud 2.33.0 *_1 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 1254656 + timestamp: 1735648569457 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgoogle-cloud-2.33.0-hccf9d24_1.conda + sha256: d3d4def86d880431928799ba90ca97e57c2f05677c03af8de2337502926c492c + md5: a2724014eb04f14bd71d35f45b062dd0 + depends: + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libcurl >=8.11.1,<9.0a0 + - libgcc >=13 + - libgrpc >=1.67.1,<1.68.0a0 + - libprotobuf >=5.28.3,<5.28.4.0a0 + - libstdcxx >=13 + - openssl >=3.4.0,<4.0a0 + constrains: + - libgoogle-cloud 2.33.0 *_1 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 1253019 + timestamp: 1735649566849 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.33.0-hdbe95d5_1.conda + sha256: ce95aca02451694a4154c7770b6addf4fb859abf17912de6ec947da8469a56ce + md5: 91de1fbab8610974c0094c266bc63435 + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libcurl >=8.11.1,<9.0a0 + - libcxx >=18 + - libgrpc >=1.67.1,<1.68.0a0 + - libprotobuf >=5.28.3,<5.28.4.0a0 + - openssl >=3.4.0,<4.0a0 + constrains: + - libgoogle-cloud 2.33.0 *_1 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: Apache + size: 877594 + timestamp: 1735648230965 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-2.33.0-h0121fbd_1.conda + sha256: 41022523320ca8633a6c615710823e596efadb50f06d724e1a0c81e27994f257 + md5: b0cfb5044685a7a9fa43ae669124f0a0 + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil + - libcrc32c >=1.1.2,<1.2.0a0 + - libcurl + - libgcc >=13 + - libgoogle-cloud 2.33.0 h2b5623c_1 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - openssl + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 784357 + timestamp: 1735648759177 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgoogle-cloud-storage-2.33.0-hb9b2b65_1.conda + sha256: 5eda1cbba68709b91b370b3792c9cfd7bec4ac4e2262f0887d12e1f000ae1191 + md5: 45df2267ff4d8ce532e8d300ce0b0829 + depends: + - libabseil + - libcrc32c >=1.1.2,<1.2.0a0 + - libcurl + - libgcc >=13 + - libgoogle-cloud 2.33.0 hccf9d24_1 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - openssl + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 737518 + timestamp: 1735649773462 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-storage-2.33.0-h7081f7f_1.conda + sha256: c0524a22064bc17f5c037da09ba54cc9e767741ef645178e499750c44bec2531 + md5: af8e51382464d4cc2d0054977c40a732 + depends: + - __osx >=11.0 + - libabseil + - libcrc32c >=1.1.2,<1.2.0a0 + - libcurl + - libcxx >=18 + - libgoogle-cloud 2.33.0 hdbe95d5_1 + - libzlib >=1.3.1,<2.0a0 + - openssl + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: Apache + size: 526963 + timestamp: 1735649222088 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.67.1-h25350d4_1.conda + sha256: 014627485b3cf0ea18e04c0bab07be7fb98722a3aeeb58477acc7e1c3d2f911e + md5: 0c6497a760b99a926c7c12b74951a39c + depends: + - __glibc >=2.17,<3.0.a0 + - c-ares >=1.34.4,<2.0a0 + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libgcc >=13 + - libprotobuf >=5.28.3,<5.28.4.0a0 + - libre2-11 >=2024.7.2 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.4.0,<4.0a0 + - re2 + constrains: + - grpc-cpp =1.67.1 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 7792251 + timestamp: 1735584856826 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgrpc-1.67.1-hf7ccdd3_1.conda + sha256: 3fa173dc1d7456aac2b26937daae86a08432a31640e3d6569c62edc661fc9bbe + md5: 8fb41a425bebaeb3d0fa568503612e64 + depends: + - c-ares >=1.34.4,<2.0a0 + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libgcc >=13 + - libprotobuf >=5.28.3,<5.28.4.0a0 + - libre2-11 >=2024.7.2 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.4.0,<4.0a0 + - re2 + constrains: + - grpc-cpp =1.67.1 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 7430006 + timestamp: 1735585769731 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.67.1-h0a426d6_1.conda + sha256: 630edf63981818ff590367cb95fddbed0f5a390464d0952c90ec81de899e84a6 + md5: 8a3cba079d6ac985e7d73c76a678fbb4 + depends: + - __osx >=11.0 + - c-ares >=1.34.4,<2.0a0 + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libcxx >=18 + - libprotobuf >=5.28.3,<5.28.4.0a0 + - libre2-11 >=2024.7.2 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.4.0,<4.0a0 + - re2 + constrains: + - grpc-cpp =1.67.1 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: APACHE + size: 5311706 + timestamp: 1735585137716 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + sha256: 8ac2f6a9f186e76539439e50505d98581472fedb347a20e7d1f36429849f05c9 + md5: d66573916ffcf376178462f1b61c941e + depends: + - libgcc-ng >=12 + arch: x86_64 + platform: linux + license: LGPL-2.1-only + size: 705775 + timestamp: 1702682170569 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.17-h31becfc_2.conda + sha256: a30e09d089cb75a0d5b8e5c354694c1317da98261185ed65aa3793e741060614 + md5: 9a8eb13f14de7d761555a98712e6df65 + depends: + - libgcc-ng >=12 + arch: aarch64 + platform: linux + license: LGPL-2.1-only + size: 705787 + timestamp: 1702684557134 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda + sha256: bc7de5097b97bcafcf7deaaed505f7ce02f648aac8eccc0d5a47cc599a1d0304 + md5: 69bda57310071cf6d2b86caf11573d2d + arch: arm64 + platform: osx + license: LGPL-2.1-only + size: 676469 + timestamp: 1702682458114 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda + sha256: b954e09b7e49c2f2433d6f3bb73868eda5e378278b0f8c1dd10a7ef090e14f2f + md5: ea25936bb4080d843790b586850f82b8 + depends: + - libgcc-ng >=12 + constrains: + - jpeg <0.0.0a + arch: x86_64 + platform: linux + license: IJG AND BSD-3-Clause AND Zlib + size: 618575 + timestamp: 1694474974816 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.0.0-h31becfc_1.conda + sha256: 675bc1f2a8581cd34a86c412663ec29c5f90c1d9f8d11866aa1ade5cdbdf8429 + md5: ed24e702928be089d9ba3f05618515c6 + depends: + - libgcc-ng >=12 + constrains: + - jpeg <0.0.0a + arch: aarch64 + platform: linux + license: IJG AND BSD-3-Clause AND Zlib + size: 647126 + timestamp: 1694475003570 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda + sha256: a42054eaa38e84fc1e5ab443facac4bbc9d1b6b6f23f54b7bf4f1eb687e1d993 + md5: 3ff1e053dc3a2b8e36b9bfa4256a58d1 + constrains: + - jpeg <0.0.0a + arch: arm64 + platform: osx + license: IJG AND BSD-3-Clause AND Zlib + size: 547541 + timestamp: 1694475104253 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-26_linux64_openblas.conda + build_number: 26 + sha256: b76458c36331376911e0f98fa68109e02f4d5e5ebfffa79587ac69cef748bba1 + md5: 3792604c43695d6a273bc5faaac47d48 + depends: + - libblas 3.9.0 26_linux64_openblas + constrains: + - libcblas 3.9.0 26_linux64_openblas + - liblapacke 3.9.0 26_linux64_openblas + - blas * openblas + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 16338 + timestamp: 1734432576650 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.9.0-26_linuxaarch64_openblas.conda + build_number: 26 + sha256: a42bd01498efe2ccf6d08d56ac3cbd3ceab79e06699ff5aac3da8e45a66738f7 + md5: a5d4e18876393633da62fd8492c00156 + depends: + - libblas 3.9.0 26_linuxaarch64_openblas + constrains: + - blas * openblas + - liblapacke 3.9.0 26_linuxaarch64_openblas + - libcblas 3.9.0 26_linuxaarch64_openblas + arch: aarch64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 16403 + timestamp: 1734432585123 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-26_osxarm64_openblas.conda + build_number: 26 + sha256: dd6d9a21e672aee4332f019c8229ce70cf5eaf6c2f4cbd1443b105fb66c00dc5 + md5: cebad79038a75cfd28fa90d147a2d34d + depends: + - libblas 3.9.0 26_osxarm64_openblas + constrains: + - liblapacke 3.9.0 26_osxarm64_openblas + - libcblas 3.9.0 26_osxarm64_openblas + - blas * openblas + arch: arm64 + platform: osx + license: BSD-3-Clause + license_family: BSD + size: 16624 + timestamp: 1734433068120 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.6.3-hb9d3cd8_1.conda + sha256: e6e425252f3839e2756e4af1ea2074dffd3396c161bf460629f9dfd6a65f15c6 + md5: 2ecf2f1c7e4e21fcfe6423a51a992d84 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: 0BSD + size: 111132 + timestamp: 1733407410083 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.6.3-h86ecc28_1.conda + sha256: d1cce0b7d62d1e54e2164d3e0667ee808efc6c3870256e5b47a150cd0bf46824 + md5: eb08b903681f9f2432c320e8ed626723 + depends: + - libgcc >=13 + arch: aarch64 + platform: linux + license: 0BSD + size: 124138 + timestamp: 1733409137214 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.6.3-h39f12f2_1.conda + sha256: d863b8257406918ffdc50ae65502f2b2d6cede29404d09a094f59509d6a0aaf1 + md5: b2553114a7f5e20ccd02378a77d836aa + depends: + - __osx >=11.0 + arch: arm64 + platform: osx + license: 0BSD + size: 99129 + timestamp: 1733407496073 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda + sha256: b0f2b3695b13a989f75d8fd7f4778e1c7aabe3b36db83f0fe80b2cd812c0e975 + md5: 19e57602824042dfd0446292ef90488b + depends: + - __glibc >=2.17,<3.0.a0 + - c-ares >=1.32.3,<2.0a0 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 647599 + timestamp: 1729571887612 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnghttp2-1.64.0-hc8609a4_0.conda + sha256: c093c6d370aadbf0409c20b6c54c488ee2f6fea976181919fcc63e87ee232673 + md5: f52c614fa214a8bedece9421c771670d + depends: + - c-ares >=1.32.3,<2.0a0 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 714610 + timestamp: 1729571912479 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda + sha256: 00cc685824f39f51be5233b54e19f45abd60de5d8847f1a56906f8936648b72f + md5: 3408c02539cee5f1141f9f11450b6a51 + depends: + - __osx >=11.0 + - c-ares >=1.34.2,<2.0a0 + - libcxx >=17 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 566719 + timestamp: 1729572385640 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + sha256: 26d77a3bb4dceeedc2a41bd688564fe71bf2d149fdcf117049970bc02ff1add6 + md5: 30fd6e37fe21f86f4bd26d6ee73eeec7 + depends: + - libgcc-ng >=12 + arch: x86_64 + platform: linux + license: LGPL-2.1-only + license_family: GPL + size: 33408 + timestamp: 1697359010159 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda + sha256: fd18c2b75d7411096428d36a70b36b1a17e31f7b8956b6905d145792d49e97f8 + md5: c14f32510f694e3185704d89967ec422 + depends: + - libgcc-ng >=12 + arch: aarch64 + platform: linux + license: LGPL-2.1-only + license_family: GPL + size: 34501 + timestamp: 1697358973269 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda + sha256: 99ba271d8a80a1af2723f2e124ffd91d850074c0389c067e6d96d72a2dbfeabe + md5: 62857b389e42b36b686331bec0922050 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.2.0 + constrains: + - openblas >=0.3.28,<0.3.29.0a0 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 5578513 + timestamp: 1730772671118 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.28-pthreads_h9d3fd7e_1.conda + sha256: 30623a40764e935aa77e0d4db54c1a1589189a9bf3a03fdb445505c1e319b5a6 + md5: e8dde93dd199da3c1f2c1fcfd0042cd4 + depends: + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.2.0 + constrains: + - openblas >=0.3.28,<0.3.29.0a0 + arch: aarch64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 4793435 + timestamp: 1730773029647 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda + sha256: 62bb669c37a845129096f73d446cdb6bb170e4927f2fea2b661329680dbbc373 + md5: 40803a48d947c8639da6704e9a44d3ce + depends: + - __osx >=11.0 + - libgfortran 5.* + - libgfortran5 >=13.2.0 + - llvm-openmp >=18.1.8 + constrains: + - openblas >=0.3.28,<0.3.29.0a0 + arch: arm64 + platform: osx + license: BSD-3-Clause + license_family: BSD + size: 4165774 + timestamp: 1730772154295 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_8_cpu.conda + build_number: 8 + sha256: 2c6d900d4e9dd3c4000886d76d3f8a099e904667ebc6935b49428e6e9b766481 + md5: a9fa0ef309406c84b46db3a28efd761e + depends: + - __glibc >=2.17,<3.0.a0 + - libarrow 18.1.0 h9d9f30d_8_cpu + - libgcc >=13 + - libstdcxx >=13 + - libthrift >=0.21.0,<0.21.1.0a0 + - openssl >=3.4.0,<4.0a0 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 1207011 + timestamp: 1736610684584 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libparquet-18.1.0-hfc78867_8_cpu.conda + build_number: 8 + sha256: 2ed6b9eac4504051ddc094ea3f3a2b3198d4d25a443a96fa2971d8075d790c31 + md5: 9a907190c9e2c6bf1a29569700218f0b + depends: + - libarrow 18.1.0 h47f80e1_8_cpu + - libgcc >=13 + - libstdcxx >=13 + - libthrift >=0.21.0,<0.21.1.0a0 + - openssl >=3.4.0,<4.0a0 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 1117465 + timestamp: 1736611918180 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_8_cpu.conda + build_number: 8 + sha256: 4991519ef4264abc7160e9faaf8ff01d4731bf1497076bef1895d6c366f796eb + md5: b8bd275a49877fdec62ff787818a869d + depends: + - __osx >=11.0 + - libarrow 18.1.0 hf3eb8e5_8_cpu + - libcxx >=18 + - libthrift >=0.21.0,<0.21.1.0a0 + - openssl >=3.4.0,<4.0a0 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: APACHE + size: 873593 + timestamp: 1736609701839 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.45-h943b412_0.conda + sha256: b8f5b5ba9a14dedf7c97c01300de492b1b52b68eacbc3249a13fdbfa82349a2f + md5: 85cbdaacad93808395ac295b5667d25b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + arch: x86_64 + platform: linux + license: zlib-acknowledgement + size: 289426 + timestamp: 1736339058310 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.45-hec79eb8_0.conda + sha256: a06daa523a0d5775acb96e6e3f083adc2ab1383eb8f664513dbc663f439c9cca + md5: 9a8716c16b40acc7148263de1d0a403b + depends: + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + arch: aarch64 + platform: linux + license: zlib-acknowledgement + size: 299051 + timestamp: 1736344007986 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.45-h3783ad8_0.conda + sha256: ddcc81c049b32fb5eb3ac1f9a6d3a589c08325c8ec6f89eb912208b19330d68c + md5: d554c806d065b1763cb9e1cb1d25741d + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + arch: arm64 + platform: osx + license: zlib-acknowledgement + size: 263151 + timestamp: 1736339184358 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.28.3-h6128344_1.conda + sha256: 51125ebb8b7152e4a4e69fd2398489c4ec8473195c27cde3cbdf1cb6d18c5493 + md5: d8703f1ffe5a06356f06467f1d0b9464 + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 2960815 + timestamp: 1735577210663 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-5.28.3-h44a3b7b_1.conda + sha256: ecb69f2b1668e784b41ba667493be846662d5ef702bef64fb2e013bb1364cdc4 + md5: 68f807f7cc13951652bbe048253fd405 + depends: + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + arch: aarch64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 2788074 + timestamp: 1735576315676 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-5.28.3-h3bd63a1_1.conda + sha256: f58a16b13ad53346903c833e266f83c3d770a43a432659b98710aed85ca885e7 + md5: bdbfea4cf45ae36652c6bbcc2e7ebe91 + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libcxx >=18 + - libzlib >=1.3.1,<2.0a0 + arch: arm64 + platform: osx + license: BSD-3-Clause + license_family: BSD + size: 2271580 + timestamp: 1735576361997 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hbbce691_2.conda + sha256: 4420f8362c71251892ba1eeb957c5e445e4e1596c0c651c28d0d8b415fe120c7 + md5: b2fede24428726dd867611664fb372e8 + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - re2 2024.07.02.* + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 209793 + timestamp: 1735541054068 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libre2-11-2024.07.02-h18dbdb1_2.conda + sha256: 862c20de0120f802e618dcb25913d00c5b82f91f4be60b2d46a774e851adc2f6 + md5: 9a7dbbaab49f76a6f36e5c9d98e323a7 + depends: + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libgcc >=13 + - libstdcxx >=13 + constrains: + - re2 2024.07.02.* + arch: aarch64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 204305 + timestamp: 1735540986919 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libre2-11-2024.07.02-h07bc746_2.conda + sha256: 112a73ad483353751d4c5d63648c69a4d6fcebf5e1b698a860a3f5124fc3db96 + md5: 6b1e3624d3488016ca4f1ca0c412efaa + depends: + - __osx >=11.0 + - libabseil * cxx17* + - libabseil >=20240722.0,<20240723.0a0 + - libcxx >=18 + constrains: + - re2 2024.07.02.* + arch: arm64 + platform: osx + license: BSD-3-Clause + license_family: BSD + size: 167155 + timestamp: 1735541067807 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda + sha256: 0105bd108f19ea8e6a78d2d994a6d4a8db16d19a41212070d2d1d48a63c34161 + md5: a587892d3c13b6621a6091be690dbca2 + depends: + - libgcc-ng >=12 + arch: x86_64 + platform: linux + license: ISC + size: 205978 + timestamp: 1716828628198 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda + sha256: 448df5ea3c5cf1af785aad46858d7a5be0522f4234a4dc9bb764f4d11ff3b981 + md5: 2e4a8f23bebdcb85ca8e5a0fbe75666a + depends: + - libgcc-ng >=12 + arch: aarch64 + platform: linux + license: ISC + size: 177394 + timestamp: 1716828514515 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda + sha256: fade8223e1e1004367d7101dd17261003b60aa576df6d7802191f8972f7470b1 + md5: a7ce36e284c5faaf93c220dfc39e3abd + depends: + - __osx >=11.0 + arch: arm64 + platform: osx + license: ISC + size: 164972 + timestamp: 1716828607917 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.48.0-hee588c1_0.conda + sha256: 7bb84f44e1bd756da4a3d0d43308324a5533e6ba9f4772475884bce44d405064 + md5: 84bd1c9a82b455e7a2f390375fb38f90 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + arch: x86_64 + platform: linux + license: Unlicense + size: 876582 + timestamp: 1737123945341 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.48.0-h5eb1b54_0.conda + sha256: b4365ab7c74a2e6c0444eb950367fa3ca56a87c9921b2faa5ad032fe7a7df682 + md5: 1998946fa3ccf38a07b44a879b2227ae + depends: + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + arch: aarch64 + platform: linux + license: Unlicense + size: 1044953 + timestamp: 1737123983895 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.48.0-h3f77e49_0.conda + sha256: b31169cf0ca7b6835baca4ab92d6cf2eee83b1a12a11b72f39521e8baf4d6acb + md5: 714719df4f49e30f9728956f240846ca + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + arch: arm64 + platform: osx + license: Unlicense + size: 853163 + timestamp: 1737124192432 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda + sha256: 0407ac9fda2bb67e11e357066eff144c845801d00b5f664efbc48813af1e7bb9 + md5: be2de152d8073ef1c01b7728475f2fe7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.4.0,<4.0a0 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 304278 + timestamp: 1732349402869 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libssh2-1.11.1-ha41c0db_0.conda + sha256: 40f2af5357457546bd11cd64a3b9043d83865180f65ce602515c35f353be35c7 + md5: aeffe03c0e598f015aab08dbb04f6ee4 + depends: + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.4.0,<4.0a0 + arch: aarch64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 311577 + timestamp: 1732349396421 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda + sha256: f7047c6ed44bcaeb04432e8c74da87591940d091b0a3940c0d884b7faa8062e9 + md5: ddc7194676c285513706e5fc64f214d7 + depends: + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.4.0,<4.0a0 + arch: arm64 + platform: osx + license: BSD-3-Clause + license_family: BSD + size: 279028 + timestamp: 1732349599461 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + sha256: 4661af0eb9bdcbb5fb33e5d0023b001ad4be828fccdcc56500059d56f9869462 + md5: 234a5554c53625688d51062645337328 + depends: + - libgcc 14.2.0 h77fa898_1 + arch: x86_64 + platform: linux + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 3893695 + timestamp: 1729027746910 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda + sha256: 519556d2c93f1b487091ce046d62e762286177f4a670ec10e16005177d0bcab3 + md5: 37f489acd39e22b623d2d1e5ac6d195c + depends: + - libgcc 14.2.0 he277a41_1 + arch: aarch64 + platform: linux + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 3816794 + timestamp: 1729089463404 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + sha256: 25bb30b827d4f6d6f0522cc0579e431695503822f144043b93c50237017fffd8 + md5: 8371ac6457591af2cf6159439c1fd051 + depends: + - libstdcxx 14.2.0 hc0a3c3a_1 + arch: x86_64 + platform: linux + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 54105 + timestamp: 1729027780628 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda + sha256: 9f97461bd55a2745a7a0941f3502a047f15bfe7bb2952dc7fb204b3202f866fd + md5: 0e75771b8a03afae5a2c6ce71bc733f5 + depends: + - libstdcxx 14.2.0 h3f4de04_1 + arch: aarch64 + platform: linux + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 54133 + timestamp: 1729089498541 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.21.0-h0e7cc3e_0.conda + sha256: ebb395232973c18745b86c9a399a4725b2c39293c9a91b8e59251be013db42f0 + md5: dcb95c0a98ba9ff737f7ae482aef7833 + depends: + - __glibc >=2.17,<3.0.a0 + - libevent >=2.1.12,<2.1.13.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 425773 + timestamp: 1727205853307 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libthrift-0.21.0-h154c74f_0.conda + sha256: f04ab1417aca1687edff9c30d8423ace285eb8c053dc16d595c6e47cfeefb274 + md5: c28792bf37f4ecdce8e3cb9e40750650 + depends: + - libevent >=2.1.12,<2.1.13.0a0 + - libgcc >=13 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 417329 + timestamp: 1727205944238 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.21.0-h64651cc_0.conda + sha256: 7a6c7d5f58cbbc2ccd6493b4b821639fdb0701b9b04c737a949e8cb6adf1c9ad + md5: 7ce2bd2f650f8c31ad7ba4c7bfea61b7 + depends: + - __osx >=11.0 + - libcxx >=17 + - libevent >=2.1.12,<2.1.13.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: APACHE + size: 324342 + timestamp: 1727206096912 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-hd9ff511_3.conda + sha256: b224e16b88d76ea95e4af56e2bc638c603bd26a770b98d117d04541d3aafa002 + md5: 0ea6510969e1296cc19966fad481f6de + depends: + - __glibc >=2.17,<3.0.a0 + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.23,<1.24.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - liblzma >=5.6.3,<6.0a0 + - libstdcxx >=13 + - libwebp-base >=1.4.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.6,<1.6.0a0 + arch: x86_64 + platform: linux + license: HPND + size: 428173 + timestamp: 1734398813264 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.0-h88f7998_3.conda + sha256: 5888bd66ba7606ae8596856c7dac800940ecad0aed77d6aa37db69d434c81cf0 + md5: 36a0ea4a173338c8725dc0807e99cf22 + depends: + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.23,<1.24.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - liblzma >=5.6.3,<6.0a0 + - libstdcxx >=13 + - libwebp-base >=1.4.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.6,<1.6.0a0 + arch: aarch64 + platform: linux + license: HPND + size: 464699 + timestamp: 1734398752249 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_3.conda + sha256: 91417846157e04992801438a496b151df89604b2e7c6775d6f701fcd0cbed5ae + md5: a5d084a957563e614ec0c0196d890654 + depends: + - __osx >=11.0 + - lerc >=4.0.0,<5.0a0 + - libcxx >=18 + - libdeflate >=1.23,<1.24.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - liblzma >=5.6.3,<6.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.6,<1.6.0a0 + arch: arm64 + platform: osx + license: HPND + size: 370600 + timestamp: 1734398863052 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.9.0-hb9d3cd8_1.conda + sha256: 9794e6388e780c3310d46f773bbc924d4053375c3fcdb07a704b57f4616db928 + md5: 1e936bd23d737aac62a18e9a1e7f8b18 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 81500 + timestamp: 1732868419835 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libutf8proc-2.9.0-h86ecc28_1.conda + sha256: 37a1833c55f9945724cd4b3eb6a1469032cc754a1dd725f191c34154ad2ba7e4 + md5: 699f155da290be3a1a64c932c6728991 + depends: + - libgcc >=13 + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 81526 + timestamp: 1732868466862 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.9.0-h5505292_1.conda + sha256: ea88f06e97ef8fa2490f7594f8885bb542577226edf8abba3144302d951a53c2 + md5: f777470d31c78cd0abe1903a2fda436f + depends: + - __osx >=11.0 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 83000 + timestamp: 1732868631531 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18 + md5: 40b61aab5c7ba9ff276c41cfffe6b80b + depends: + - libgcc-ng >=12 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 33601 + timestamp: 1680112270483 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda + sha256: 616277b0c5f7616c2cdf36f6c316ea3f9aa5bb35f2d4476a349ab58b9b91675f + md5: 000e30b09db0b7c775b21695dff30969 + depends: + - libgcc-ng >=12 + arch: aarch64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 35720 + timestamp: 1680113474501 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.50.0-hb9d3cd8_0.conda + sha256: b4a8890023902aef9f1f33e3e35603ad9c2f16c21fdb58e968fa6c1bd3e94c0b + md5: 771ee65e13bc599b0b62af5359d80169 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 891272 + timestamp: 1737016632446 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.50.0-h86ecc28_0.conda + sha256: 67914c7f171d343059144d804c2f17fcd621a94e45f179a0fd843b8c1618823e + md5: 915db044076cbbdffb425170deb4ce38 + depends: + - libgcc >=13 + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 621056 + timestamp: 1737016626950 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.50.0-h5505292_0.conda + sha256: d13fb49d4c8262bf2c44ffb2c77bb2b5d0f85fc6de76bdb75208efeccb29fce6 + md5: 20717343fb30798ab7c23c2e92b748c1 + depends: + - __osx >=11.0 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 418890 + timestamp: 1737016751326 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.5.0-h851e524_0.conda + sha256: c45283fd3e90df5f0bd3dbcd31f59cdd2b001d424cf30a07223655413b158eaf + md5: 63f790534398730f59e1b899c3644d4a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - libwebp 1.5.0 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 429973 + timestamp: 1734777489810 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.5.0-h0886dbf_0.conda + sha256: b3d881a0ae08bb07fff7fa8ead506c8d2e0388733182fe4f216f3ec5d61ffcf0 + md5: 95ef4a689b8cc1b7e18b53784d88f96b + depends: + - libgcc >=13 + constrains: + - libwebp 1.5.0 + arch: aarch64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 362623 + timestamp: 1734779054659 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda + sha256: f8bdb876b4bc8cb5df47c28af29188de8911c3fea4b799a33743500149de3f4a + md5: 569466afeb84f90d5bb88c11cc23d746 + depends: + - __osx >=11.0 + constrains: + - libwebp 1.5.0 + arch: arm64 + platform: osx + license: BSD-3-Clause + license_family: BSD + size: 290013 + timestamp: 1734777593617 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + sha256: 666c0c431b23c6cec6e492840b176dde533d48b7e6fb8883f5071223433776aa + md5: 92ed62436b625154323d40d5f2f11dd7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 395888 + timestamp: 1727278577118 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda + sha256: 461cab3d5650ac6db73a367de5c8eca50363966e862dcf60181d693236b1ae7b + md5: cd14ee5cca2464a425b1dbfc24d90db2 + depends: + - libgcc >=13 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 397493 + timestamp: 1727280745441 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda + sha256: bd3816218924b1e43b275863e21a3e13a5db4a6da74cca8e60bc3c213eb62f71 + md5: af523aae2eca6dfa1c8eec693f5b9a79 + depends: + - __osx >=11.0 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 323658 + timestamp: 1727278733917 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + md5: 5aa797f8787fe7a17d1b0821485b5adc + depends: + - libgcc-ng >=12 + arch: x86_64 + platform: linux + license: LGPL-2.1-or-later + size: 100393 + timestamp: 1702724383534 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + sha256: 6b46c397644091b8a26a3048636d10b989b1bf266d4be5e9474bf763f828f41f + md5: b4df5d7d4b63579d081fd3a4cf99740e + depends: + - libgcc-ng >=12 + arch: aarch64 + platform: linux + license: LGPL-2.1-or-later + size: 114269 + timestamp: 1702724369203 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.5-h0d44e9d_1.conda + sha256: 306e18aa647d8208ad2cd0e62d84933222b2fbe93d2d53cd5283d2256b1d54de + md5: f5b05674697ae7d2c5932766695945e1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - liblzma >=5.6.3,<6.0a0 + - libzlib >=1.3.1,<2.0a0 + constrains: + - icu <0.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 689993 + timestamp: 1733443678322 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.13.5-h2e0c361_1.conda + sha256: dc0e86d35a836af6e99d18f50c6551fc64c53ed3a3da5a9fea90e78763cf14b4 + md5: 63410f85031930cde371dfe0ee89109a + depends: + - icu >=75.1,<76.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - liblzma >=5.6.3,<6.0a0 + - libzlib >=1.3.1,<2.0a0 + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 732155 + timestamp: 1733443825814 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.13.5-h178c5d8_1.conda + sha256: d7af3f25a4cece170502acd38f2dafbea4521f373f46dcb28a37fbe6ac2da544 + md5: 3dc3cff0eca1640a6acbbfab2f78139e + depends: + - __osx >=11.0 + - icu >=75.1,<76.0a0 + - libiconv >=1.17,<2.0a0 + - liblzma >=5.6.3,<6.0a0 + - libzlib >=1.3.1,<2.0a0 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 582898 + timestamp: 1733443841584 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 + md5: edb0dca6bc32e4f4789199455a1dbeb8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + arch: x86_64 + platform: linux + license: Zlib + license_family: Other + size: 60963 + timestamp: 1727963148474 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + sha256: 5a2c1eeef69342e88a98d1d95bff1603727ab1ff4ee0e421522acd8813439b84 + md5: 08aad7cbe9f5a6b460d0976076b6ae64 + depends: + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + arch: aarch64 + platform: linux + license: Zlib + license_family: Other + size: 66657 + timestamp: 1727963199518 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b + md5: 369964e85dc26bfe78f41399b366c435 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.1 *_2 + arch: arm64 + platform: osx + license: Zlib + license_family: Other + size: 46438 + timestamp: 1727963202283 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.7-hdb05f8b_0.conda + sha256: b92a669f2059874ebdcb69041b6c243d68ffc3fb356ac1339cec44aeb27245d7 + md5: c4d54bfd3817313ce758aa76283b118d + depends: + - __osx >=11.0 + constrains: + - openmp 19.1.7|19.1.7.* + arch: arm64 + platform: osx + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + size: 280830 + timestamp: 1736986295869 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda + sha256: 47326f811392a5fd3055f0f773036c392d26fdb32e4d8e7a8197eed951489346 + md5: 9de5350a85c4a20c685259b889aa6393 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + arch: x86_64 + platform: linux + license: BSD-2-Clause + license_family: BSD + size: 167055 + timestamp: 1733741040117 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lz4-c-1.10.0-h5ad3122_1.conda + sha256: 67e55058d275beea76c1882399640c37b5be8be4eb39354c94b610928e9a0573 + md5: 6654e411da94011e8fbe004eacb8fe11 + depends: + - libgcc >=13 + - libstdcxx >=13 + arch: aarch64 + platform: linux + license: BSD-2-Clause + license_family: BSD + size: 184953 + timestamp: 1733740984533 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda + sha256: 94d3e2a485dab8bdfdd4837880bde3dd0d701e2b97d6134b8806b7c8e69c8652 + md5: 01511afc6cc1909c5303cf31be17b44f + depends: + - __osx >=11.0 + - libcxx >=18 + arch: arm64 + platform: osx + license: BSD-2-Clause + license_family: BSD + size: 148824 + timestamp: 1733741047892 +- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda + sha256: 0fbacdfb31e55964152b24d5567e9a9996e1e7902fb08eb7d91b5fd6ce60803a + md5: fee3164ac23dfca50cfcc8b85ddefb81 + depends: + - mdurl >=0.1,<1 + - python >=3.9 + license: MIT + license_family: MIT + size: 64430 + timestamp: 1733250550053 +- conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py312h178313f_1.conda + sha256: 4a6bf68d2a2b669fecc9a4a009abd1cf8e72c2289522ff00d81b5a6e51ae78f5 + md5: eb227c3e0bf58f5bd69c0532b157975b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - jinja2 >=3.0.0 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 24604 + timestamp: 1733219911494 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.2-py312h74ce7d3_1.conda + sha256: 1d500158262f30b9c23e37d1c861fe76e127a3926d69b3b38c25d20d3faa6f9f + md5: bc8607ab678073a0441808a31465f4fb + depends: + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - jinja2 >=3.0.0 + arch: aarch64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 25079 + timestamp: 1733220639175 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.2-py312h998013c_1.conda + sha256: 4aa997b244014d3707eeef54ab0ee497d12c0d0d184018960cce096169758283 + md5: 46e547061080fddf9cf95a0327e8aba6 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - jinja2 >=3.0.0 + arch: arm64 + platform: osx + license: BSD-3-Clause + license_family: BSD + size: 24048 + timestamp: 1733219945697 +- conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011705-release.conda + noarch: python + sha256: 15578c7bc78001d3882c3b9af9d7d8bf3566c68ae133870038be055c8dfd90e9 + md5: 7e6c35d82044e8d31e9327e7d90bfb2b + depends: + - max-core ==25.1.0.dev2025011705 release + - max-python >=25.1.0.dev2025011705,<26.0a0 + - mojo-jupyter ==25.1.0.dev2025011705 release + - mblack ==25.1.0.dev2025011705 release + license: LicenseRef-Modular-Proprietary + size: 9920 + timestamp: 1737091778690 +- conda: https://conda.modular.com/max-nightly/linux-64/max-core-25.1.0.dev2025011705-release.conda + sha256: 3e39d779710559206129052c64ac530b9d262288f75812ba07c3e3e395a0e18e + md5: 5575de33b0503143e635ade746f057c3 + depends: + - mblack ==25.1.0.dev2025011705 release + license: LicenseRef-Modular-Proprietary + size: 244764907 + timestamp: 1737091186388 +- conda: https://conda.modular.com/max-nightly/linux-aarch64/max-core-25.1.0.dev2025011705-release.conda + sha256: a9e7747e7cb7ff01dc58f4c7f5772d2b4483693dd200c88653b1ec2dda46bc8b + md5: a9b13b577fb1bcc14b330f5a4185023c + depends: + - mblack ==25.1.0.dev2025011705 release + license: LicenseRef-Modular-Proprietary + size: 247240781 + timestamp: 1737091778688 +- conda: https://conda.modular.com/max-nightly/osx-arm64/max-core-25.1.0.dev2025011705-release.conda + sha256: 9369b738945ef783af1e4caf2676bd6a299ff86e4ef9504e7a5ee69841fffa01 + md5: c4397350b325ae5a0e07f61e483fc3e5 + depends: + - mblack ==25.1.0.dev2025011705 release + license: LicenseRef-Modular-Proprietary + size: 206615275 + timestamp: 1737092643231 +- conda: https://conda.modular.com/max-nightly/linux-64/max-python-25.1.0.dev2025011705-3.12release.conda + sha256: bdda011f73105d5d91e29abdacc4e7304501249c3bb50e83517661cdea4ef56a + md5: 0ddfaa3caa3647a0cbcdf394774ee6be + depends: + - max-core ==25.1.0.dev2025011705 release + - python 3.12.* + - fastapi + - httpx + - huggingface_hub + - numpy >=1.18,<2.0 + - opentelemetry-api + - opentelemetry-exporter-otlp-proto-http >=1.27.0 + - opentelemetry-exporter-prometheus >=0.48b0 + - opentelemetry-sdk >=1.27.0 + - pillow + - pydantic-settings >=2.4.0,<3 + - pydantic >=2.4.0,<3 + - pyinstrument + - python-json-logger + - sse-starlette >=2.1.3,<3 + - transformers + - typing_extensions + - uvicorn + - python_abi 3.12.* *_cp312 + license: LicenseRef-Modular-Proprietary + size: 124617960 + timestamp: 1737091186397 +- conda: https://conda.modular.com/max-nightly/linux-aarch64/max-python-25.1.0.dev2025011705-3.12release.conda + sha256: 3ec1d98731b5c86829e7dd0d76b3ad820173a418f58833ea0237e34d356b58c6 + md5: 0ed0380d3ee48a36fe43f85f61fd9fe3 + depends: + - max-core ==25.1.0.dev2025011705 release + - python 3.12.* + - fastapi + - httpx + - huggingface_hub + - numpy >=1.18,<2.0 + - opentelemetry-api + - opentelemetry-exporter-otlp-proto-http >=1.27.0 + - opentelemetry-exporter-prometheus >=0.48b0 + - opentelemetry-sdk >=1.27.0 + - pillow + - pydantic-settings >=2.4.0,<3 + - pydantic >=2.4.0,<3 + - pyinstrument + - python-json-logger + - sse-starlette >=2.1.3,<3 + - transformers + - typing_extensions + - uvicorn + - python_abi 3.12.* *_cp312 + license: LicenseRef-Modular-Proprietary + size: 127367910 + timestamp: 1737091778698 +- conda: https://conda.modular.com/max-nightly/osx-arm64/max-python-25.1.0.dev2025011705-3.12release.conda + sha256: 853e12e0ac11f3dcf5392e94cc927233ba940a71a5cf73c0cec54ad4917256c0 + md5: 53e9620bd08e983c5e52e02afef0a990 + depends: + - max-core ==25.1.0.dev2025011705 release + - python 3.12.* + - fastapi + - httpx + - huggingface_hub + - numpy >=1.18,<2.0 + - opentelemetry-api + - opentelemetry-exporter-otlp-proto-http >=1.27.0 + - opentelemetry-exporter-prometheus >=0.48b0 + - opentelemetry-sdk >=1.27.0 + - pillow + - pydantic-settings >=2.4.0,<3 + - pydantic >=2.4.0,<3 + - pyinstrument + - python-json-logger + - sse-starlette >=2.1.3,<3 + - transformers + - typing_extensions + - uvicorn + - python_abi 3.12.* *_cp312 + license: LicenseRef-Modular-Proprietary + size: 110545057 + timestamp: 1737092643234 +- conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011705-release.conda + noarch: python + sha256: 180bbe7d8b76c5d0f453b72f81fae10522b7a98a31e6fbeff542dbb31bb9b613 + md5: 680622d3117019e99ddc173efab357c7 + depends: + - python >=3.9,<3.13 + - click >=8.0.0 + - mypy_extensions >=0.4.3 + - packaging >=22.0 + - pathspec >=0.9.0 + - platformdirs >=2 + - python + license: MIT + size: 130807 + timestamp: 1737091778695 +- conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 + md5: 592132998493b3ff25fd7479396e8351 + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 14465 + timestamp: 1733255681319 +- conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011705-release.conda + noarch: python + sha256: eab543a5c31c091b3d042980d068a950c51905d14a18532710f9be94ba88ba5d + md5: eea061b963a95002a8740d4b4f506d44 + depends: + - max-core ==25.1.0.dev2025011705 release + - python >=3.9,<3.13 + - jupyter_client >=8.6.2,<8.7 + - python + license: LicenseRef-Modular-Proprietary + size: 22929 + timestamp: 1737091778696 +- conda: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.1.0-py312h178313f_2.conda + sha256: b05bc8252a6e957bf4a776ed5e0e61d1ba88cdc46ccb55890c72cc58b10371f4 + md5: 5b5e3267d915a107eca793d52e1b780a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 61507 + timestamp: 1733913288935 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/multidict-6.1.0-py312hcc812fe_2.conda + sha256: ff9f767ba4df68e9ac2a380529a83a2fb6abd985beee9eab16608f7e2c3ccc6e + md5: dcf3ae213cf0ab40ebcc10452e1ed9fa + depends: + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 63077 + timestamp: 1733913233032 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/multidict-6.1.0-py312hdb8e49c_1.conda + sha256: 482fd09fb798090dc8cce2285fa69f43b1459099122eac2fb112d9b922b9f916 + md5: 0048335516fed938e4dd2c457b4c5b9b + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: APACHE + size: 55968 + timestamp: 1729065664275 +- conda: https://conda.anaconda.org/conda-forge/linux-64/multiprocess-0.70.15-py312h98912ed_1.conda + sha256: bb612a921fafda6375a2204ffebd8811db8dd3b8f25ac9886cc9bcbff7e3664e + md5: 5a64b9f44790d9a187a85366dd0ffa8d + depends: + - dill >=0.3.6 + - libgcc-ng >=12 + - python >=3.12.0rc3,<3.13.0a0 + - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 335666 + timestamp: 1695459025249 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/multiprocess-0.70.15-py312hdd3e373_1.conda + sha256: c53362cdf346f314e111faddc53061e3fd2ece0ba68ca303f5dd109976df158f + md5: 173a1692d2b3ddc265dc6afd21a869b3 + depends: + - dill >=0.3.6 + - libgcc-ng >=12 + - python >=3.12.0rc3,<3.13.0a0 + - python >=3.12.0rc3,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + arch: aarch64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 336110 + timestamp: 1695459137796 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/multiprocess-0.70.15-py312h02f2b3b_1.conda + sha256: 8041371e3ec3fbc2ca13c71b0180672896e6382e62892d9f6b11a4c5dd675951 + md5: 910ef2223c71902175418d9163152788 + depends: + - dill >=0.3.6 + - python >=3.12.0rc3,<3.13.0a0 + - python >=3.12.0rc3,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + arch: arm64 + platform: osx + license: BSD-3-Clause + license_family: BSD + size: 335147 + timestamp: 1695459275360 +- conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda + sha256: 1895f47b7d68581a6facde5cb13ab8c2764c2e53a76bd746f8f98910dc4e08fe + md5: 29097e7ea634a45cc5386b95cac6568f + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 10854 + timestamp: 1733230986902 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda + sha256: 17fe6afd8a00446010220d52256bd222b1e4fcb93bd587e7784b03219f3dc358 + md5: 04b34b9a40cdc48cfdab261ab176ff74 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: X11 AND BSD-3-Clause + size: 894452 + timestamp: 1736683239706 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_2.conda + sha256: 9fd726174dde993c560dd6fa1a383e61d546d380e98e0b0348d22512e5d86e24 + md5: 779046fb585c71373e8a051be06c6011 + depends: + - libgcc >=13 + arch: aarch64 + platform: linux + license: X11 AND BSD-3-Clause + size: 928402 + timestamp: 1736683192463 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda + sha256: b45c73348ec9841d5c893acc2e97adff24127548fe8c786109d03c41ed564e91 + md5: f6f7c5b7d0983be186c46c4f6f8f9af8 + depends: + - __osx >=11.0 + arch: arm64 + platform: osx + license: X11 AND BSD-3-Clause + size: 796754 + timestamp: 1736683572099 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda + sha256: fe3459c75cf84dcef6ef14efcc4adb0ade66038ddd27cadb894f34f4797687d8 + md5: d8285bea2a350f63fab23bf460221f3f + depends: + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libgcc-ng >=12 + - liblapack >=3.9.0,<4.0a0 + - libstdcxx-ng >=12 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - numpy-base <0a0 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 7484186 + timestamp: 1707225809722 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-1.26.4-py312h470d778_0.conda + sha256: 23767677a7790bee5457d5e75ebd508b9a31c5354216f4310dd1acfca3f7a6f9 + md5: 9cebf5a06cb87d4569cd68df887af476 + depends: + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libgcc-ng >=12 + - liblapack >=3.9.0,<4.0a0 + - libstdcxx-ng >=12 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - numpy-base <0a0 + arch: aarch64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 6614296 + timestamp: 1707225994762 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-1.26.4-py312h8442bc7_0.conda + sha256: c8841d6d6f61fd70ca80682efbab6bdb8606dc77c68d8acabfbd7c222054f518 + md5: d83fc83d589e2625a3451c9a7e21047c + depends: + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcxx >=16 + - liblapack >=3.9.0,<4.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - numpy-base <0a0 + arch: arm64 + platform: osx + license: BSD-3-Clause + license_family: BSD + size: 6073136 + timestamp: 1707226249608 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.3-h5fbd93e_0.conda + sha256: 5bee706ea5ba453ed7fd9da7da8380dd88b865c8d30b5aaec14d2b6dd32dbc39 + md5: 9e5816bc95d285c115a3ebc2f8563564 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libpng >=1.6.44,<1.7.0a0 + - libstdcxx >=13 + - libtiff >=4.7.0,<4.8.0a0 + - libzlib >=1.3.1,<2.0a0 + arch: x86_64 + platform: linux + license: BSD-2-Clause + license_family: BSD + size: 342988 + timestamp: 1733816638720 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.3-h3f56577_0.conda + sha256: 92d310033e20538e896f4e4b1ea4205eb6604eee7c5c651c4965a0d8d3ca0f1d + md5: 04231368e4af50d11184b50e14250993 + depends: + - libgcc >=13 + - libpng >=1.6.44,<1.7.0a0 + - libstdcxx >=13 + - libtiff >=4.7.0,<4.8.0a0 + - libzlib >=1.3.1,<2.0a0 + arch: aarch64 + platform: linux + license: BSD-2-Clause + license_family: BSD + size: 377796 + timestamp: 1733816683252 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.3-h8a3d83b_0.conda + sha256: 1d59bc72ca7faac06d349c1a280f5cfb8a57ee5896f1e24225a997189d7418c7 + md5: 4b71d78648dbcf68ce8bf22bb07ff838 + depends: + - __osx >=11.0 + - libcxx >=18 + - libpng >=1.6.44,<1.7.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libzlib >=1.3.1,<2.0a0 + arch: arm64 + platform: osx + license: BSD-2-Clause + license_family: BSD + size: 319362 + timestamp: 1733816781741 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda + sha256: f62f6bca4a33ca5109b6d571b052a394d836956d21b25b7ffd03376abf7a481f + md5: 4ce6875f75469b2757a65e10a5d05e31 + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=13 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 2937158 + timestamp: 1736086387286 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.4.0-hd08dc88_1.conda + sha256: 60d34454b861501d7355f25a7b39fdb5de8d56fca49b5bcbe8b8142b7d82dce4 + md5: e21c4767e783a58c373fdb99de6211bf + depends: + - ca-certificates + - libgcc >=13 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 3469279 + timestamp: 1736088141230 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda + sha256: 97772762abc70b3a537683ca9fc3ff3d6099eb64e4aba3b9c99e6fce48422d21 + md5: 22f971393637480bda8c679f374d8861 + depends: + - __osx >=11.0 + - ca-certificates + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: Apache + size: 2936415 + timestamp: 1736086108693 +- conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-api-1.29.0-pyhd8ed1ab_1.conda + sha256: 296280c8ace35c0a1cf72bed1077f248b3af903c3bf92332f1783a207cb5abdb + md5: 307b05402c1a382f2f09426492dee8f8 + depends: + - deprecated >=1.2.6 + - importlib-metadata >=6.0,<=8.5.0 + - python >=3.9 + license: Apache-2.0 + license_family: APACHE + size: 44166 + timestamp: 1734132973331 +- conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-exporter-otlp-proto-common-1.29.0-pyhd8ed1ab_0.conda + sha256: ae9776efe52564e0d6711cfcee7c54439273e57a3999f7f796f66e862f58aae9 + md5: 0c02e74d26bce3fec93b227cf7ea6e6b + depends: + - backoff >=1.10.0,<3.0.0 + - opentelemetry-proto 1.29.0 + - python >=3.9 + license: Apache-2.0 + license_family: APACHE + size: 18922 + timestamp: 1734310457116 +- conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-exporter-otlp-proto-http-1.29.0-pyhd8ed1ab_1.conda + sha256: 5d61db9d5b4f91b3932f5f2348920d5b7fdaa09e52c8ea054cf7bf3f21677c9c + md5: 223f4e56a29601c887f0dc467034af5b + depends: + - deprecated >=1.2.6 + - googleapis-common-protos >=1.52,<2.dev0 + - opentelemetry-api >=1.15,<2.dev0 + - opentelemetry-exporter-otlp-proto-common 1.29.0 + - opentelemetry-proto 1.29.0 + - opentelemetry-sdk 1.29.0 + - python >=3.9 + - requests >=2.7,<3.dev0 + license: Apache-2.0 + license_family: APACHE + size: 17147 + timestamp: 1734345675510 +- conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-exporter-prometheus-1.12.0rc1-pyhd8ed1ab_0.conda + sha256: b8239230dbbdb491401e41b53bd9f21d60551cedef1a8d5807fca1bf9bdd331c + md5: 1ddc95052b31147d1e10d818cf519cf5 + depends: + - opentelemetry-api >=1.10.0 + - opentelemetry-sdk >=1.10.0 + - prometheus_client >=0.5.0,<1.0.0 + - python >=3.6 + license: Apache-2.0 + license_family: APACHE + size: 14721 + timestamp: 1695214221489 +- conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-proto-1.29.0-pyhd8ed1ab_0.conda + sha256: 200a7cb8acc8a0ddd6ef55c5460cec871b6a265929b240a0296c0ccb9c8d9758 + md5: e2a6d2ad10b813c7fdc1c64aac376128 + depends: + - protobuf <6.0,>=5.0 + - python >=3.9 + license: Apache-2.0 + license_family: APACHE + size: 37235 + timestamp: 1734291034372 +- conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-sdk-1.29.0-pyhd8ed1ab_0.conda + sha256: 7b36629d8b8be8a019fcfd1518d7b7f862dd25de96f8adcadb93e4fd12cf9bd6 + md5: 2a8893f06e6ebda4bfa78875bc923ea4 + depends: + - opentelemetry-api 1.29.0 + - opentelemetry-semantic-conventions 0.50b0 + - python >=3.9 + - typing-extensions >=3.7.4 + - typing_extensions >=3.7.4 + license: Apache-2.0 + license_family: APACHE + size: 77645 + timestamp: 1734297838999 +- conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-semantic-conventions-0.50b0-pyh3cfb1c2_0.conda + sha256: 6526e70368d5bf66ef0eaa51fb800d53782dde71a24bd38f40139919a6f784dc + md5: f7111fa4188d646c8108e232d024cb99 + depends: + - deprecated >=1.2.6 + - opentelemetry-api 1.29.0 + - python >=3.9 + license: Apache-2.0 + license_family: APACHE + size: 86084 + timestamp: 1734208980168 +- conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.0.3-h12ee42a_2.conda + sha256: dff5cc8023905782c86b3459055f26d4b97890e403b0698477c9fed15d8669cc + md5: 4f6f9f3f80354ad185e276c120eac3f0 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libprotobuf >=5.28.3,<5.28.4.0a0 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - lz4-c >=1.10.0,<1.11.0a0 + - snappy >=1.2.1,<1.3.0a0 + - tzdata + - zstd >=1.5.6,<1.6.0a0 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 1188881 + timestamp: 1735630209320 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/orc-2.0.3-hdd485aa_2.conda + sha256: b6c67542352a86cdf143c3066d5cda855b74454a156eedcd8958b494c6a32a83 + md5: d19f01b42e5d6a2908b65df435aff42f + depends: + - libgcc >=13 + - libprotobuf >=5.28.3,<5.28.4.0a0 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - lz4-c >=1.10.0,<1.11.0a0 + - snappy >=1.2.1,<1.3.0a0 + - tzdata + - zstd >=1.5.6,<1.6.0a0 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 1167714 + timestamp: 1735630248837 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/orc-2.0.3-h0ff2369_2.conda + sha256: cca330695f3bdb8c0e46350c29cd4af3345865544e36f1d7c9ba9190ad22f5f4 + md5: 24b1897c0d24afbb70704ba998793b78 + depends: + - __osx >=11.0 + - libcxx >=18 + - libprotobuf >=5.28.3,<5.28.4.0a0 + - libzlib >=1.3.1,<2.0a0 + - lz4-c >=1.10.0,<1.11.0a0 + - snappy >=1.2.1,<1.3.0a0 + - tzdata + - zstd >=1.5.6,<1.6.0a0 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: Apache + size: 438520 + timestamp: 1735630624140 +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda + sha256: da157b19bcd398b9804c5c52fc000fcb8ab0525bdb9c70f95beaa0bb42f85af1 + md5: 3bfed7e6228ebf2f7b9eaa47f1b4e2aa + depends: + - python >=3.8 + license: Apache-2.0 + license_family: APACHE + size: 60164 + timestamp: 1733203368787 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py312hf9745cd_1.conda + sha256: ad275a83bfebfa8a8fee9b0569aaf6f513ada6a246b2f5d5b85903d8ca61887e + md5: 8bce4f6caaf8c5448c7ac86d87e26b4b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - numpy >=1.19,<3 + - numpy >=1.22.4 + - python >=3.12,<3.13.0a0 + - python-dateutil >=2.8.1 + - python-tzdata >=2022a + - python_abi 3.12.* *_cp312 + - pytz >=2020.1,<2024.2 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 15436913 + timestamp: 1726879054912 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pandas-2.2.3-py312ha2895bd_2.conda + sha256: a34b10077de97eea72c81cb96e3ddc7d48320c0fc7d9b28ba8d9d2bead1d8297 + md5: 39a91ac336d350513de6aad56da5a920 + depends: + - libgcc >=13 + - libstdcxx >=13 + - numpy >=1.19,<3 + - numpy >=1.22.4 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python-dateutil >=2.8.1 + - python-tzdata >=2022a + - python_abi 3.12.* *_cp312 + - pytz >=2020.1,<2024.2 + constrains: + - fsspec >=2022.11.0 + - s3fs >=2022.11.0 + - fastparquet >=2022.12.0 + - pyreadstat >=1.2.0 + - qtpy >=2.3.0 + - scipy >=1.10.0 + - beautifulsoup4 >=4.11.2 + - gcsfs >=2022.11.0 + - numexpr >=2.8.4 + - sqlalchemy >=2.0.0 + - pyxlsb >=1.0.10 + - numba >=0.56.4 + - lxml >=4.9.2 + - matplotlib >=3.6.3 + - psycopg2 >=2.9.6 + - tzdata >=2022.7 + - bottleneck >=1.3.6 + - xarray >=2022.12.0 + - xlsxwriter >=3.0.5 + - zstandard >=0.19.0 + - blosc >=1.21.3 + - pytables >=3.8.0 + - openpyxl >=3.1.0 + - pyqt5 >=5.15.8 + - tabulate >=0.9.0 + arch: aarch64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 15162992 + timestamp: 1736811533875 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.2.3-py312hcd31e36_1.conda + sha256: ff0cb54b5d058c7987b4a0984066e893642d1865a7bb695294b6172e2fcdc457 + md5: c68bfa69e6086c381c74e16fd72613a8 + depends: + - __osx >=11.0 + - libcxx >=17 + - numpy >=1.19,<3 + - numpy >=1.22.4 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python-dateutil >=2.8.1 + - python-tzdata >=2022a + - python_abi 3.12.* *_cp312 + - pytz >=2020.1,<2024.2 + arch: arm64 + platform: osx + license: BSD-3-Clause + license_family: BSD + size: 14470437 + timestamp: 1726878887799 +- conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda + sha256: 9f64009cdf5b8e529995f18e03665b03f5d07c0b17445b8badef45bde76249ee + md5: 617f15191456cc6a13db418a275435e5 + depends: + - python >=3.9 + license: MPL-2.0 + license_family: MOZILLA + size: 41075 + timestamp: 1733233471940 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-11.1.0-py312h80c1187_0.conda + sha256: 5c347962202b55ae4d8a463e0555c5c6ca33396266a08284bf1384399894e541 + md5: d3894405f05b2c0f351d5de3ae26fa9c + depends: + - __glibc >=2.17,<3.0.a0 + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.5.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.3,<3.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + arch: x86_64 + platform: linux + license: HPND + size: 42749785 + timestamp: 1735929845390 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-11.1.0-py312h719f0cf_0.conda + sha256: 7559556ffc44bda777f85c2e5acd6b5756fa5822c0271b329b7b9a3c6bb20349 + md5: 77e0ec0a6fc847d317f204aa15b59f6b + depends: + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.5.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.3,<3.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + arch: aarch64 + platform: linux + license: HPND + size: 41362848 + timestamp: 1735932311857 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-11.1.0-py312h50aef2c_0.conda + sha256: b29b7c915053e06a7a5b4118760202c572c9c35d23bd6ce8e73270b6a50e50ee + md5: 94d6ba8cd468668a9fb04193b0f4b36e + depends: + - __osx >=11.0 + - freetype >=2.12.1,<3.0a0 + - lcms2 >=2.16,<3.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.5.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openjpeg >=2.5.3,<3.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - tk >=8.6.13,<8.7.0a0 + arch: arm64 + platform: osx + license: HPND + size: 42852329 + timestamp: 1735930118976 +- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_1.conda + sha256: bb50f6499e8bc1d1a26f17716c97984671121608dc0c3ecd34858112bce59a27 + md5: 577852c7e53901ddccc7e6a9959ddebe + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 20448 + timestamp: 1733232756001 +- conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.21.1-pyhd8ed1ab_0.conda + sha256: bc8f00d5155deb7b47702cb8370f233935704100dbc23e30747c161d1b6cf3ab + md5: 3e01e386307acc60b2f89af0b2e161aa + depends: + - python >=3.9 + license: Apache-2.0 + license_family: Apache + size: 49002 + timestamp: 1733327434163 +- conda: https://conda.anaconda.org/conda-forge/linux-64/propcache-0.2.1-py312h66e93f0_0.conda + sha256: 5771311fb5ded614ca349c92579a0b752af55a310f40b71fc533e20625965391 + md5: 55d5742a696d7da1c1262e99b6217ceb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 52747 + timestamp: 1733391916349 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/propcache-0.2.1-py312hb2c0f52_0.conda + sha256: c7f62c11ed929ccf1f3d4a1e200e28be01e8d0e0786bf8f76c5893f2ea681e1b + md5: 50ab8953e7ff1333a4a47cda32e68123 + depends: + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 52484 + timestamp: 1733391993461 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/propcache-0.2.1-py312hea69d52_0.conda + sha256: f8c266c494aa1e4cfb8bf0b6fca060044b2f3d65afe4c5062ebeea382e77aa6d + md5: c84e3dd97fe25a17322c4a0f670c6750 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: APACHE + size: 48225 + timestamp: 1733392308901 +- conda: https://conda.anaconda.org/conda-forge/linux-64/protobuf-5.28.3-py312h2ec8cdc_0.conda + sha256: acb2e0ee948e3941f8ed191cb77f654e06538638aed8ccd71cbc78a15242ebbb + md5: 9d7e427d159c1b2d516cc047ff177c48 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - libprotobuf 5.28.3 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 464794 + timestamp: 1731366525051 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/protobuf-5.28.3-py312h6f74592_0.conda + sha256: 9c575d5035c7ecb114ab9e17906c0a54087d9598dd6a2104c02fe33f0a29dd46 + md5: 06513608c94fb1c1b17136ace77063a9 + depends: + - libgcc >=13 + - libstdcxx >=13 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - libprotobuf 5.28.3 + arch: aarch64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 473242 + timestamp: 1731366577844 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/protobuf-5.28.3-py312hd8f9ff3_0.conda + sha256: 9d572a97419bdace14d7c7cc8cc8c4bf2dcb22b56965dac87a27fbdb5061b926 + md5: 5afbe52a59f04dd1fe566d0d17590d7e + depends: + - __osx >=11.0 + - libcxx >=18 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - libprotobuf 5.28.3 + arch: arm64 + platform: osx + license: BSD-3-Clause + license_family: BSD + size: 448803 + timestamp: 1731367010746 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + sha256: 9c88f8c64590e9567c6c80823f0328e58d3b1efb0e1c539c0315ceca764e0973 + md5: b3c17d95b5a10c6e64a21fa17573e70e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 8252 + timestamp: 1726802366959 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda + sha256: 977dfb0cb3935d748521dd80262fe7169ab82920afd38ed14b7fee2ea5ec01ba + md5: bb5a90c93e3bac3d5690acf76b4a6386 + depends: + - libgcc >=13 + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 8342 + timestamp: 1726803319942 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + sha256: 8ed65e17fbb0ca944bfb8093b60086e3f9dd678c3448b5de212017394c247ee3 + md5: 415816daf82e0b23a736a069a75e9da7 + depends: + - __osx >=11.0 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 8381 + timestamp: 1726802424786 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-18.1.0-py312h7900ff3_0.conda + sha256: 46a61c29375d3bf1933eae61c7861394c168898915d59fc99bf05e46de2ff5ad + md5: ac65b70df28687c6af4270923c020bdd + depends: + - libarrow-acero 18.1.0.* + - libarrow-dataset 18.1.0.* + - libarrow-substrait 18.1.0.* + - libparquet 18.1.0.* + - pyarrow-core 18.1.0 *_0_* + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 25213 + timestamp: 1732610785600 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyarrow-18.1.0-py312h8025657_0.conda + sha256: 49db959887cb89b44053a44a98d0f35644fc0b2003587492f02b56046de0b60a + md5: 9bb7d32e96a5dcb5ea7fd90a11a83656 + depends: + - libarrow-acero 18.1.0.* + - libarrow-dataset 18.1.0.* + - libarrow-substrait 18.1.0.* + - libparquet 18.1.0.* + - pyarrow-core 18.1.0 *_0_* + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 25374 + timestamp: 1732611006864 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-18.1.0-py312h1f38498_0.conda + sha256: 06c0e208d5bf15051874097366c8e8e5db176dffba38526f227a34e80cc8e9bc + md5: 3710616b880b31d0c8afd8ae7e12392a + depends: + - libarrow-acero 18.1.0.* + - libarrow-dataset 18.1.0.* + - libarrow-substrait 18.1.0.* + - libparquet 18.1.0.* + - pyarrow-core 18.1.0 *_0_* + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: APACHE + size: 25375 + timestamp: 1732610892198 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-18.1.0-py312h01725c0_0_cpu.conda + sha256: 948a4161c56f846d374a3721a657e58ddbc992a29b3b3e7a6411975c30361d94 + md5: ee80934a6c280ff8635f8db5dec11e04 + depends: + - __glibc >=2.17,<3.0.a0 + - libarrow 18.1.0.* *cpu + - libgcc >=13 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - numpy >=1.21,<3 + - apache-arrow-proc =*=cpu + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 4612916 + timestamp: 1732610377259 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyarrow-core-18.1.0-py312h66f7834_0_cpu.conda + sha256: e7eb062145be554c23dfefa0ebe8c5f6ae8c59635117a6921e66403d6addcda3 + md5: 3390c8b8f57e85506c92a37cf750bdd7 + depends: + - libarrow 18.1.0.* *cpu + - libgcc >=13 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - numpy >=1.21,<3 + - apache-arrow-proc =*=cpu + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 4406662 + timestamp: 1732610939832 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-core-18.1.0-py312hc40f475_0_cpu.conda + sha256: 063eb168a29d4ce6d9ed865e9e1ad3b6e141712189955a79e06b24ddc0cbbc9c + md5: 9859e7c4b94bbf69772dbf0511101cec + depends: + - __osx >=11.0 + - libarrow 18.1.0.* *cpu + - libcxx >=18 + - libzlib >=1.3.1,<2.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - numpy >=1.21,<3 + - apache-arrow-proc =*=cpu + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: APACHE + size: 3909116 + timestamp: 1732610863261 +- conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + sha256: 79db7928d13fab2d892592223d7570f5061c192f27b9febd1a418427b719acc6 + md5: 12c566707c80111f9799308d9e265aef + depends: + - python >=3.9 + - python + license: BSD-3-Clause + license_family: BSD + size: 110100 + timestamp: 1733195786147 +- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.10.5-pyh3cfb1c2_0.conda + sha256: 0f32c30ddc610cd1113335d8b4f311f20f4d72754b7c1a5d0d9493f597cf11d2 + md5: e8ea30925c8271c4128375810d7d3d7a + depends: + - annotated-types >=0.6.0 + - pydantic-core 2.27.2 + - python >=3.9 + - typing-extensions >=4.6.1 + - typing_extensions >=4.12.2 + license: MIT + license_family: MIT + size: 296805 + timestamp: 1736458364196 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.27.2-py312h12e396e_0.conda + sha256: 81602a4592ad2ac1a1cb57372fd25214e63b1c477d5818b0c21cde0f1f85c001 + md5: bae01b2563030c085f5158c518b84e86 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - typing-extensions >=4.6.0,!=4.7.0 + constrains: + - __glibc >=2.17 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 1641402 + timestamp: 1734571789895 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pydantic-core-2.27.2-py312h8cbf658_0.conda + sha256: 623e0f3846f15d035ce7ab7ae445fc8d9e547b6684ab55858b6f44510d24b097 + md5: 9677f6ab4bf27ba3c2aee70d08c7b27c + depends: + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - typing-extensions >=4.6.0,!=4.7.0 + constrains: + - __glibc >=2.17 + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 1505076 + timestamp: 1734571966615 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pydantic-core-2.27.2-py312hcd83bfe_0.conda + sha256: cfa7201f890d5d08ce29ff70e65a96787d5793a1718776733666b44bbd4a1205 + md5: dcb307e02f17d38c6e1cbfbf8c602852 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - typing-extensions >=4.6.0,!=4.7.0 + constrains: + - __osx >=11.0 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 1593461 + timestamp: 1734571986644 +- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.7.1-pyh3cfb1c2_0.conda + sha256: 082fb1ec29917d2c9ed6a862cb8eb9beb88c208ea62c9fef1aeb5f4f3e0e0b06 + md5: d71d76b62bed332b037d7adfc0f3989a + depends: + - pydantic >=2.7.0 + - python >=3.9 + - python-dotenv >=0.21.0 + license: MIT + license_family: MIT + size: 31822 + timestamp: 1735650532951 +- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda + sha256: 28a3e3161390a9d23bc02b4419448f8d27679d9e2c250e29849e37749c8de86b + md5: 232fb4577b6687b2d503ef8e254270c9 + depends: + - python >=3.9 + license: BSD-2-Clause + license_family: BSD + size: 888600 + timestamp: 1736243563082 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyinstrument-5.0.0-py312h66e93f0_0.conda + sha256: 8a006507a4003fb01eeee2f9ba79f994478694766ea3b445273da5c11cf8e763 + md5: 798f42d9bfdf125dc80ffbec0e96e0b6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 182021 + timestamp: 1728714164706 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyinstrument-5.0.0-py312hb2c0f52_0.conda + sha256: 7967b94b8f0ff75847302444e9c43ac11a391d74da24cb14fba1049fac9e5ba9 + md5: 5274663cb05dfbe316db50af6da4389f + depends: + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + arch: aarch64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 183141 + timestamp: 1728714267954 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyinstrument-5.0.0-py312h0bf5046_0.conda + sha256: 6879d52fb0ec2258e2850476786a652c394220d53883c53691ed5390183ae925 + md5: f0e4a98d54477083ddc9d2f33507f848 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + arch: arm64 + platform: osx + license: BSD-3-Clause + license_family: BSD + size: 181512 + timestamp: 1728714205508 +- conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + sha256: ba3b032fa52709ce0d9fd388f63d330a026754587a2f461117cac9ab73d8d0d8 + md5: 461219d1a5bd61342293efa2c0c90eac + depends: + - __unix + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + size: 21085 + timestamp: 1733217331982 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.8-h9e4cc4f_1_cpython.conda + build_number: 1 + sha256: 3f0e0518c992d8ccfe62b189125721309836fe48a010dc424240583e157f9ff0 + md5: 7fd2fd79436d9b473812f14e86746844 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.6.4,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - liblzma >=5.6.3,<6.0a0 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.47.0,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.4.0,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + constrains: + - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux + license: Python-2.0 + size: 31565686 + timestamp: 1733410597922 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.8-h1683364_1_cpython.conda + build_number: 1 + sha256: 85573582d5b0f79923fed0a8365d3d74d21eee9f0a5fa1b9345f191e006363ab + md5: 09ec612ea05370989eaa3d81abf0f369 + depends: + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-aarch64 >=2.36.1 + - libexpat >=2.6.4,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - liblzma >=5.6.3,<6.0a0 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.47.0,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.4.0,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + constrains: + - python_abi 3.12.* *_cp312 + arch: aarch64 + platform: linux + license: Python-2.0 + size: 13760816 + timestamp: 1733407890896 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.8-hc22306f_1_cpython.conda + build_number: 1 + sha256: 7586a711b1b08a9df8864e26efdc06980bdfb0e18d5ac4651d0fee30a8d3e3a0 + md5: 54ca5b5d92ef3a3ba61e195ee882a518 + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.6.4,<3.0a0 + - libffi >=3.4,<4.0a0 + - liblzma >=5.6.3,<6.0a0 + - libsqlite >=3.47.0,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.4.0,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + constrains: + - python_abi 3.12.* *_cp312 + arch: arm64 + platform: osx + license: Python-2.0 + size: 12998673 + timestamp: 1733408900971 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda + sha256: a50052536f1ef8516ed11a844f9413661829aa083304dc624c5925298d078d79 + md5: 5ba79d7c71f03c678c8ead841f347d6e + depends: + - python >=3.9 + - six >=1.5 + license: Apache-2.0 + license_family: APACHE + size: 222505 + timestamp: 1733215763718 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.0.1-pyhd8ed1ab_1.conda + sha256: 99713f6b534fef94995c6c16fd21d59f3548784e9111775d692bdc7c44678f02 + md5: e5c6ed218664802d305e79cc2d4491de + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + size: 24215 + timestamp: 1733243277223 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda + sha256: 4790787fe1f4e8da616edca4acf6a4f8ed4e7c6967aa31b920208fc8f95efcca + md5: a61bf9ec79426938ff785eb69dbb1960 + depends: + - python >=3.6 + license: BSD-2-Clause + license_family: BSD + size: 13383 + timestamp: 1677079727691 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-multipart-0.0.20-pyhff2d567_0.conda + sha256: 1b03678d145b1675b757cba165a0d9803885807792f7eb4495e48a38858c3cca + md5: a28c984e0429aff3ab7386f7de56de6f + depends: + - python >=3.9 + license: Apache-2.0 + license_family: Apache + size: 27913 + timestamp: 1734420869885 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_1.conda + sha256: 57c9a02ec25926fb48edca59b9ede107823e5d5c473b94a0e05cc0b9a193a642 + md5: c0def296b2f6d2dd7b030c2a7f66bb1f + depends: + - python >=3.9 + license: Apache-2.0 + license_family: APACHE + size: 142235 + timestamp: 1733235414217 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.5.0-py312h66e93f0_1.conda + sha256: 20851b1e59fee127d49e01fc73195a88ab0779f103b7d6ffc90d11142a83678f + md5: 39aed2afe4d0cf76ab3d6b09eecdbea7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - xxhash >=0.8.2,<0.8.3.0a0 + arch: x86_64 + platform: linux + license: BSD-2-Clause + license_family: BSD + size: 23162 + timestamp: 1725272139519 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-xxhash-3.5.0-py312h52516f5_1.conda + sha256: 0fa5ba80073a43391ee90303814adbc9fd826175de1fdac273ba0e5b711aa255 + md5: 591c4ae6d8338dfd07b951e00433a405 + depends: + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - xxhash >=0.8.2,<0.8.3.0a0 + arch: aarch64 + platform: linux + license: BSD-2-Clause + license_family: BSD + size: 23589 + timestamp: 1725273317965 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-xxhash-3.5.0-py312h024a12e_1.conda + sha256: 28204ef48f028a4d872e22040da0dad7ebd703549b010a1bb511b6dd94cf466d + md5: 266fe1ae54a7bb17990206664d0f0ae4 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - xxhash >=0.8.2,<0.8.3.0a0 + arch: arm64 + platform: osx + license: BSD-2-Clause + license_family: BSD + size: 21765 + timestamp: 1725272382968 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.12-5_cp312.conda + build_number: 5 + sha256: d10e93d759931ffb6372b45d65ff34d95c6000c61a07e298d162a3bc2accebb0 + md5: 0424ae29b104430108f5218a66db7260 + constrains: + - python 3.12.* *_cpython + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 6238 + timestamp: 1723823388266 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python_abi-3.12-5_cp312.conda + build_number: 5 + sha256: 5ccdad9981753cc4a2d126e356673a21c0cd5b34e209cb8d476a3947d4ad9b39 + md5: 62b20f305498284a07dc6c45fd0e5c87 + constrains: + - python 3.12.* *_cpython + arch: aarch64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 6329 + timestamp: 1723823366253 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + build_number: 5 + sha256: 49d624e4b809c799d2bf257b22c23cf3fc4460f5570d9a58e7ad86350aeaa1f4 + md5: b76f9b1c862128e56ac7aa8cd2333de9 + constrains: + - python 3.12.* *_cpython + arch: arm64 + platform: osx + license: BSD-3-Clause + license_family: BSD + size: 6278 + timestamp: 1723823099686 +- conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda + sha256: 1a7d6b233f7e6e3bbcbad054c8fd51e690a67b129a899a056a5e45dd9f00cb41 + md5: 3eeeeb9e4827ace8c0c1419c85d590ad + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 188538 + timestamp: 1706886944988 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py312h66e93f0_1.conda + sha256: a60705971e958724168f2ebbb8ed4853067f1d3f7059843df3903e3092bbcffa + md5: 549e5930e768548a89c23f595dac5a95 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - yaml >=0.2.5,<0.3.0a0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 206553 + timestamp: 1725456256213 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.2-py312hb2c0f52_1.conda + sha256: 8c515ebe1e7e85d972d72b75760af9dfac06fd11a9dba7e05c42d69aedbb303c + md5: dc5de424f7dbb9772da720dbb81317b2 + depends: + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - yaml >=0.2.5,<0.3.0a0 + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 199141 + timestamp: 1725456356043 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.2-py312h024a12e_1.conda + sha256: b06f1c15fb39695bbf707ae8fb554b9a77519af577b5556784534c7db10b52e3 + md5: 1ee23620cf46cb15900f70a1300bae55 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - yaml >=0.2.5,<0.3.0a0 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 187143 + timestamp: 1725456547263 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.2.0-py312hbf22597_3.conda + sha256: bc303f9b11e04a515f79cd5ad3bfa0e84b9dfec76552626d6263b38789fe6678 + md5: 746ce19f0829ec3e19c93007b1a224d3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libsodium >=1.0.20,<1.0.21.0a0 + - libstdcxx >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - zeromq >=4.3.5,<4.4.0a0 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 378126 + timestamp: 1728642454632 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-26.2.0-py312h2427ae1_3.conda + sha256: cfc4ea87d68b5f0ed64a61f500d5ea0a2310d1f281a4f95afa06c703ea1bdf7d + md5: 1f0779280c3dc1e72cfd86bd1e59791d + depends: + - libgcc >=13 + - libsodium >=1.0.20,<1.0.21.0a0 + - libstdcxx >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - zeromq >=4.3.5,<4.4.0a0 + arch: aarch64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 371730 + timestamp: 1728644030875 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-26.2.0-py312hf8a1cbd_3.conda + sha256: 2e0ca1bb9ab3af5d1f9b38548d65be7097ba0246e7e63c908c9b1323df3f45b5 + md5: 7bdaa4c2a84b744ef26c8b2ba65c3d0e + depends: + - __osx >=11.0 + - libcxx >=17 + - libsodium >=1.0.20,<1.0.21.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zeromq >=4.3.5,<4.4.0a0 + arch: arm64 + platform: osx + license: BSD-3-Clause + license_family: BSD + size: 361674 + timestamp: 1728642457661 +- conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2024.07.02-h9925aae_2.conda + sha256: d213c44958d49ce7e0d4d5b81afec23640cce5016685dbb2d23571a99caa4474 + md5: e84ddf12bde691e8ec894b00ea829ddf + depends: + - libre2-11 2024.07.02 hbbce691_2 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 26786 + timestamp: 1735541074034 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/re2-2024.07.02-haa97905_2.conda + sha256: 040848655df9119bae5a549fb5c8956a5537120859416c1d9d0712b7bac9f12e + md5: 1bf0135339b4a7419a198a795d2d4be0 + depends: + - libre2-11 2024.07.02 h18dbdb1_2 + arch: aarch64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 26830 + timestamp: 1735540999398 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2024.07.02-h6589ca4_2.conda + sha256: 4d3799c05f8f662922a0acd129d119774760a3281b883603678e128d1cb307fb + md5: 7a8b4ad8c58a3408ca89d78788c78178 + depends: + - libre2-11 2024.07.02 h07bc746_2 + arch: arm64 + platform: osx + license: BSD-3-Clause + license_family: BSD + size: 26861 + timestamp: 1735541088455 +- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7 + md5: 47d31b792659ce70f470b5c82fdfb7a4 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + arch: x86_64 + platform: linux + license: GPL-3.0-only + license_family: GPL + size: 281456 + timestamp: 1679532220005 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8fc344f_1.conda + sha256: 4c99f7417419734e3797d45bc355e61c26520e111893b0d7087a01a7fbfbe3dd + md5: 105eb1e16bf83bfb2eb380a48032b655 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + arch: aarch64 + platform: linux + license: GPL-3.0-only + license_family: GPL + size: 294092 + timestamp: 1679532238805 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + sha256: a1dfa679ac3f6007362386576a704ad2d0d7a02e98f5d0b115f207a2da63e884 + md5: 8cbb776a2f641b943d413b3e19df71f4 + depends: + - ncurses >=6.3,<7.0a0 + arch: arm64 + platform: osx + license: GPL-3.0-only + license_family: GPL + size: 250351 + timestamp: 1679532511311 +- conda: https://conda.anaconda.org/conda-forge/linux-64/regex-2024.11.6-py312h66e93f0_0.conda + sha256: fcb5687d3ec5fff580b64b8fb649d9d65c999a91a5c3108a313ecdd2de99f06b + md5: 647770db979b43f9c9ca25dcfa7dc4e4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux + license: Python-2.0 + license_family: PSF + size: 402821 + timestamp: 1730952378415 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/regex-2024.11.6-py312hb2c0f52_0.conda + sha256: ec2c416860de29224e447e2031f8686a05476759c17da1f32f61d4307e540ec8 + md5: fa8b589107567f532fa1380e66f91776 + depends: + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + arch: aarch64 + platform: linux + license: Python-2.0 + license_family: PSF + size: 398947 + timestamp: 1730952477463 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/regex-2024.11.6-py312hea69d52_0.conda + sha256: dcdec32f2c7dd37986baa692bedf9db126ad34e92e5e9b64f707cba3d04d2525 + md5: e73cda1f18846b608284bd784f061eac + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + arch: arm64 + platform: osx + license: Python-2.0 + license_family: PSF + size: 366374 + timestamp: 1730952427552 +- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda + sha256: d701ca1136197aa121bbbe0e8c18db6b5c94acbd041c2b43c70e5ae104e1d8ad + md5: a9b9368f3701a417eac9edbcae7cb737 + depends: + - certifi >=2017.4.17 + - charset-normalizer >=2,<4 + - idna >=2.5,<4 + - python >=3.9 + - urllib3 >=1.21.1,<3 + constrains: + - chardet >=3.0.2,<6 + license: Apache-2.0 + license_family: APACHE + size: 58723 + timestamp: 1733217126197 +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-13.9.4-pyhd8ed1ab_1.conda + sha256: 06a760c5ae572e72e865d5a87e9fe3cc171e1a9c996e63daf3db52ff1a0b4457 + md5: 7aed65d4ff222bfb7335997aa40b7da5 + depends: + - markdown-it-py >=2.2.0 + - pygments >=2.13.0,<3.0.0 + - python >=3.9 + - typing_extensions >=4.0.0,<5.0.0 + license: MIT + license_family: MIT + size: 185646 + timestamp: 1733342347277 +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-toolkit-0.11.3-pyh29332c3_0.conda + sha256: e558f8c254a9ff9164d069110da162fc79497d70c60f2c09a5d3d0d7101c5628 + md5: 4ba15ae9388b67d09782798347481f69 + depends: + - python >=3.9 + - rich >=13.7.1 + - click >=8.1.7 + - typing_extensions >=4.12.2 + - python + license: MIT + license_family: MIT + size: 17357 + timestamp: 1733750834072 +- conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.10-hb5b8611_0.conda + sha256: f6d451821fddc26b93f45e9313e1ea15e09e5ef049d4e137413a5225d2a5dfba + md5: 999f3673f2a011f59287f2969e3749e4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - openssl >=3.4.0,<4.0a0 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 355142 + timestamp: 1734415467047 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/s2n-1.5.10-h5df210e_0.conda + sha256: b5e7a9f4b7b1ec5c5c3661e2defc8b47fab543b05cad6fec78739d8007612464 + md5: 3d3979efcc0f44f3f0cef3de03b296cc + depends: + - libgcc >=13 + - openssl >=3.4.0,<4.0a0 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 353450 + timestamp: 1734415474615 +- conda: https://conda.anaconda.org/conda-forge/linux-64/safetensors-0.5.2-py312h12e396e_0.conda + sha256: 98b8dfa5eec083e0b3ace00906a7f7e748b1e2446dca17e87473f43278fcc036 + md5: 999ca9d87d2bb8b4c01e62c755b928cf + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 424409 + timestamp: 1736383159339 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/safetensors-0.5.2-py312h8cbf658_0.conda + sha256: 3e230060c1366cbaf03f4315b021dfe47f5147f3af88f17975d661c08fe15ad3 + md5: 2c77c961c4e813b1d05122ac4d803d80 + depends: + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 408166 + timestamp: 1736383184569 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/safetensors-0.5.2-py312hcd83bfe_0.conda + sha256: 0aeb3e654095ca0261d560d1fc05912d0e94d547a7dc435d7f4cedeba966d176 + md5: fc0383682805e293eba9b8afc9ad0931 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - __osx >=11.0 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: APACHE + size: 378060 + timestamp: 1736383410115 +- conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_1.conda + sha256: 0557c090913aa63cdbe821dbdfa038a321b488e22bc80196c4b3b1aace4914ef + md5: 7c3c2a0f3ebdea2bbc35538d162b43bf + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 14462 + timestamp: 1733301007770 +- conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda + sha256: 41db0180680cc67c3fa76544ffd48d6a5679d96f4b71d7498a759e94edc9a2db + md5: a451d576819089b0d672f18768be0f65 + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 16385 + timestamp: 1733381032766 +- conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.1-h8bd8927_1.conda + sha256: ec91e86eeb2c6bbf09d51351b851e945185d70661d2ada67204c9a6419d282d3 + md5: 3b3e64af585eadfb52bb90b553db5edf + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 42739 + timestamp: 1733501881851 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/snappy-1.2.1-hd4fb6f5_1.conda + sha256: c4a07ae5def8d55128f25a567a296ef9d7bf99a3bc79d46bd5160c076a5f50af + md5: 2fcc6cd1e5550deb509073fd2e6693e1 + depends: + - libgcc >=13 + - libstdcxx >=13 + arch: aarch64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 43032 + timestamp: 1733501964775 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.1-h98b9ce2_1.conda + sha256: 4242f95b215127a006eb664fe26ed5a82df87e90cbdbc7ce7ff4971f0720997f + md5: ded86dee325290da2967a3fea3800eb5 + depends: + - __osx >=11.0 + - libcxx >=18 + arch: arm64 + platform: osx + license: BSD-3-Clause + license_family: BSD + size: 35857 + timestamp: 1733502172664 +- conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda + sha256: c2248418c310bdd1719b186796ae50a8a77ce555228b6acd32768e2543a15012 + md5: bf7a226e58dfb8346c70df36065d86c9 + depends: + - python >=3.9 + license: Apache-2.0 + license_family: Apache + size: 15019 + timestamp: 1733244175724 +- conda: https://conda.anaconda.org/conda-forge/noarch/sse-starlette-2.2.1-pyhd8ed1ab_0.conda + sha256: 3c6a476e7afb702d841e23c61a0c4cc491929d2e39376d329e67e94c40a236cc + md5: c1ef6bc13dd2caa4b406fb3cb06c2791 + depends: + - anyio >=4.7.0 + - python >=3.9 + - starlette >=0.41.3 + license: BSD-3-Clause + license_family: BSD + size: 15324 + timestamp: 1735126414893 +- conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.41.3-pyha770c72_1.conda + sha256: b74fc76107487eb26624c01fc55bfab7eed03ae82e003333c86d8a1eeac53672 + md5: 0207dac04ae2200701fab697f0aaaac4 + depends: + - anyio >=3.4.0,<5 + - python >=3.9 + - typing_extensions >=3.10.0 + license: BSD-3-Clause + license_family: BSD + size: 58838 + timestamp: 1733344472634 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e + md5: d453b98d9c83e71da0741bb0ff4d76bc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + arch: x86_64 + platform: linux + license: TCL + license_family: BSD + size: 3318875 + timestamp: 1699202167581 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-h194ca79_0.conda + sha256: 7fa27cc512d3a783f38bd16bbbffc008807372499d5b65d089a8e43bde9db267 + md5: f75105e0585851f818e0009dd1dde4dc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + arch: aarch64 + platform: linux + license: TCL + license_family: BSD + size: 3351802 + timestamp: 1695506242997 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + sha256: 72457ad031b4c048e5891f3f6cb27a53cb479db68a52d965f796910e71a403a8 + md5: b50a57ba89c32b62428b71a875291c9b + depends: + - libzlib >=1.2.13,<2.0.0a0 + arch: arm64 + platform: osx + license: TCL + license_family: BSD + size: 3145523 + timestamp: 1699202432999 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tokenizers-0.21.0-py312h8360d73_0.conda + sha256: 4f504a5e9d77c6d88a8f735c4319429d8bf40b742384f908a2efe0a09acc3cc5 + md5: f953aa733207f3d37acf4a3efbedba89 + depends: + - __glibc >=2.17,<3.0.a0 + - huggingface_hub >=0.16.4,<1.0 + - libgcc >=13 + - libstdcxx >=13 + - openssl >=3.4.0,<4.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 2258007 + timestamp: 1732734202127 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tokenizers-0.21.0-py312ha0d6ea1_0.conda + sha256: ef0f4d4e2c798b1821187ea0ba4c86484e48abaa0e9a19fe68030fa7ff5dde84 + md5: 077f48c9e0c08a30d842e15c51df4143 + depends: + - huggingface_hub >=0.16.4,<1.0 + - libgcc >=13 + - libstdcxx >=13 + - openssl >=3.4.0,<4.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: APACHE + size: 2331194 + timestamp: 1732734303196 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tokenizers-0.21.0-py312hf3e4074_0.conda + sha256: 5d395333fcb22dc611140286c1f2ea8b3fa220a4931c583587cb612238091555 + md5: 4c732c74b485ef7ac8ec1c548dd45e8e + depends: + - __osx >=11.0 + - huggingface_hub >=0.16.4,<1.0 + - libcxx >=18 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - __osx >=11.0 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: APACHE + size: 1931389 + timestamp: 1732734727624 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.2-py312h66e93f0_0.conda + sha256: 062a3a3a37fa8615ce57929ba7e982c76f5a5810bcebd435950f6d6c4147c310 + md5: e417822cb989e80a0d2b1b576fdd1657 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 840414 + timestamp: 1732616043734 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.4.2-py312h52516f5_0.conda + sha256: 4c19a544354172b2273553267e734795a6da3c78a04c2d19f8e9e159ca3178bc + md5: e28996d9d2d44d777b7e6fb12f63715b + depends: + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 841662 + timestamp: 1732616934923 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.4.2-py312hea69d52_0.conda + sha256: 964a2705a36c50040c967b18b45b9cc8de3c2aff4af546979a574e0b38e58e39 + md5: fb0605888a475d6a380ae1d1a819d976 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: Apache + size: 842549 + timestamp: 1732616081362 +- conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda + sha256: 11e2c85468ae9902d24a27137b6b39b4a78099806e551d390e394a8c34b48e40 + md5: 9efbfdc37242619130ea42b1cc4ed861 + depends: + - colorama + - python >=3.9 + license: MPL-2.0 or MIT + size: 89498 + timestamp: 1735661472632 +- conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + sha256: f39a5620c6e8e9e98357507262a7869de2ae8cc07da8b7f84e517c9fd6c2b959 + md5: 019a7385be9af33791c989871317e1ed + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + size: 110051 + timestamp: 1733367480074 +- conda: https://conda.anaconda.org/conda-forge/noarch/transformers-4.48.0-pyhd8ed1ab_0.conda + sha256: c8dd6d69e4ef67c7d507dec2be4b6964f6ddbe1ce35a822ddf4089505d702f33 + md5: 2c57d4af7b8952484962b40a59cf1537 + depends: + - datasets !=2.5.0 + - filelock + - huggingface_hub >=0.23.0,<1.0 + - numpy >=1.17 + - packaging >=20.0 + - python >=3.9 + - pyyaml >=5.1 + - regex !=2019.12.17 + - requests + - safetensors >=0.4.1 + - tokenizers >=0.21,<0.22 + - tqdm >=4.27 + license: Apache-2.0 + license_family: APACHE + size: 3408277 + timestamp: 1736534112195 +- conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.15.1-pyhd8ed1ab_0.conda + sha256: ef695490e895c2ad552c77ec497b899b09fd4ad4ab07edcf5649f5994cf92a35 + md5: 170a0398946d8f5b454e592672b6fc20 + depends: + - python >=3.9 + - typer-slim-standard 0.15.1 hd8ed1ab_0 + license: MIT + license_family: MIT + size: 56175 + timestamp: 1733408582623 +- conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.15.1-pyhd8ed1ab_0.conda + sha256: d4965516f35e0805199de6596c4ac76c4ad3d6b012be35e532102f9e53ecb860 + md5: 0218b16f5a1dd569e575a7a6415489db + depends: + - click >=8.0.0 + - python >=3.9 + - typing_extensions >=3.7.4.3 + constrains: + - rich >=10.11.0 + - typer >=0.15.1,<0.15.2.0a0 + - shellingham >=1.3.0 + license: MIT + license_family: MIT + size: 43592 + timestamp: 1733408569554 +- conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.1-hd8ed1ab_0.conda + sha256: f31c56fe98315da8b9ce848256c17e0b9f87896b41a6ccf0c9cc74644dcef20f + md5: 4e603c43bfdfc7b533be087c3e070cc9 + depends: + - rich + - shellingham + - typer-slim 0.15.1 pyhd8ed1ab_0 + license: MIT + license_family: MIT + size: 49531 + timestamp: 1733408570063 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda + noarch: python + sha256: c8e9c1c467b5f960b627d7adc1c65fece8e929a3de89967e91ef0f726422fd32 + md5: b6a408c64b78ec7b779a3e5c7a902433 + depends: + - typing_extensions 4.12.2 pyha770c72_1 + license: PSF-2.0 + license_family: PSF + size: 10075 + timestamp: 1733188758872 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda + sha256: 337be7af5af8b2817f115b3b68870208b30c31d3439bec07bfb2d8f4823e3568 + md5: d17f13df8b65464ca316cbc000a3cb64 + depends: + - python >=3.9 + license: PSF-2.0 + license_family: PSF + size: 39637 + timestamp: 1733188758212 +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda + sha256: c4b1ae8a2931fe9b274c44af29c5475a85b37693999f8c792dad0f8c6734b1de + md5: dbcace4706afdfb7eb891f7b37d07c04 + license: LicenseRef-Public-Domain + size: 122921 + timestamp: 1737119101255 +- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda + sha256: 114919ffa80c328127dab9c8e7a38f9d563c617691fb81fccb11c1e86763727e + md5: 32674f8dbfb7b26410ed580dd3c10a29 + depends: + - brotli-python >=1.0.9 + - h2 >=4,<5 + - pysocks >=1.5.6,<2.0,!=1.5.7 + - python >=3.9 + - zstandard >=0.18.0 + license: MIT + license_family: MIT + size: 100102 + timestamp: 1734859520452 +- conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.0-pyh31011fe_0.conda + sha256: 55c160b0cf9274e2b98bc0f7fcce548bffa8d788bc86aa02801877457040f6fa + md5: 5d448feee86e4740498ec8f8eb40e052 + depends: + - __unix + - click >=7.0 + - h11 >=0.8 + - python >=3.9 + - typing_extensions >=4.0 + license: BSD-3-Clause + license_family: BSD + size: 48643 + timestamp: 1734293057914 +- conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.34.0-h31011fe_0.conda + sha256: 87e1531e175e75122f9f37608eb953af4c977465ab0ae11283cc01fef954e4ec + md5: 32a94143a7f65d76d2d5da37dcb4ed79 + depends: + - __unix + - httptools >=0.6.3 + - python-dotenv >=0.13 + - pyyaml >=5.1 + - uvicorn 0.34.0 pyh31011fe_0 + - uvloop >=0.14.0,!=0.15.0,!=0.15.1 + - watchfiles >=0.13 + - websockets >=10.4 + license: BSD-3-Clause + license_family: BSD + size: 7203 + timestamp: 1734293058849 +- conda: https://conda.anaconda.org/conda-forge/linux-64/uvloop-0.21.0-py312h66e93f0_1.conda + sha256: 9337a80165fcf70b06b9d6ba920dad702260ca966419ae77560a15540e41ab72 + md5: 998e481e17c1b6a74572e73b06f2df08 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libuv >=1.49.2,<2.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux + license: MIT OR Apache-2.0 + size: 701355 + timestamp: 1730214506716 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uvloop-0.21.0-py312hb2c0f52_1.conda + sha256: 807eede6698bd00a1d739a3e19ee6ae6a03a66d2ddd2ef150f2dfd198c3b0292 + md5: d83e107ba16c77aba2feec47b7b666a4 + depends: + - libgcc >=13 + - libuv >=1.49.2,<2.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + arch: aarch64 + platform: linux + license: MIT OR Apache-2.0 + size: 655266 + timestamp: 1730214606664 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/uvloop-0.21.0-py312h0bf5046_1.conda + sha256: b1efa77aa4871d7bb09c8dd297fa9bd9070ba7f0f95f2d12ae9cdd31ce8b6b22 + md5: 4f5110253ba80ebf27e55c4ab333880a + depends: + - __osx >=11.0 + - libuv >=1.49.2,<2.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + arch: arm64 + platform: osx + license: MIT OR Apache-2.0 + size: 544097 + timestamp: 1730214653726 +- conda: https://conda.anaconda.org/conda-forge/linux-64/watchfiles-1.0.4-py312h12e396e_0.conda + sha256: b728f525dcae2c10524f9942255346eba62aee9c820ff269d7dd4f7caffb7ffb + md5: df87129c4cb7afc4a3cbad71a1b9e223 + depends: + - __glibc >=2.17,<3.0.a0 + - anyio >=3.0.0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 410192 + timestamp: 1736550568524 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/watchfiles-1.0.4-py312h8cbf658_0.conda + sha256: 45193910f6bafc287c784442d173745161b18f96223f0f990a9a744fda753787 + md5: ed958a27e610c31de625e167d4c11a04 + depends: + - anyio >=3.0.0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - __glibc >=2.17 + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 403791 + timestamp: 1736550743174 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/watchfiles-1.0.4-py312hcd83bfe_0.conda + sha256: 84122e3712f2263e12c9d2be75d122eaf2d269801183df4b73aadcb670943b17 + md5: 946eb0208d09b811a671fad9b2831f4e + depends: + - __osx >=11.0 + - anyio >=3.0.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - __osx >=11.0 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 363822 + timestamp: 1736550859472 +- conda: https://conda.anaconda.org/conda-forge/linux-64/websockets-14.1-py312h66e93f0_0.conda + sha256: 5998940f91765ba991cf286c863c20bcb53db92bb976a2b5a714566b86b0e763 + md5: a79f7ce618bd0a9f4c00c59a03570fcd + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 242145 + timestamp: 1731498716195 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/websockets-14.1-py312hb2c0f52_0.conda + sha256: c292a8badcbe4040537e225fbeb237bfaf272808eab060067d965d3da98ccd5c + md5: 7e2a0ef2a1a87f88f9745f9c7059186e + depends: + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + arch: aarch64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 242912 + timestamp: 1731498811466 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/websockets-14.1-py312hea69d52_0.conda + sha256: 98fb04a1a0f53dc604378f94b5795d0b8e462fee01bf0a887cb34d0efdf5d21f + md5: 89b79a9baa7db46ce21f5738a5a3dfda + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + arch: arm64 + platform: osx + license: BSD-3-Clause + license_family: BSD + size: 243131 + timestamp: 1731498944076 +- conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.2-py312h66e93f0_0.conda + sha256: ed3a1700ecc5d38c7e7dc7d2802df1bc1da6ba3d6f6017448b8ded0affb4ae00 + md5: 669e63af87710f8d52fdec9d4d63b404 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux + license: BSD-2-Clause + license_family: BSD + size: 63590 + timestamp: 1736869574299 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-1.17.2-py312hb2c0f52_0.conda + sha256: cc28914462a21b2f64d9b763a9733bfcbc811dd2975d0d2e6e429e35f5b6d59c + md5: 8a5c6e3f809bae085be369b62dc5d06a + depends: + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + arch: aarch64 + platform: linux + license: BSD-2-Clause + license_family: BSD + size: 63967 + timestamp: 1736869675870 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.2-py312hea69d52_0.conda + sha256: 6a3e68b57de29802e8703d1791dcacb7613bfdc17bbb087c6b2ea2796e6893ef + md5: e49608c832fcf438f70cbcae09c3adc5 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + arch: arm64 + platform: osx + license: BSD-2-Clause + license_family: BSD + size: 61198 + timestamp: 1736869673767 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb9d3cd8_0.conda + sha256: ed10c9283974d311855ae08a16dfd7e56241fac632aec3b92e3cfe73cff31038 + md5: f6ebe2cb3f82ba6c057dde5d9debe4f7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 14780 + timestamp: 1734229004433 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.12-h86ecc28_0.conda + sha256: 7829a0019b99ba462aece7592d2d7f42e12d12ccd3b9614e529de6ddba453685 + md5: d5397424399a66d33c80b1f2345a36a6 + depends: + - libgcc >=13 + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 15873 + timestamp: 1734230458294 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-h5505292_0.conda + sha256: f33e6f013fc36ebc200f09ddead83468544cb5c353a3b50499b07b8c34e28a8d + md5: 50901e0764b7701d8ed7343496f4f301 + depends: + - __osx >=11.0 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 13593 + timestamp: 1734229104321 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda + sha256: 6b250f3e59db07c2514057944a3ea2044d6a8cdde8a47b6497c254520fade1ee + md5: 8035c64cb77ed555e3f150b7b3972480 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 19901 + timestamp: 1727794976192 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-h57736b2_0.conda + sha256: efcc150da5926cf244f757b8376d96a4db78bc15b8d90ca9f56ac6e75755971f + md5: 25a5a7b797fe6e084e04ffe2db02fc62 + depends: + - libgcc >=13 + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 20615 + timestamp: 1727796660574 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda + sha256: 9939a166d780700d81023546759102b33fdc2c5f11ef09f5f66c77210fd334c8 + md5: 77c447f48cab5d3a15ac224edb86a968 + depends: + - __osx >=11.0 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 18487 + timestamp: 1727795205022 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xxhash-0.8.2-hd590300_0.conda + sha256: 6fe74a8fd84ab0dc25e4dc3e0c22388dd8accb212897a208b14fe5d4fbb8fc2f + md5: f08fb5c89edfc4aadee1c81d4cfb1fa1 + depends: + - libgcc-ng >=12 + arch: x86_64 + platform: linux + license: BSD-2-Clause + license_family: BSD + size: 97691 + timestamp: 1689951608120 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xxhash-0.8.2-h31becfc_0.conda + sha256: 4c526aed70b579d80e5c20d32130b6bc8bde59b3250d43c2b5269755f4da8a9b + md5: bb9faf6857108a9f62ebb4dab6ef05da + depends: + - libgcc-ng >=12 + arch: aarch64 + platform: linux + license: BSD-2-Clause + license_family: BSD + size: 102442 + timestamp: 1689951682147 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/xxhash-0.8.2-hb547adb_0.conda + sha256: a70f59f7221ee72c45b39a6b36a33eb9c717ba01921cce1a3c361a4676979a2e + md5: 144cd3b88706507f332f5eb5fb83a33b + arch: arm64 + platform: osx + license: BSD-2-Clause + license_family: BSD + size: 97593 + timestamp: 1689951969732 +- conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 + sha256: a4e34c710eeb26945bdbdaba82d3d74f60a78f54a874ec10d373811a5d217535 + md5: 4cb3ad778ec2d5a7acbdf254eb1c42ae + depends: + - libgcc-ng >=9.4.0 + arch: x86_64 + platform: linux + license: MIT + license_family: MIT + size: 89141 + timestamp: 1641346969816 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-0.2.5-hf897c2e_2.tar.bz2 + sha256: 8bc601d6dbe249eba44b3c456765265cd8f42ef1e778f8df9b0c9c88b8558d7e + md5: b853307650cb226731f653aa623936a4 + depends: + - libgcc-ng >=9.4.0 + arch: aarch64 + platform: linux + license: MIT + license_family: MIT + size: 92927 + timestamp: 1641347626613 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h3422bc3_2.tar.bz2 + sha256: 93181a04ba8cfecfdfb162fc958436d868cc37db504c58078eab4c1a3e57fbb7 + md5: 4bb3f014845110883a3c5ee811fd84b4 + arch: arm64 + platform: osx + license: MIT + license_family: MIT + size: 88016 + timestamp: 1641347076660 +- conda: https://conda.anaconda.org/conda-forge/linux-64/yarl-1.18.3-py312h66e93f0_0.conda + sha256: a0d93c3bef723e384cff8a29a82a2c6b7a73b39328088f3a2d97c901f56e9a63 + md5: 91df2efaa08730416bec2a4502309275 + depends: + - __glibc >=2.17,<3.0.a0 + - idna >=2.0 + - libgcc >=13 + - multidict >=4.0 + - propcache >=0.2.1 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + arch: x86_64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 151393 + timestamp: 1733428897813 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yarl-1.18.3-py312hb2c0f52_0.conda + sha256: 470b5b0f3ac89acd143095281167dc2ac1a56d4fa22e1794bd8f3b00bb604540 + md5: 0b3c640697bca798d0ab428f530ed24c + depends: + - idna >=2.0 + - libgcc >=13 + - multidict >=4.0 + - propcache >=0.2.1 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + arch: aarch64 + platform: linux + license: Apache-2.0 + license_family: Apache + size: 150004 + timestamp: 1733429056665 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/yarl-1.18.3-py312hea69d52_0.conda + sha256: 69c7863809e11bc90c0d935c16e7f151dcc925add08b3894f06059263a8cb9ba + md5: f32f9b16361866a62d6e061fcd7eb400 + depends: + - __osx >=11.0 + - idna >=2.0 + - multidict >=4.0 + - propcache >=0.2.1 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + arch: arm64 + platform: osx + license: Apache-2.0 + license_family: Apache + size: 141556 + timestamp: 1733429104990 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h3b0a872_7.conda + sha256: a4dc72c96848f764bb5a5176aa93dd1e9b9e52804137b99daeebba277b31ea10 + md5: 3947a35e916fcc6b9825449affbf4214 + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.21.3,<1.22.0a0 + - libgcc >=13 + - libsodium >=1.0.20,<1.0.21.0a0 + - libstdcxx >=13 + arch: x86_64 + platform: linux + license: MPL-2.0 + license_family: MOZILLA + size: 335400 + timestamp: 1731585026517 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-h5efb499_7.conda + sha256: a6003096dc0570a86492040ba32b04ce7662b159600be2252b7a0dfb9414e21c + md5: f2f3282559a4b87b7256ecafb4610107 + depends: + - krb5 >=1.21.3,<1.22.0a0 + - libgcc >=13 + - libsodium >=1.0.20,<1.0.21.0a0 + - libstdcxx >=13 + arch: aarch64 + platform: linux + license: MPL-2.0 + license_family: MOZILLA + size: 371419 + timestamp: 1731589490850 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-hc1bb282_7.conda + sha256: 9e585569fe2e7d3bea71972cd4b9f06b1a7ab8fa7c5139f92a31cbceecf25a8a + md5: f7e6b65943cb73bce0143737fded08f1 + depends: + - __osx >=11.0 + - krb5 >=1.21.3,<1.22.0a0 + - libcxx >=18 + - libsodium >=1.0.20,<1.0.21.0a0 + arch: arm64 + platform: osx + license: MPL-2.0 + license_family: MOZILLA + size: 281565 + timestamp: 1731585108039 +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda + sha256: 567c04f124525c97a096b65769834b7acb047db24b15a56888a322bf3966c3e1 + md5: 0c3cc595284c5e8f0f9900a9b228a332 + depends: + - python >=3.9 + license: MIT + license_family: MIT + size: 21809 + timestamp: 1732827613585 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312hef9b889_1.conda + sha256: b97015e146437283f2213ff0e95abdc8e2480150634d81fbae6b96ee09f5e50b + md5: 8b7069e9792ee4e5b4919a7a306d2e67 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.11 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 419552 + timestamp: 1725305670210 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.23.0-py312hb698573_1.conda + sha256: 2681c2a249752bdc7978e59ee2f34fcdfcbfda80029b84b8e5fec8dbc9e3af25 + md5: ffcb8e97e62af42075e0e5f46bb9856e + depends: + - cffi >=1.11 + - libgcc >=13 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + arch: aarch64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 392496 + timestamp: 1725305808244 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312h15fbf35_1.conda + sha256: d00ca25c1e28fd31199b26a94f8c96574475704a825d244d7a6351ad3745eeeb + md5: a4cde595509a7ad9c13b1a3809bcfe51 + depends: + - __osx >=11.0 + - cffi >=1.11 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + arch: arm64 + platform: osx + license: BSD-3-Clause + license_family: BSD + size: 330788 + timestamp: 1725305806565 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + sha256: c558b9cc01d9c1444031bd1ce4b9cff86f9085765f17627a6cd85fc623c8a02b + md5: 4d056880988120e29d75bfff282e0f45 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + arch: x86_64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 554846 + timestamp: 1714722996770 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.6-h02f22dd_0.conda + sha256: 484f9d0722c77685ae379fbff3ccd662af9ead7e59eb39cd6d0c677cdf25ff6c + md5: be8d5f8cf21aed237b8b182ea86b3dd6 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + arch: aarch64 + platform: linux + license: BSD-3-Clause + license_family: BSD + size: 539937 + timestamp: 1714723130243 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + sha256: 2d4fd1ff7ee79cd954ca8e81abf11d9d49954dd1fef80f27289e2402ae9c2e09 + md5: d96942c06c3e84bfcc5efb038724a7fd + depends: + - __osx >=11.0 + - libzlib >=1.2.13,<2.0.0a0 + arch: arm64 + platform: osx + license: BSD-3-Clause + license_family: BSD + size: 405089 + timestamp: 1714723101397 diff --git a/examples/testing/mojoproject.toml b/examples/testing/mojoproject.toml new file mode 100644 index 0000000000..487fdcfa48 --- /dev/null +++ b/examples/testing/mojoproject.toml @@ -0,0 +1,16 @@ +[project] +authors = ["Modular "] +channels = ["conda-forge", "https://conda.modular.com/max-nightly"] +description = "An example of using the Mojo testing framework" +name = "testing" +platforms = ["osx-arm64", "linux-64", "linux-aarch64"] +version = "0.1.0" + +[tasks] +main = "mojo run src/example.mojo" +doc-tests = "mojo test src" +unit-tests = "mojo test -I src test" +tests = { depends-on = ["doc-tests", "unit-tests"] } + +[dependencies] +max = "*" diff --git a/examples/testing/src/example.mojo b/examples/testing/src/example.mojo new file mode 100644 index 0000000000..28807bbccb --- /dev/null +++ b/examples/testing/src/example.mojo @@ -0,0 +1,26 @@ +# ===----------------------------------------------------------------------=== # +# Copyright (c) 2025, Modular Inc. All rights reserved. +# +# Licensed under the Apache License v2.0 with LLVM Exceptions: +# https://llvm.org/LICENSE.txt +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ===----------------------------------------------------------------------=== # + +from my_math import dec, inc + + +def main(): + i = 0 + print("Incrementing") + while i < 5: + i = inc(i) + print(i) + print("Decrementing") + while i > 0: + print(i) + i = dec(i) diff --git a/examples/testing/src/my_math/__init__.mojo b/examples/testing/src/my_math/__init__.mojo new file mode 100644 index 0000000000..79dd92b79d --- /dev/null +++ b/examples/testing/src/my_math/__init__.mojo @@ -0,0 +1,51 @@ +# ===----------------------------------------------------------------------=== # +# Copyright (c) 2025, Modular Inc. All rights reserved. +# +# Licensed under the Apache License v2.0 with LLVM Exceptions: +# https://llvm.org/LICENSE.txt +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ===----------------------------------------------------------------------=== # + +# ===----------------------------------------------------------------------=== # +# Package file +# ===----------------------------------------------------------------------=== # +"""Basic mathematical utilities. + +This package defines a collection of utility functions for manipulating +integer values. + +You can import these APIs from the `my_math` package. For example: + +```mojo +from my_math import dec, inc +``` + +The `inc()` function performs a simple increment: + +```mojo +%# from testing import assert_equal +from my_math import inc +a = 1 +b = inc(a) # b = 2 +%# assert_equal(b, 2) +``` + +However, `inc()` raises an error if it would result in integer overflow: + +```mojo +c = 0 +try: + c = inc(Int.MAX) +except e: + print(e) +%# assert_equal("inc overflow", String(e)) +``` + +""" + +from .utils import dec, inc diff --git a/examples/testing/src/my_math/utils.mojo b/examples/testing/src/my_math/utils.mojo new file mode 100644 index 0000000000..000fa023cd --- /dev/null +++ b/examples/testing/src/my_math/utils.mojo @@ -0,0 +1,94 @@ +# ===----------------------------------------------------------------------=== # +# Copyright (c) 2025, Modular Inc. All rights reserved. +# +# Licensed under the Apache License v2.0 with LLVM Exceptions: +# https://llvm.org/LICENSE.txt +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ===----------------------------------------------------------------------=== # + +"""Implements various mathematical utilities. + +You can import these APIs from the `my_math` package. For example: + +```mojo +from my_math import inc +``` +""" + + +def inc(n: Int) -> Int: + """Returns an incremented integer value. + + ```mojo + %# from testing import assert_equal + from my_math import inc + i = 7 + j = inc(i) # j = 8 + %# assert_equal(j, 8) + ``` + + However, `inc()` raises an error if it would result in integer overflow: + + ```mojo + k = 0 + try: + k = inc(Int.MAX) + except e: + print(e) # inc overflow + %# assert_equal("inc overflow", String(e)) + ``` + + Args: + n: The integer value to increment. + + Returns: + The input value plus one. + + Raises: + An error if the incremented value exceeds `Int.MAX`. + """ + if n == Int.MAX: + raise Error("inc overflow") + return n + 1 + + +def dec(n: Int) -> Int: + """Returns a decremented integer value. + + ```mojo + %# from testing import assert_equal + from my_math import dec + i = 7 + j = dec(i) # j = 6 + %# assert_equal(j, 6) + ``` + + However, `dec()` raises an error if it would result in integer overflow: + + ```mojo + k = 0 + try: + k = dec(Int.MIN) + except e: + print(e) # inc overflow + %# assert_equal("dec overflow", String(e)) + ``` + + Args: + n: The integer value to decrement. + + Returns: + The input value minus one. + + Raises: + An error if the decremented value is less than `Int.MIN`. + + """ + if n == Int.MIN: + raise Error("dec overflow") + return n - 1 diff --git a/examples/testing/test/my_math/test_dec.mojo b/examples/testing/test/my_math/test_dec.mojo new file mode 100644 index 0000000000..7484124d6b --- /dev/null +++ b/examples/testing/test/my_math/test_dec.mojo @@ -0,0 +1,28 @@ +# ===----------------------------------------------------------------------=== # +# Copyright (c) 2025, Modular Inc. All rights reserved. +# +# Licensed under the Apache License v2.0 with LLVM Exceptions: +# https://llvm.org/LICENSE.txt +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ===----------------------------------------------------------------------=== # + +from my_math import dec + +from testing import assert_equal, assert_raises + + +def test_dec_valid(): + assert_equal(dec(1), 0) + assert_equal(dec(0), -1) + + +def test_dec_min(): + with assert_raises(): + # Assign the return value to the discard pattern to prevent the Mojo + # compiler from warning that it is unused. + _ = dec(Int.MIN) diff --git a/examples/testing/test/my_math/test_inc.mojo b/examples/testing/test/my_math/test_inc.mojo new file mode 100644 index 0000000000..8b18919c75 --- /dev/null +++ b/examples/testing/test/my_math/test_inc.mojo @@ -0,0 +1,28 @@ +# ===----------------------------------------------------------------------=== # +# Copyright (c) 2025, Modular Inc. All rights reserved. +# +# Licensed under the Apache License v2.0 with LLVM Exceptions: +# https://llvm.org/LICENSE.txt +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ===----------------------------------------------------------------------=== # + +from my_math import inc + +from testing import assert_equal, assert_raises + + +def test_inc_valid(): + assert_equal(inc(0), 1) + assert_equal(inc(1), 2) + + +def test_inc_max(): + with assert_raises(): + # Assign the return value to the discard pattern to prevent the Mojo + # compiler from warning that it is unused. + _ = inc(Int.MAX) diff --git a/magic.lock b/magic.lock index baa7c0612d..1fd96c856c 100644 --- a/magic.lock +++ b/magic.lock @@ -14,7 +14,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.8.0-hb921021_15.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.8.0-h205f482_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.8.1-h1a47875_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.10.6-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.0-h4e1184b_5.conda @@ -23,10 +23,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.15.3-h831e299_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.11.0-h11f4f37_12.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.7.7-hf454442_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.1-h4e1184b_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.2-h4e1184b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.2-h4e1184b_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.29.7-hd92328a_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.458-hc430e4a_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.29.8-h8570fcd_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.458-h7001638_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.10.0-h113e628_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda @@ -77,10 +77,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20240722.0-cxx17_hbbce691_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-18.1.0-hd595efa_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-18.1.0-h9d9f30d_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-26_linux64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda @@ -109,12 +109,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.28-pthreads_h94d23a6_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.45-h943b412_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-5.28.3-h6128344_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2024.07.02-hbbce691_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.2-hee588c1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.48.0-hee588c1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda @@ -122,26 +122,26 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-hd9ff511_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.9.0-hb9d3cd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.50.0-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.5.0-h851e524_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.5-h0d44e9d_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lit-19.1.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lit-19.1.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py312h178313f_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/max-core-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/max-python-25.1.0.dev2025011105-3.12release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/max-core-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/max-python-25.1.0.dev2025011705-3.12release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.1.0-py312h178313f_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/multiprocess-0.70.15-py312h98912ed_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.3-h5fbd93e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda @@ -207,14 +207,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.1-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.0-pyh31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.34.0-h31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/uvloop-0.21.0-py312h66e93f0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/watchfiles-1.0.4-py312h12e396e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/websockets-14.1-py312h66e93f0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.0-py312h66e93f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.2-py312h66e93f0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xxhash-0.8.2-hd590300_0.conda @@ -232,7 +232,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-auth-0.8.0-h2cb9fb3_15.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-auth-0.8.0-hb7ec8d5_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-cal-0.8.1-h740c5af_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-common-0.10.6-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-compression-0.3.0-h0f0193d_5.conda @@ -241,10 +241,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-io-0.15.3-h1a307af_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-mqtt-0.11.0-h5f50e26_12.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-s3-0.7.7-h2080895_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-sdkutils-0.2.1-h0f0193d_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-sdkutils-0.2.2-h0f0193d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-checksums-0.2.2-h0f0193d_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-crt-cpp-0.29.7-h8a4e35f_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-sdk-cpp-1.11.458-h849ce1a_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-crt-cpp-0.29.8-h92ee776_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-sdk-cpp-1.11.458-h90ecb4a_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/azure-core-cpp-1.14.0-h1887c18_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/azure-identity-cpp-1.10.0-h47b0b28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/azure-storage-blobs-cpp-12.13.0-h185ecfd_1.conda @@ -296,10 +296,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.43-h80caac9_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.0.0-h4de3ea5_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20240722.0-cxx17_h18dbdb1_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-18.1.0-hb7781cd_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-acero-18.1.0-h3b568fd_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-dataset-18.1.0-h3b568fd_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-substrait-18.1.0-h1e9d426_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-18.1.0-h47f80e1_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-acero-18.1.0-h3b568fd_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-dataset-18.1.0-h3b568fd_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-substrait-18.1.0-h1e9d426_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.9.0-26_linuxaarch64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlicommon-1.1.0-h86ecc28_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlidec-1.1.0-h86ecc28_2.conda @@ -328,12 +328,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnghttp2-1.64.0-hc8609a4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h31becfc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.28-pthreads_h9d3fd7e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libparquet-18.1.0-hfc78867_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libparquet-18.1.0-hfc78867_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.45-hec79eb8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-5.28.3-h44a3b7b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libre2-11-2024.07.02-h18dbdb1_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.2-h5eb1b54_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.48.0-h5eb1b54_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libssh2-1.11.1-ha41c0db_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-14.2.0-h3f4de04_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-14.2.0-hf1166c9_1.conda @@ -341,26 +341,26 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.0-h88f7998_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libutf8proc-2.9.0-h86ecc28_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.50.0-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.5.0-h0886dbf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.13.5-h2e0c361_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lit-19.1.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lit-19.1.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lz4-c-1.10.0-h5ad3122_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.2-py312h74ce7d3_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/max-core-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/max-python-25.1.0.dev2025011105-3.12release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/max-core-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/max-python-25.1.0.dev2025011705-3.12release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/multidict-6.1.0-py312hcc812fe_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/multiprocess-0.70.15-py312hdd3e373_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-1.26.4-py312h470d778_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.3-h3f56577_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.4.0-hd08dc88_1.conda @@ -373,7 +373,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/opentelemetry-semantic-conventions-0.50b0-pyh3cfb1c2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/orc-2.0.3-hdd485aa_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pandas-2.2.3-py312ha2895bd_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pandas-2.2.3-py312ha2895bd_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-11.1.0-py312h719f0cf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_1.conda @@ -426,14 +426,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.1-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.0-pyh31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.34.0-h31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uvloop-0.21.0-py312hb2c0f52_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/watchfiles-1.0.4-py312h8cbf658_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/websockets-14.1-py312hb2c0f52_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-1.17.0-py312hb2c0f52_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-1.17.2-py312hb2c0f52_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.12-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-h57736b2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xxhash-0.8.2-h31becfc_0.conda @@ -450,7 +450,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.3.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.8.0-h8bc59a9_15.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.8.0-hfc2798a_16.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.8.1-hc8a0bd2_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.10.6-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.3.0-hc8a0bd2_5.conda @@ -459,10 +459,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.15.3-haba67d1_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.11.0-h24f418c_12.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.7.7-h1be5864_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.1-hc8a0bd2_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.2-hc8a0bd2_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.2.2-hc8a0bd2_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.29.7-h19a973c_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-he0ff2e4_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.29.8-h23176ea_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-h794939a_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-core-cpp-1.14.0-hd50102c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-identity-cpp-1.10.0-hc602bab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.13.0-h7585a09_1.conda @@ -512,10 +512,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.16-ha0e7c42_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20240722.0-cxx17_h07bc746_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-18.1.0-h0ad35bc_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_7_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-18.1.0-hf3eb8e5_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_8_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-26_osxarm64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.1.0-hd74edd7_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.1.0-hd74edd7_2.conda @@ -523,7 +523,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-26_osxarm64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.11.1-h73640d1_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.6-ha82da77_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.23-hec38601_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20240808-pl5321hafb1f1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda @@ -541,36 +541,36 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.6.3-h39f12f2_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_7_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_8_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.45-h3783ad8_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-5.28.3-h3bd63a1_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libre2-11-2024.07.02-h07bc746_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.48.0-h3f77e49_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.21.0-h64651cc_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.9.0-h5505292_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.50.0-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hdb1d25a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.13.5-h178c5d8_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lit-19.1.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.6-hdb05f8b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lit-19.1.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.7-hdb05f8b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.2-py312h998013c_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/max-core-25.1.0.dev2025011105-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/max-python-25.1.0.dev2025011105-3.12release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/max-core-25.1.0.dev2025011705-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/max-python-25.1.0.dev2025011705-3.12release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011705-release.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/multidict-6.1.0-py312hdb8e49c_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/multiprocess-0.70.15-py312h02f2b3b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-1.26.4-py312h8442bc7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.3-h8a3d83b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda @@ -635,14 +635,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.15.1-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.34.0-pyh31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.34.0-h31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uvloop-0.21.0-py312h0bf5046_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/watchfiles-1.0.4-py312hcd83bfe_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/websockets-14.1-py312hea69d52_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.0-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.2-py312hea69d52_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xxhash-0.8.2-hb547adb_0.conda @@ -807,55 +807,55 @@ packages: license_family: MIT size: 56354 timestamp: 1734348889193 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.8.0-hb921021_15.conda - sha256: 537006ad6d5097c134494166a6a1dc1451d5d050878d7b82cef498bfda40ba8a - md5: c79d50f64cffa5ad51ecc1a81057962f +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.8.0-h205f482_16.conda + sha256: 0695c285b70385913dc7dce05888d3ad1378247b65273bdab509494a2f8f0eea + md5: b0815d37ab812ade9c07239da7c3c369 depends: - __glibc >=2.17,<3.0.a0 - aws-c-cal >=0.8.1,<0.8.2.0a0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-http >=0.9.2,<0.9.3.0a0 - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - libgcc >=13 arch: x86_64 platform: linux license: Apache-2.0 license_family: Apache - size: 107614 - timestamp: 1734021692519 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-auth-0.8.0-h2cb9fb3_15.conda - sha256: 4ce859dc9ff128bf5515604c43f33fb511386022fc9765ca077990f2a3f23df5 - md5: e524686ace966acefb5b8cbc6e8b3daa + size: 107478 + timestamp: 1736592747413 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-auth-0.8.0-hb7ec8d5_16.conda + sha256: 5a2a2691f2e0028e8549b97a340d7e6c502e0d54b7deba00fad505812663a98b + md5: 56f166780076db46c5e273988693d8a3 depends: - aws-c-cal >=0.8.1,<0.8.2.0a0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-http >=0.9.2,<0.9.3.0a0 - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - libgcc >=13 arch: aarch64 platform: linux license: Apache-2.0 license_family: Apache - size: 111854 - timestamp: 1734021745104 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.8.0-h8bc59a9_15.conda - sha256: 0e41e56b662e76e024182adebcd91d09a4d38a83b35217c84e4967354dfff9a2 - md5: f688b8893c20ad9477a19e7ce614014a + size: 112264 + timestamp: 1736592695540 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.8.0-hfc2798a_16.conda + sha256: cdcd932332311db1b614289101b61e32cbae2478ba2bf85763aaf5a5cc7db6f6 + md5: 1e9a41d5296f50c08ae511d61fddef85 depends: - __osx >=11.0 - aws-c-cal >=0.8.1,<0.8.2.0a0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-http >=0.9.2,<0.9.3.0a0 - aws-c-io >=0.15.3,<0.15.4.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 arch: arm64 platform: osx license: Apache-2.0 license_family: Apache - size: 92507 - timestamp: 1734021831330 + size: 92547 + timestamp: 1736592866387 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.8.1-h1a47875_3.conda sha256: 095ac824ea9303eff67e04090ae531d9eb33d2bf8f82eaade39b839c421e16e8 md5: 55a8561fdbbbd34f50f57d9be12ed084 @@ -1198,9 +1198,9 @@ packages: license_family: Apache size: 97598 timestamp: 1734146239038 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.1-h4e1184b_4.conda - sha256: df586f42210af1134b1c88ff4c278c3cb6d6c807c84eac48860062464b28554d - md5: a5126a90e74ac739b00564a4c7ddcc36 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.2-h4e1184b_0.conda + sha256: 0424e380c435ba03b5948d02e8c958866c4eee50ed29e57f99473a5f795a4cfc + md5: dcd498d493818b776a77fbc242fbf8e4 depends: - __glibc >=2.17,<3.0.a0 - aws-c-common >=0.10.6,<0.10.7.0a0 @@ -1209,11 +1209,11 @@ packages: platform: linux license: Apache-2.0 license_family: Apache - size: 56094 - timestamp: 1733994449690 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-sdkutils-0.2.1-h0f0193d_4.conda - sha256: ede8e782467c87ac80ceb9c9af9e917d121b7d8b8c698186d18e3cecd36f2210 - md5: 53e798d720dd78b78847a7b2fdb05fc9 + size: 55911 + timestamp: 1736535960724 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-c-sdkutils-0.2.2-h0f0193d_0.conda + sha256: fba38e469457764afcb94aa84d4d7788e6b5fa1554d34b05c904d2245fdd3c81 + md5: a78928881c652facde2a13ec6e776f3c depends: - aws-c-common >=0.10.6,<0.10.7.0a0 - libgcc >=13 @@ -1221,11 +1221,11 @@ packages: platform: linux license: Apache-2.0 license_family: Apache - size: 58621 - timestamp: 1733994421495 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.1-hc8a0bd2_4.conda - sha256: de98343ce42d2e569b3380292d20f47bf39bda08aadabcbb8e650d3f38fd742f - md5: 22f72f8cd7ead211304ac17d337d96e0 + size: 58221 + timestamp: 1736536003041 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.2.2-hc8a0bd2_0.conda + sha256: ea4f0f1e99056293c69615f581a997d65ba7e229e296e402e0d8ef750648a5b5 + md5: e7b5498ac7b7ab921a907be38f3a8080 depends: - __osx >=11.0 - aws-c-common >=0.10.6,<0.10.7.0a0 @@ -1233,8 +1233,8 @@ packages: platform: osx license: Apache-2.0 license_family: Apache - size: 49664 - timestamp: 1733994553014 + size: 49872 + timestamp: 1736536152332 - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.2-h4e1184b_4.conda sha256: 1ed9a332d06ad595694907fad2d6d801082916c27cd5076096fda4061e6d24a8 md5: 74e8c3e4df4ceae34aa2959df4b28101 @@ -1272,9 +1272,9 @@ packages: license_family: Apache size: 70186 timestamp: 1733994496998 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.29.7-hd92328a_7.conda - sha256: 094cd81f1e5ba713e9e7a272ee52b5dde3ccc4842ea90f19c0354a00bbdac3d9 - md5: 02b95564257d5c3db9c06beccf711f95 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.29.8-h8570fcd_1.conda + sha256: ff8f08bc615d3ef6d970df80988200b3ecee76ecfa4885109cd82b30176cfda9 + md5: f21296b496cca1c1fa426b9a3b676e79 depends: - __glibc >=2.17,<3.0.a0 - aws-c-auth >=0.8.0,<0.8.1.0a0 @@ -1285,18 +1285,18 @@ packages: - aws-c-io >=0.15.3,<0.15.4.0a0 - aws-c-mqtt >=0.11.0,<0.11.1.0a0 - aws-c-s3 >=0.7.7,<0.7.8.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - libgcc >=13 - libstdcxx >=13 arch: x86_64 platform: linux license: Apache-2.0 license_family: Apache - size: 354703 - timestamp: 1734177883319 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-crt-cpp-0.29.7-h8a4e35f_7.conda - sha256: 5ba9188e0cb4e3faff9bc96774febb040aa3b802aedba29d847e00e7b5eab84e - md5: d77a9e3d7ce15399903e92825fd651b5 + size: 354328 + timestamp: 1736598991291 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-crt-cpp-0.29.8-h92ee776_1.conda + sha256: 114ac89d3936bf801dcbd488ba0b468c7e113a407cb1ee5898259a5202b7e750 + md5: 63546051b5687f793ae977c7994e1339 depends: - aws-c-auth >=0.8.0,<0.8.1.0a0 - aws-c-cal >=0.8.1,<0.8.2.0a0 @@ -1306,18 +1306,18 @@ packages: - aws-c-io >=0.15.3,<0.15.4.0a0 - aws-c-mqtt >=0.11.0,<0.11.1.0a0 - aws-c-s3 >=0.7.7,<0.7.8.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - libgcc >=13 - libstdcxx >=13 arch: aarch64 platform: linux license: Apache-2.0 license_family: Apache - size: 283154 - timestamp: 1734177845248 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.29.7-h19a973c_7.conda - sha256: 8269e6746eb3a5d15b732a3983888bf98dfc1f6594e95250fc8d16b43cfd5ff9 - md5: 95714136bef3e917bd5a2942d4682b20 + size: 284664 + timestamp: 1736598964131 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.29.8-h23176ea_1.conda + sha256: db6a31078bb82fb12044d7706239c003568273729f7ba4971c1479b7926ada82 + md5: 31fdd3ffb00f5472196fa95ef08087b7 depends: - __osx >=11.0 - aws-c-auth >=0.8.0,<0.8.1.0a0 @@ -1328,23 +1328,23 @@ packages: - aws-c-io >=0.15.3,<0.15.4.0a0 - aws-c-mqtt >=0.11.0,<0.11.1.0a0 - aws-c-s3 >=0.7.7,<0.7.8.0a0 - - aws-c-sdkutils >=0.2.1,<0.2.2.0a0 + - aws-c-sdkutils >=0.2.2,<0.2.3.0a0 - libcxx >=18 arch: arm64 platform: osx license: Apache-2.0 license_family: Apache - size: 236249 - timestamp: 1734178020924 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.458-hc430e4a_4.conda - sha256: 2dc09f6f9c49127b5f96e7535b64a9c521b944d76d8b7d03d48ae80257ac1cea - md5: aeefac461bea1f126653c1285cf5af08 + size: 236269 + timestamp: 1736599024242 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.458-h7001638_5.conda + sha256: 849524b09865e84d6926aa814944cf71511aa4a00fffc5ad174c286d5dfac5f0 + md5: fc01d77a7f383b2915f276c73b7d0934 depends: - __glibc >=2.17,<3.0.a0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-event-stream >=0.5.0,<0.5.1.0a0 - aws-checksums >=0.2.2,<0.2.3.0a0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - libcurl >=8.11.1,<9.0a0 - libgcc >=13 - libstdcxx >=13 @@ -1354,16 +1354,16 @@ packages: platform: linux license: Apache-2.0 license_family: Apache - size: 3060561 - timestamp: 1734093737431 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-sdk-cpp-1.11.458-h849ce1a_4.conda - sha256: 51b9e9df8cbab4a13a1b9d39d6ef5ed162aaa29c09a745810e00bbe92e1045c1 - md5: cda7747f4398be8d1fb37362815917a7 + size: 3088636 + timestamp: 1736598504343 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aws-sdk-cpp-1.11.458-h90ecb4a_5.conda + sha256: 9467acd0f2df74ea7472aebdfb8b5656a8d403abad2edbce9743d6e88c94fd10 + md5: 33f86f8de1d8cd40f8fe628dc0784437 depends: - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-event-stream >=0.5.0,<0.5.1.0a0 - aws-checksums >=0.2.2,<0.2.3.0a0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - libcurl >=8.11.1,<9.0a0 - libgcc >=13 - libstdcxx >=13 @@ -1373,17 +1373,17 @@ packages: platform: linux license: Apache-2.0 license_family: Apache - size: 2920625 - timestamp: 1734093552712 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-he0ff2e4_4.conda - sha256: 535b970aaa13be45f8cab8205c59f044b17364111c41a227f061775a5c834e18 - md5: 0981ed87098b149bdb7d99a4a3fd0e58 + size: 2925443 + timestamp: 1736598526637 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.11.458-h794939a_5.conda + sha256: 2b1e7d5a45e82604bfdb6de63c53cf0e9495f596cfd90e644a1e67910de7f91c + md5: a2374b4182bf5b2d08b2903393d0c487 depends: - __osx >=11.0 - aws-c-common >=0.10.6,<0.10.7.0a0 - aws-c-event-stream >=0.5.0,<0.5.1.0a0 - aws-checksums >=0.2.2,<0.2.3.0a0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - libcurl >=8.11.1,<9.0a0 - libcxx >=18 - libzlib >=1.3.1,<2.0a0 @@ -1392,8 +1392,8 @@ packages: platform: osx license: Apache-2.0 license_family: Apache - size: 2826534 - timestamp: 1734094018287 + size: 2824168 + timestamp: 1736598935034 - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.14.0-h5cfcd09_0.conda sha256: fe07debdb089a3db17f40a7f20d283d75284bb4fc269ef727b8ba6fc93f7cb5a md5: 0a8838771cc2e985cd295e01ae83baf1 @@ -2561,13 +2561,13 @@ packages: license_family: Apache size: 1178260 timestamp: 1736008642885 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-18.1.0-hd595efa_7_cpu.conda - build_number: 7 - sha256: 554ffa338264c1dc34d95adb7eb856d50a2f25e7fa303a1a51e4372301b7c96f - md5: 08d4aff5ee6dee9a1b9ab13fca927697 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-18.1.0-h9d9f30d_8_cpu.conda + build_number: 8 + sha256: f6c72ce82d145cb94a1131b68547b88056fb48158a382f9ce763286fce53ee65 + md5: 1c9caae53b14a385b59e87687adad2d6 depends: - __glibc >=2.17,<3.0.a0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - aws-sdk-cpp >=1.11.458,<1.11.459.0a0 - azure-core-cpp >=1.14.0,<1.14.1.0a0 - azure-identity-cpp >=1.10.0,<1.10.1.0a0 @@ -2600,14 +2600,14 @@ packages: platform: linux license: Apache-2.0 license_family: APACHE - size: 8770256 - timestamp: 1735684696564 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-18.1.0-hb7781cd_7_cpu.conda - build_number: 7 - sha256: f6107506bd16788560b47a4d18c1457b4df30a49334364d32613fe3f53ba6cbb - md5: 98cf7127ca7b3854c5d1c8bef1ed6e53 - depends: - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + size: 8801586 + timestamp: 1736610546493 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-18.1.0-h47f80e1_8_cpu.conda + build_number: 8 + sha256: bf381dfa84e94ffce715c46352dd99f6f6ace69859b0efb822500f8882be429a + md5: daceef1881b4ddc72bb5b225a122c633 + depends: + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - aws-sdk-cpp >=1.11.458,<1.11.459.0a0 - azure-core-cpp >=1.14.0,<1.14.1.0a0 - azure-identity-cpp >=1.10.0,<1.10.1.0a0 @@ -2634,21 +2634,21 @@ packages: - zstd >=1.5.6,<1.6.0a0 constrains: - arrow-cpp <0.0a0 - - parquet-cpp <0.0a0 - apache-arrow-proc =*=cpu + - parquet-cpp <0.0a0 arch: aarch64 platform: linux license: Apache-2.0 license_family: APACHE - size: 8026714 - timestamp: 1735685336542 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-18.1.0-h0ad35bc_7_cpu.conda - build_number: 7 - sha256: 4fbdd8bb89d912bf03f10f9373a8d96a1cdd7a7851e107393418a3d2715bc27e - md5: 4ba2173203f44bbf03d19aaba6ed07d3 + size: 8045923 + timestamp: 1736611764958 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-18.1.0-hf3eb8e5_8_cpu.conda + build_number: 8 + sha256: 766e46b45520773db93ee1a91951cc135a85544bba738e7b378d31f16097753f + md5: fdc79871e6c243b819497337215416d9 depends: - __osx >=11.0 - - aws-crt-cpp >=0.29.7,<0.29.8.0a0 + - aws-crt-cpp >=0.29.8,<0.29.9.0a0 - aws-sdk-cpp >=1.11.458,<1.11.459.0a0 - azure-core-cpp >=1.14.0,<1.14.1.0a0 - azure-identity-cpp >=1.10.0,<1.10.1.0a0 @@ -2679,111 +2679,111 @@ packages: platform: osx license: Apache-2.0 license_family: APACHE - size: 5506699 - timestamp: 1735682962976 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_7_cpu.conda - build_number: 7 - sha256: 87ea5d6a84d922d73975dce8661fccf257e72e755175b12c30e1181a34e37987 - md5: 12d84228204c56fec6ed113288014d11 + size: 5497383 + timestamp: 1736608604724 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-18.1.0-hcb10f89_8_cpu.conda + build_number: 8 + sha256: 126a6e78199311d99e38b9d633ce3e0290795ac68ce3ee8a9b91436c85c4095d + md5: 544759904898499f634f8f88a9907f88 depends: - __glibc >=2.17,<3.0.a0 - - libarrow 18.1.0 hd595efa_7_cpu + - libarrow 18.1.0 h9d9f30d_8_cpu - libgcc >=13 - libstdcxx >=13 arch: x86_64 platform: linux license: Apache-2.0 license_family: APACHE - size: 612463 - timestamp: 1735684749868 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-acero-18.1.0-h3b568fd_7_cpu.conda - build_number: 7 - sha256: 42cbfc87096f745d565d814d65b7228c82d985f1898859d5e456016d73e81c82 - md5: 4c1d8c3feea249782148d3cd6a25392e + size: 611558 + timestamp: 1736610592458 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-acero-18.1.0-h3b568fd_8_cpu.conda + build_number: 8 + sha256: c94844ab1d8fafe17775161283bd1fe7ab1f93f660fc5ba0c01bd33fe3d21eaf + md5: 7a8e6a363d2f39a2f3df3f181d12692d depends: - - libarrow 18.1.0 hb7781cd_7_cpu + - libarrow 18.1.0 h47f80e1_8_cpu - libgcc >=13 - libstdcxx >=13 arch: aarch64 platform: linux license: Apache-2.0 license_family: APACHE - size: 578222 - timestamp: 1735685424850 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_7_cpu.conda - build_number: 7 - sha256: 86e20cebfdb4f335e98265c1b88f5053bf3e3648768a317856295846bfdbf2b4 - md5: 3eaf71fe987de13061db795e03bb1a1c + size: 579798 + timestamp: 1736611846905 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-acero-18.1.0-hf07054f_8_cpu.conda + build_number: 8 + sha256: 29196dc6b2e4488f98bd8950de6333efe5d1a9d0cc62e186694946766185475e + md5: 8db96829f8e427167f450c7467a1ba44 depends: - __osx >=11.0 - - libarrow 18.1.0 h0ad35bc_7_cpu + - libarrow 18.1.0 hf3eb8e5_8_cpu - libcxx >=18 arch: arm64 platform: osx license: Apache-2.0 license_family: APACHE - size: 485185 - timestamp: 1735683071232 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_7_cpu.conda - build_number: 7 - sha256: 99c12511fba79c7947f78d676eae5857659084f687f375f68bc20bd4cddb0a0e - md5: 0a81eb63d7cd150f598c752e86388d57 + size: 484442 + timestamp: 1736608695654 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-18.1.0-hcb10f89_8_cpu.conda + build_number: 8 + sha256: fe50edf030b5ccbadec2bf8f90d4cdf32d63ec52ba26233fc2c8bfbe43df3b15 + md5: 894a5ed78728b77c997fefeee222ac4d depends: - __glibc >=2.17,<3.0.a0 - - libarrow 18.1.0 hd595efa_7_cpu - - libarrow-acero 18.1.0 hcb10f89_7_cpu + - libarrow 18.1.0 h9d9f30d_8_cpu + - libarrow-acero 18.1.0 hcb10f89_8_cpu - libgcc >=13 - - libparquet 18.1.0 h081d1f1_7_cpu + - libparquet 18.1.0 h081d1f1_8_cpu - libstdcxx >=13 arch: x86_64 platform: linux license: Apache-2.0 license_family: APACHE - size: 587497 - timestamp: 1735684880531 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-dataset-18.1.0-h3b568fd_7_cpu.conda - build_number: 7 - sha256: 13ba7d3d08015aa26569eca9e198e2f8b2a0cd2d9c420e41c78cc2e5d5170f26 - md5: f39f5d725c2ca94c2e7b19e2717fd4ab + size: 588032 + timestamp: 1736610711976 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-dataset-18.1.0-h3b568fd_8_cpu.conda + build_number: 8 + sha256: bb87d8e633074c9759d93abb277d31314dc66fad741253b48e8265e186228c5b + md5: 11856da892b919cc27bd62638d701c65 depends: - - libarrow 18.1.0 hb7781cd_7_cpu - - libarrow-acero 18.1.0 h3b568fd_7_cpu + - libarrow 18.1.0 h47f80e1_8_cpu + - libarrow-acero 18.1.0 h3b568fd_8_cpu - libgcc >=13 - - libparquet 18.1.0 hfc78867_7_cpu + - libparquet 18.1.0 hfc78867_8_cpu - libstdcxx >=13 arch: aarch64 platform: linux license: Apache-2.0 license_family: APACHE - size: 560329 - timestamp: 1735685518922 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_7_cpu.conda - build_number: 7 - sha256: 52c5c4e9cd5f2ac91dcebb6a920ab2536febcea116ff8767e5439329d7da820b - md5: 97a2d3606682d94f7d73112e9ad684ae + size: 560571 + timestamp: 1736611941995 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-dataset-18.1.0-hf07054f_8_cpu.conda + build_number: 8 + sha256: bff2d39e418eadab8c522a536449ac90f070dd8e83e2bd5e67a9c3eb8ecf712f + md5: 7b3736f49b3ba299b7799aeb448cb830 depends: - __osx >=11.0 - - libarrow 18.1.0 h0ad35bc_7_cpu - - libarrow-acero 18.1.0 hf07054f_7_cpu + - libarrow 18.1.0 hf3eb8e5_8_cpu + - libarrow-acero 18.1.0 hf07054f_8_cpu - libcxx >=18 - - libparquet 18.1.0 h636d7b7_7_cpu + - libparquet 18.1.0 h636d7b7_8_cpu arch: arm64 platform: osx license: Apache-2.0 license_family: APACHE - size: 491237 - timestamp: 1735684688308 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_7_cpu.conda - build_number: 7 - sha256: 53ea53a06e137c2f81ebfdff3f978babb8b59e31f705a19b57056ec8754c1abf - md5: e128def53c133e8a23ac00cd4a479335 + size: 491001 + timestamp: 1736609758514 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-18.1.0-h08228c5_8_cpu.conda + build_number: 8 + sha256: dca372e27724904577315b8db3793e027a5c152a485e505e630a57b15634cd85 + md5: 46eaf81238da6f3ffab1f3ffdcee382e depends: - __glibc >=2.17,<3.0.a0 - libabseil * cxx17* - libabseil >=20240722.0,<20240723.0a0 - - libarrow 18.1.0 hd595efa_7_cpu - - libarrow-acero 18.1.0 hcb10f89_7_cpu - - libarrow-dataset 18.1.0 hcb10f89_7_cpu + - libarrow 18.1.0 h9d9f30d_8_cpu + - libarrow-acero 18.1.0 hcb10f89_8_cpu + - libarrow-dataset 18.1.0 hcb10f89_8_cpu - libgcc >=13 - libprotobuf >=5.28.3,<5.28.4.0a0 - libstdcxx >=13 @@ -2791,18 +2791,18 @@ packages: platform: linux license: Apache-2.0 license_family: APACHE - size: 521861 - timestamp: 1735684940668 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-substrait-18.1.0-h1e9d426_7_cpu.conda - build_number: 7 - sha256: 252e2a0d8c733f36b50499786480a05a59577d617f291868149c80534c1e8ffc - md5: 6da921d9e1c4e2ab2679eeea7cbd4c82 + size: 521707 + timestamp: 1736610765240 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libarrow-substrait-18.1.0-h1e9d426_8_cpu.conda + build_number: 8 + sha256: 1896ea00da28e10670f7ba51bb543e68a87f717e9f5692fee44268f1a13d9eee + md5: e7dc0209e065a2b51f19848cefa4b1ab depends: - libabseil * cxx17* - libabseil >=20240722.0,<20240723.0a0 - - libarrow 18.1.0 hb7781cd_7_cpu - - libarrow-acero 18.1.0 h3b568fd_7_cpu - - libarrow-dataset 18.1.0 h3b568fd_7_cpu + - libarrow 18.1.0 h47f80e1_8_cpu + - libarrow-acero 18.1.0 h3b568fd_8_cpu + - libarrow-dataset 18.1.0 h3b568fd_8_cpu - libgcc >=13 - libprotobuf >=5.28.3,<5.28.4.0a0 - libstdcxx >=13 @@ -2810,27 +2810,27 @@ packages: platform: linux license: Apache-2.0 license_family: APACHE - size: 516014 - timestamp: 1735685565929 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_7_cpu.conda - build_number: 7 - sha256: a45bbdd6932aed972d6c6ce30a7439aa8ec9d9b8ee5affb350d41e50abdc0127 - md5: 91927747173f65695e441346c7145e26 + size: 517189 + timestamp: 1736611989417 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-substrait-18.1.0-h4239455_8_cpu.conda + build_number: 8 + sha256: ae52d926ebfc8edb0728824f2918a825d39bd85a4ef27fe2b73656cfecdd7c69 + md5: f67eb19d22ba355cced8c86073ad49b1 depends: - __osx >=11.0 - libabseil * cxx17* - libabseil >=20240722.0,<20240723.0a0 - - libarrow 18.1.0 h0ad35bc_7_cpu - - libarrow-acero 18.1.0 hf07054f_7_cpu - - libarrow-dataset 18.1.0 hf07054f_7_cpu + - libarrow 18.1.0 hf3eb8e5_8_cpu + - libarrow-acero 18.1.0 hf07054f_8_cpu + - libarrow-dataset 18.1.0 hf07054f_8_cpu - libcxx >=18 - libprotobuf >=5.28.3,<5.28.4.0a0 arch: arm64 platform: osx license: Apache-2.0 license_family: APACHE - size: 452385 - timestamp: 1735684993831 + size: 452161 + timestamp: 1736609917123 - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-26_linux64_openblas.conda build_number: 26 sha256: 30bd658682b124243f8e52d8edf8a19e7be1bc31e4fe4baec30a64002dc8cd0c @@ -3128,17 +3128,17 @@ packages: license_family: MIT size: 385098 timestamp: 1734000160270 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.6-ha82da77_1.conda - sha256: 2b2443404503cd862385fd2f2a2c73f9624686fd1e5a45050b4034cfc06904ec - md5: ce5252d8db110cdb4ae4173d0a63c7c5 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda + sha256: 776092346da87a2a23502e14d91eb0c32699c4a1522b7331537bd1c3751dcff5 + md5: 5b3e1610ff8bd5443476b91d618f5b77 depends: - __osx >=11.0 arch: arm64 platform: osx license: Apache-2.0 WITH LLVM-exception license_family: Apache - size: 520992 - timestamp: 1734494699681 + size: 523505 + timestamp: 1736877862502 - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.23-h4ddbbb0_0.conda sha256: 511d801626d02f4247a04fff957cc6e9ec4cc7e8622bd9acd076bcdc5de5fe66 md5: 8dfae1d2e74767e9ce36d5fa0d8605db @@ -3942,13 +3942,13 @@ packages: license_family: BSD size: 4165774 timestamp: 1730772154295 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_7_cpu.conda - build_number: 7 - sha256: 55945b761130f60abdecf1551907ecfd05cb4a5958cf74d855b30c005ecb3592 - md5: b97013ef4e1dd2cf11594f06d5b5e83a +- conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-18.1.0-h081d1f1_8_cpu.conda + build_number: 8 + sha256: 2c6d900d4e9dd3c4000886d76d3f8a099e904667ebc6935b49428e6e9b766481 + md5: a9fa0ef309406c84b46db3a28efd761e depends: - __glibc >=2.17,<3.0.a0 - - libarrow 18.1.0 hd595efa_7_cpu + - libarrow 18.1.0 h9d9f30d_8_cpu - libgcc >=13 - libstdcxx >=13 - libthrift >=0.21.0,<0.21.1.0a0 @@ -3957,14 +3957,14 @@ packages: platform: linux license: Apache-2.0 license_family: APACHE - size: 1205598 - timestamp: 1735684849150 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libparquet-18.1.0-hfc78867_7_cpu.conda - build_number: 7 - sha256: 6dff9bbe731dc2cefe96bd9c7981d2cbef2b564a3152840a29c9b6a493ea50d9 - md5: 184bec7a9392ab6ba8134041e81971d6 + size: 1207011 + timestamp: 1736610684584 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libparquet-18.1.0-hfc78867_8_cpu.conda + build_number: 8 + sha256: 2ed6b9eac4504051ddc094ea3f3a2b3198d4d25a443a96fa2971d8075d790c31 + md5: 9a907190c9e2c6bf1a29569700218f0b depends: - - libarrow 18.1.0 hb7781cd_7_cpu + - libarrow 18.1.0 h47f80e1_8_cpu - libgcc >=13 - libstdcxx >=13 - libthrift >=0.21.0,<0.21.1.0a0 @@ -3973,15 +3973,15 @@ packages: platform: linux license: Apache-2.0 license_family: APACHE - size: 1117825 - timestamp: 1735685495511 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_7_cpu.conda - build_number: 7 - sha256: bf42e43542a90edd86ba5aa5fd4543671625f1bc35f62be32688f00e18bae990 - md5: 93de9ba66a20db32a2646d313794b3a8 + size: 1117465 + timestamp: 1736611918180 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libparquet-18.1.0-h636d7b7_8_cpu.conda + build_number: 8 + sha256: 4991519ef4264abc7160e9faaf8ff01d4731bf1497076bef1895d6c366f796eb + md5: b8bd275a49877fdec62ff787818a869d depends: - __osx >=11.0 - - libarrow 18.1.0 h0ad35bc_7_cpu + - libarrow 18.1.0 hf3eb8e5_8_cpu - libcxx >=18 - libthrift >=0.21.0,<0.21.1.0a0 - openssl >=3.4.0,<4.0a0 @@ -3989,8 +3989,8 @@ packages: platform: osx license: Apache-2.0 license_family: APACHE - size: 873251 - timestamp: 1735684582558 + size: 873593 + timestamp: 1736609701839 - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.45-h943b412_0.conda sha256: b8f5b5ba9a14dedf7c97c01300de492b1b52b68eacbc3249a13fdbfa82349a2f md5: 85cbdaacad93808395ac295b5667d25b @@ -4150,9 +4150,9 @@ packages: license: ISC size: 164972 timestamp: 1716828607917 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.47.2-hee588c1_0.conda - sha256: 48af21ebc2cbf358976f1e0f4a0ab9e91dfc83d0ef337cf3837c6f5bc22fb352 - md5: b58da17db24b6e08bcbf8fed2fb8c915 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.48.0-hee588c1_0.conda + sha256: 7bb84f44e1bd756da4a3d0d43308324a5533e6ba9f4772475884bce44d405064 + md5: 84bd1c9a82b455e7a2f390375fb38f90 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -4160,30 +4160,30 @@ packages: arch: x86_64 platform: linux license: Unlicense - size: 873551 - timestamp: 1733761824646 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.47.2-h5eb1b54_0.conda - sha256: 885a27fa84a5a73ed9779168c02b6c386e2fc7a53f0566b32a09ceca146b42b4 - md5: d4bf59f8783a4a66c0aec568f6de3ff4 + size: 876582 + timestamp: 1737123945341 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.48.0-h5eb1b54_0.conda + sha256: b4365ab7c74a2e6c0444eb950367fa3ca56a87c9921b2faa5ad032fe7a7df682 + md5: 1998946fa3ccf38a07b44a879b2227ae depends: - libgcc >=13 - libzlib >=1.3.1,<2.0a0 arch: aarch64 platform: linux license: Unlicense - size: 1042182 - timestamp: 1733761913736 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.2-h3f77e49_0.conda - sha256: f192f3c8973de9ec4c214990715f13b781965247a5cedf9162e7f9e699cfc3c4 - md5: 122d6f29470f1a991e85608e77e56a8a + size: 1044953 + timestamp: 1737123983895 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.48.0-h3f77e49_0.conda + sha256: b31169cf0ca7b6835baca4ab92d6cf2eee83b1a12a11b72f39521e8baf4d6acb + md5: 714719df4f49e30f9728956f240846ca depends: - __osx >=11.0 - libzlib >=1.3.1,<2.0a0 arch: arm64 platform: osx license: Unlicense - size: 850553 - timestamp: 1733762057506 + size: 853163 + timestamp: 1737124192432 - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hf672d98_0.conda sha256: 0407ac9fda2bb67e11e357066eff144c845801d00b5f664efbc48813af1e7bb9 md5: be2de152d8073ef1c01b7728475f2fe7 @@ -4424,9 +4424,9 @@ packages: license_family: BSD size: 35720 timestamp: 1680113474501 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.49.2-hb9d3cd8_0.conda - sha256: a35cd81cd1a9add11024097da83cc06b0aae83186fe4124b77710876f37d8f31 - md5: 070e3c9ddab77e38799d5c30b109c633 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.50.0-hb9d3cd8_0.conda + sha256: b4a8890023902aef9f1f33e3e35603ad9c2f16c21fdb58e968fa6c1bd3e94c0b + md5: 771ee65e13bc599b0b62af5359d80169 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -4434,30 +4434,30 @@ packages: platform: linux license: MIT license_family: MIT - size: 884647 - timestamp: 1729322566955 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.49.2-h86ecc28_0.conda - sha256: adf4eca89339ac7780f2394e7e6699be81259eb91f79f9d9fdf2c1bc6b26f210 - md5: 1899e1ec2be63386c41c4db31d3056af + size: 891272 + timestamp: 1737016632446 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.50.0-h86ecc28_0.conda + sha256: 67914c7f171d343059144d804c2f17fcd621a94e45f179a0fd843b8c1618823e + md5: 915db044076cbbdffb425170deb4ce38 depends: - libgcc >=13 arch: aarch64 platform: linux license: MIT license_family: MIT - size: 627484 - timestamp: 1729322575379 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.49.2-h7ab814d_0.conda - sha256: 0e5176af1e788ad5006cf261c4ea5a288a935fda48993b0240ddd2e562dc3d02 - md5: 4bc348e3a1a74d20a3f9beb866d75e0a + size: 621056 + timestamp: 1737016626950 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.50.0-h5505292_0.conda + sha256: d13fb49d4c8262bf2c44ffb2c77bb2b5d0f85fc6de76bdb75208efeccb29fce6 + md5: 20717343fb30798ab7c23c2e92b748c1 depends: - __osx >=11.0 arch: arm64 platform: osx license: MIT license_family: MIT - size: 410500 - timestamp: 1729322654121 + size: 418890 + timestamp: 1737016751326 - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.5.0-h851e524_0.conda sha256: c45283fd3e90df5f0bd3dbcd31f59cdd2b001d424cf30a07223655413b158eaf md5: 63f790534398730f59e1b899c3644d4a @@ -4648,28 +4648,28 @@ packages: license_family: Other size: 46438 timestamp: 1727963202283 -- conda: https://conda.anaconda.org/conda-forge/noarch/lit-19.1.6-pyhd8ed1ab_0.conda - sha256: db850690a15523a42f6e526d069a4a065d516793360d0b20e67258316bcf14f1 - md5: 367b485a667684bd797fddb1abf66969 +- conda: https://conda.anaconda.org/conda-forge/noarch/lit-19.1.7-pyhd8ed1ab_0.conda + sha256: 3527dcdd45af61cc00fb7efe4c454a956d421dde4b459de3beb0993352a4e0cb + md5: 665a0aafb15ba7a5771cca614146c718 depends: - python >=3 license: Apache-2.0 WITH LLVM-exception license_family: Apache - size: 128368 - timestamp: 1734486415918 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.6-hdb05f8b_0.conda - sha256: a0f3e9139ab16f0a67b9d2bbabc15b78977168f4a5b5503fed4962dcb9a96102 - md5: 34fdeffa0555a1a56f38839415cc066c + size: 128580 + timestamp: 1736894117712 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.7-hdb05f8b_0.conda + sha256: b92a669f2059874ebdcb69041b6c243d68ffc3fb356ac1339cec44aeb27245d7 + md5: c4d54bfd3817313ce758aa76283b118d depends: - __osx >=11.0 constrains: - - openmp 19.1.6|19.1.6.* + - openmp 19.1.7|19.1.7.* arch: arm64 platform: osx license: Apache-2.0 WITH LLVM-exception license_family: APACHE - size: 281251 - timestamp: 1734520462311 + size: 280830 + timestamp: 1736986295869 - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda sha256: 47326f811392a5fd3055f0f773036c392d26fdb32e4d8e7a8197eed951489346 md5: 9de5350a85c4a20c685259b889aa6393 @@ -4764,47 +4764,47 @@ packages: license_family: BSD size: 24048 timestamp: 1733219945697 -- conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011105-release.conda +- conda: https://conda.modular.com/max-nightly/noarch/max-25.1.0.dev2025011705-release.conda noarch: python - sha256: 4bd3331f281b0d42b57e7e5d28eee3650cb52ffb3f9c381f349255034ab4d011 - md5: 9a12141b0beb110b83d4ae256d8de1b0 + sha256: 15578c7bc78001d3882c3b9af9d7d8bf3566c68ae133870038be055c8dfd90e9 + md5: 7e6c35d82044e8d31e9327e7d90bfb2b depends: - - max-core ==25.1.0.dev2025011105 release - - max-python >=25.1.0.dev2025011105,<26.0a0 - - mojo-jupyter ==25.1.0.dev2025011105 release - - mblack ==25.1.0.dev2025011105 release + - max-core ==25.1.0.dev2025011705 release + - max-python >=25.1.0.dev2025011705,<26.0a0 + - mojo-jupyter ==25.1.0.dev2025011705 release + - mblack ==25.1.0.dev2025011705 release license: LicenseRef-Modular-Proprietary - size: 9919 - timestamp: 1736572603494 -- conda: https://conda.modular.com/max-nightly/linux-64/max-core-25.1.0.dev2025011105-release.conda - sha256: 45fdbcfa2c105f01e3c06823e072f2b7b3ceeafe21188973a3f64a87c43c29e6 - md5: ba267ab335859f14f9c0d887d4a83f14 + size: 9920 + timestamp: 1737091778690 +- conda: https://conda.modular.com/max-nightly/linux-64/max-core-25.1.0.dev2025011705-release.conda + sha256: 3e39d779710559206129052c64ac530b9d262288f75812ba07c3e3e395a0e18e + md5: 5575de33b0503143e635ade746f057c3 depends: - - mblack ==25.1.0.dev2025011105 release + - mblack ==25.1.0.dev2025011705 release license: LicenseRef-Modular-Proprietary - size: 244035937 - timestamp: 1736572608009 -- conda: https://conda.modular.com/max-nightly/linux-aarch64/max-core-25.1.0.dev2025011105-release.conda - sha256: 23794990d901f563fd2492483d4f5e0b1b91ed616028bf70bd9e2eaace6bd56b - md5: e8f626acac2d17a591ac8353ba41f5d0 + size: 244764907 + timestamp: 1737091186388 +- conda: https://conda.modular.com/max-nightly/linux-aarch64/max-core-25.1.0.dev2025011705-release.conda + sha256: a9e7747e7cb7ff01dc58f4c7f5772d2b4483693dd200c88653b1ec2dda46bc8b + md5: a9b13b577fb1bcc14b330f5a4185023c depends: - - mblack ==25.1.0.dev2025011105 release + - mblack ==25.1.0.dev2025011705 release license: LicenseRef-Modular-Proprietary - size: 247708765 - timestamp: 1736572603492 -- conda: https://conda.modular.com/max-nightly/osx-arm64/max-core-25.1.0.dev2025011105-release.conda - sha256: 8cc71a4a35f96867f4131ddca60d084a8df937ec0f551b62601adc9202788a82 - md5: 4b8d6a0afbcebe7c2e5dc2ccd30c55a8 + size: 247240781 + timestamp: 1737091778688 +- conda: https://conda.modular.com/max-nightly/osx-arm64/max-core-25.1.0.dev2025011705-release.conda + sha256: 9369b738945ef783af1e4caf2676bd6a299ff86e4ef9504e7a5ee69841fffa01 + md5: c4397350b325ae5a0e07f61e483fc3e5 depends: - - mblack ==25.1.0.dev2025011105 release + - mblack ==25.1.0.dev2025011705 release license: LicenseRef-Modular-Proprietary - size: 206225127 - timestamp: 1736572820782 -- conda: https://conda.modular.com/max-nightly/linux-64/max-python-25.1.0.dev2025011105-3.12release.conda - sha256: 621688d96524cbf32ed8f33e4d572043973beb875708e69af36735ee730cc6c4 - md5: bb2eb7a24245cd62aed0b9d3e3e85604 + size: 206615275 + timestamp: 1737092643231 +- conda: https://conda.modular.com/max-nightly/linux-64/max-python-25.1.0.dev2025011705-3.12release.conda + sha256: bdda011f73105d5d91e29abdacc4e7304501249c3bb50e83517661cdea4ef56a + md5: 0ddfaa3caa3647a0cbcdf394774ee6be depends: - - max-core ==25.1.0.dev2025011105 release + - max-core ==25.1.0.dev2025011705 release - python 3.12.* - fastapi - httpx @@ -4825,13 +4825,13 @@ packages: - uvicorn - python_abi 3.12.* *_cp312 license: LicenseRef-Modular-Proprietary - size: 124216697 - timestamp: 1736572608017 -- conda: https://conda.modular.com/max-nightly/linux-aarch64/max-python-25.1.0.dev2025011105-3.12release.conda - sha256: fd2587af6018758078516561bfdb54d8175207edd4ce6dce211aeb9dffbfd967 - md5: 8d1481a3abe8cd46a76797465f6a9eb6 + size: 124617960 + timestamp: 1737091186397 +- conda: https://conda.modular.com/max-nightly/linux-aarch64/max-python-25.1.0.dev2025011705-3.12release.conda + sha256: 3ec1d98731b5c86829e7dd0d76b3ad820173a418f58833ea0237e34d356b58c6 + md5: 0ed0380d3ee48a36fe43f85f61fd9fe3 depends: - - max-core ==25.1.0.dev2025011105 release + - max-core ==25.1.0.dev2025011705 release - python 3.12.* - fastapi - httpx @@ -4852,13 +4852,13 @@ packages: - uvicorn - python_abi 3.12.* *_cp312 license: LicenseRef-Modular-Proprietary - size: 127983766 - timestamp: 1736572603503 -- conda: https://conda.modular.com/max-nightly/osx-arm64/max-python-25.1.0.dev2025011105-3.12release.conda - sha256: 5d6590e84cf64008fd48066ef10138c48cdbb6d6e2a1d3de01e71270d8d8d966 - md5: 92aa60fa7fe761433d03416f21c8d912 + size: 127367910 + timestamp: 1737091778698 +- conda: https://conda.modular.com/max-nightly/osx-arm64/max-python-25.1.0.dev2025011705-3.12release.conda + sha256: 853e12e0ac11f3dcf5392e94cc927233ba940a71a5cf73c0cec54ad4917256c0 + md5: 53e9620bd08e983c5e52e02afef0a990 depends: - - max-core ==25.1.0.dev2025011105 release + - max-core ==25.1.0.dev2025011705 release - python 3.12.* - fastapi - httpx @@ -4879,12 +4879,12 @@ packages: - uvicorn - python_abi 3.12.* *_cp312 license: LicenseRef-Modular-Proprietary - size: 110625116 - timestamp: 1736572820784 -- conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011105-release.conda + size: 110545057 + timestamp: 1737092643234 +- conda: https://conda.modular.com/max-nightly/noarch/mblack-25.1.0.dev2025011705-release.conda noarch: python - sha256: f447d269d29bb49fd97275f623632a569638c31b40e88489367df3d7d4ce90e2 - md5: 32c691c7fc2c6a218e1ce2272965a101 + sha256: 180bbe7d8b76c5d0f453b72f81fae10522b7a98a31e6fbeff542dbb31bb9b613 + md5: 680622d3117019e99ddc173efab357c7 depends: - python >=3.9,<3.13 - click >=8.0.0 @@ -4894,8 +4894,8 @@ packages: - platformdirs >=2 - python license: MIT - size: 130815 - timestamp: 1736572603499 + size: 130807 + timestamp: 1737091778695 - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 md5: 592132998493b3ff25fd7479396e8351 @@ -4905,18 +4905,18 @@ packages: license_family: MIT size: 14465 timestamp: 1733255681319 -- conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011105-release.conda +- conda: https://conda.modular.com/max-nightly/noarch/mojo-jupyter-25.1.0.dev2025011705-release.conda noarch: python - sha256: 05af473b2b4983829660ba70eb0cb6607f019c4f4b8d107350ea491c6bd8d1cd - md5: 036f5ddfbcce66b3f9972cebf1cec107 + sha256: eab543a5c31c091b3d042980d068a950c51905d14a18532710f9be94ba88ba5d + md5: eea061b963a95002a8740d4b4f506d44 depends: - - max-core ==25.1.0.dev2025011105 release + - max-core ==25.1.0.dev2025011705 release - python >=3.9,<3.13 - jupyter_client >=8.6.2,<8.7 - python license: LicenseRef-Modular-Proprietary - size: 22937 - timestamp: 1736572603499 + size: 22929 + timestamp: 1737091778696 - conda: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.1.0-py312h178313f_2.conda sha256: b05bc8252a6e957bf4a776ed5e0e61d1ba88cdc46ccb55890c72cc58b10371f4 md5: 5b5e3267d915a107eca793d52e1b780a @@ -5011,37 +5011,37 @@ packages: license_family: MIT size: 10854 timestamp: 1733230986902 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda - sha256: 6a1d5d8634c1a07913f1c525db6455918cbc589d745fac46d9d6e30340c8731a - md5: 70caf8bb6cf39a0b6b7efc885f51c0fe +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_2.conda + sha256: 17fe6afd8a00446010220d52256bd222b1e4fcb93bd587e7784b03219f3dc358 + md5: 04b34b9a40cdc48cfdab261ab176ff74 depends: - __glibc >=2.17,<3.0.a0 - - libgcc-ng >=12 + - libgcc >=13 arch: x86_64 platform: linux license: X11 AND BSD-3-Clause - size: 889086 - timestamp: 1724658547447 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-hcccb83c_1.conda - sha256: acad4cf1f57b12ee1e42995e6fac646fa06aa026529f05eb8c07eb0a84a47a84 - md5: 91d49c85cacd92caa40cf375ef72a25d + size: 894452 + timestamp: 1736683239706 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_2.conda + sha256: 9fd726174dde993c560dd6fa1a383e61d546d380e98e0b0348d22512e5d86e24 + md5: 779046fb585c71373e8a051be06c6011 depends: - - libgcc-ng >=12 + - libgcc >=13 arch: aarch64 platform: linux license: X11 AND BSD-3-Clause - size: 924472 - timestamp: 1724658573518 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - sha256: 27d0b9ff78ad46e1f3a6c96c479ab44beda5f96def88e2fe626e0a49429d8afc - md5: cb2b0ea909b97b3d70cd3921d1445e1a + size: 928402 + timestamp: 1736683192463 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_2.conda + sha256: b45c73348ec9841d5c893acc2e97adff24127548fe8c786109d03c41ed564e91 + md5: f6f7c5b7d0983be186c46c4f6f8f9af8 depends: - __osx >=11.0 arch: arm64 platform: osx license: X11 AND BSD-3-Clause - size: 802321 - timestamp: 1724658775723 + size: 796754 + timestamp: 1736683572099 - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py312heda63a1_0.conda sha256: fe3459c75cf84dcef6ef14efcc4adb0ade66038ddd27cadb894f34f4797687d8 md5: d8285bea2a350f63fab23bf460221f3f @@ -5351,9 +5351,9 @@ packages: license_family: BSD size: 15436913 timestamp: 1726879054912 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pandas-2.2.3-py312ha2895bd_1.conda - sha256: 585e05f95d14afe3df43ded14f86800c70da26b27e27b59de95932f8888af5d3 - md5: 80b873ac4fdf36641afa0eaafff3a664 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pandas-2.2.3-py312ha2895bd_2.conda + sha256: a34b10077de97eea72c81cb96e3ddc7d48320c0fc7d9b28ba8d9d2bead1d8297 + md5: 39a91ac336d350513de6aad56da5a920 depends: - libgcc >=13 - libstdcxx >=13 @@ -5365,12 +5365,38 @@ packages: - python-tzdata >=2022a - python_abi 3.12.* *_cp312 - pytz >=2020.1,<2024.2 + constrains: + - fsspec >=2022.11.0 + - s3fs >=2022.11.0 + - fastparquet >=2022.12.0 + - pyreadstat >=1.2.0 + - qtpy >=2.3.0 + - scipy >=1.10.0 + - beautifulsoup4 >=4.11.2 + - gcsfs >=2022.11.0 + - numexpr >=2.8.4 + - sqlalchemy >=2.0.0 + - pyxlsb >=1.0.10 + - numba >=0.56.4 + - lxml >=4.9.2 + - matplotlib >=3.6.3 + - psycopg2 >=2.9.6 + - tzdata >=2022.7 + - bottleneck >=1.3.6 + - xarray >=2022.12.0 + - xlsxwriter >=3.0.5 + - zstandard >=0.19.0 + - blosc >=1.21.3 + - pytables >=3.8.0 + - openpyxl >=3.1.0 + - pyqt5 >=5.15.8 + - tabulate >=0.9.0 arch: aarch64 platform: linux license: BSD-3-Clause license_family: BSD - size: 15159625 - timestamp: 1726879151211 + size: 15162992 + timestamp: 1736811533875 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.2.3-py312hcd31e36_1.conda sha256: ff0cb54b5d058c7987b4a0984066e893642d1865a7bb695294b6172e2fcdc457 md5: c68bfa69e6086c381c74e16fd72613a8 @@ -6712,12 +6738,12 @@ packages: license_family: PSF size: 39637 timestamp: 1733188758212 -- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf - md5: 8ac3367aafb1cc0a068483c580af8015 +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda + sha256: c4b1ae8a2931fe9b274c44af29c5475a85b37693999f8c792dad0f8c6734b1de + md5: dbcace4706afdfb7eb891f7b37d07c04 license: LicenseRef-Public-Domain - size: 122354 - timestamp: 1728047496079 + size: 122921 + timestamp: 1737119101255 - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda sha256: 114919ffa80c328127dab9c8e7a38f9d563c617691fb81fccb11c1e86763727e md5: 32674f8dbfb7b26410ed580dd3c10a29 @@ -6816,6 +6842,7 @@ packages: arch: x86_64 platform: linux license: MIT + license_family: MIT size: 410192 timestamp: 1736550568524 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/watchfiles-1.0.4-py312h8cbf658_0.conda @@ -6832,6 +6859,7 @@ packages: arch: aarch64 platform: linux license: MIT + license_family: MIT size: 403791 timestamp: 1736550743174 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/watchfiles-1.0.4-py312hcd83bfe_0.conda @@ -6848,6 +6876,7 @@ packages: arch: arm64 platform: osx license: MIT + license_family: MIT size: 363822 timestamp: 1736550859472 - conda: https://conda.anaconda.org/conda-forge/linux-64/websockets-14.1-py312h66e93f0_0.conda @@ -6892,9 +6921,9 @@ packages: license_family: BSD size: 243131 timestamp: 1731498944076 -- conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.0-py312h66e93f0_0.conda - sha256: a6fc0f4e90643d0c1fd4aab669b6a79f44a305a5474256f6f2da3354d2310fb4 - md5: ddbe3bb0e1356cb9074dd848570694f9 +- conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.17.2-py312h66e93f0_0.conda + sha256: ed3a1700ecc5d38c7e7dc7d2802df1bc1da6ba3d6f6017448b8ded0affb4ae00 + md5: 669e63af87710f8d52fdec9d4d63b404 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 @@ -6904,11 +6933,11 @@ packages: platform: linux license: BSD-2-Clause license_family: BSD - size: 63807 - timestamp: 1732523690292 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-1.17.0-py312hb2c0f52_0.conda - sha256: b9aa760a987ccc6bc9c61f57badba6798d9a3dcbd0814e5fb8df6d8d2935af73 - md5: 120d5d1c05386d8ce3efd65a4c86431f + size: 63590 + timestamp: 1736869574299 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-1.17.2-py312hb2c0f52_0.conda + sha256: cc28914462a21b2f64d9b763a9733bfcbc811dd2975d0d2e6e429e35f5b6d59c + md5: 8a5c6e3f809bae085be369b62dc5d06a depends: - libgcc >=13 - python >=3.12,<3.13.0a0 @@ -6918,11 +6947,11 @@ packages: platform: linux license: BSD-2-Clause license_family: BSD - size: 64783 - timestamp: 1732523806 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.0-py312hea69d52_0.conda - sha256: 0fb35c3d1642f9f47db87bdb33148f88ef19a3af1eb0ee99b5491551c57269c7 - md5: 73414acdb779a8694a14527865b4357a + size: 63967 + timestamp: 1736869675870 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.17.2-py312hea69d52_0.conda + sha256: 6a3e68b57de29802e8703d1791dcacb7613bfdc17bbb087c6b2ea2796e6893ef + md5: e49608c832fcf438f70cbcae09c3adc5 depends: - __osx >=11.0 - python >=3.12,<3.13.0a0 @@ -6932,8 +6961,8 @@ packages: platform: osx license: BSD-2-Clause license_family: BSD - size: 61043 - timestamp: 1732523852129 + size: 61198 + timestamp: 1736869673767 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb9d3cd8_0.conda sha256: ed10c9283974d311855ae08a16dfd7e56241fac632aec3b92e3cfe73cff31038 md5: f6ebe2cb3f82ba6c057dde5d9debe4f7 diff --git a/proposals/improved-hash-module.md b/proposals/improved-hash-module.md index 1e4dd64b13..22643e7a7a 100644 --- a/proposals/improved-hash-module.md +++ b/proposals/improved-hash-module.md @@ -224,7 +224,7 @@ fn _DJBX33A_SECRET() -> UInt64: return bitcast[DType.uint64](Int64(Int(secret_string))) except: var value = random_si64(Int64.MIN, Int64.MAX) - _ = setenv("DJBX33A_SECRET", str(value)) + _ = setenv("DJBX33A_SECRET", String(value)) return bitcast[DType.uint64](value) struct DJBX33A_Hasher[custom_secret: UInt64 = 0](Hasher): diff --git a/stdlib/benchmarks/builtin/bench_int.mojo b/stdlib/benchmarks/builtin/bench_int.mojo index 2d65c690c3..7147b4a94c 100644 --- a/stdlib/benchmarks/builtin/bench_int.mojo +++ b/stdlib/benchmarks/builtin/bench_int.mojo @@ -26,8 +26,8 @@ fn bench_stringify_small_integers(mut b: Bencher) raises: @parameter fn call_fn(): for i in range(1_000): - var a = str(i) - benchmark.keep(bool(a)) + var a = String(i) + benchmark.keep(Bool(a)) b.iter[call_fn]() diff --git a/stdlib/benchmarks/builtin/bench_sort.mojo b/stdlib/benchmarks/builtin/bench_sort.mojo index 7c70e7ebb6..addf6c200c 100644 --- a/stdlib/benchmarks/builtin/bench_sort.mojo +++ b/stdlib/benchmarks/builtin/bench_sort.mojo @@ -147,13 +147,13 @@ fn bench_tiny_list_sort[type: DType](mut m: Bench) raises: _ = list^ m.bench_function[bench_sort_list]( - BenchId("std_sort_random_" + str(count) + "_" + str(type)) + BenchId("std_sort_random_" + String(count) + "_" + String(type)) ) m.bench_function[bench_small_sort]( - BenchId("sml_sort_random_" + str(count) + "_" + str(type)) + BenchId("sml_sort_random_" + String(count) + "_" + String(type)) ) m.bench_function[bench_insertion_sort]( - BenchId("ins_sort_random_" + str(count) + "_" + str(type)) + BenchId("ins_sort_random_" + String(count) + "_" + String(type)) ) @@ -202,10 +202,10 @@ fn bench_small_list_sort[type: DType](mut m: Bench, count: Int) raises: _ = list^ m.bench_function[bench_sort_list]( - BenchId("std_sort_random_" + str(count) + "_" + str(type)) + BenchId("std_sort_random_" + String(count) + "_" + String(type)) ) m.bench_function[bench_insertion_sort]( - BenchId("ins_sort_random_" + str(count) + "_" + str(type)) + BenchId("ins_sort_random_" + String(count) + "_" + String(type)) ) @@ -254,11 +254,11 @@ fn bench_large_list_sort[type: DType](mut m: Bench, count: Int) raises: _ = list^ m.bench_function[bench_sort_list]( - BenchId("std_sort_random_" + str(count) + "_" + str(type)) + BenchId("std_sort_random_" + String(count) + "_" + String(type)) ) m.bench_function[bench_heap_sort]( - BenchId("heap_sort_random_" + str(count) + "_" + str(type)) + BenchId("heap_sort_random_" + String(count) + "_" + String(type)) ) @@ -307,10 +307,14 @@ fn bench_low_cardinality_list_sort(mut m: Bench, count: Int, delta: Int) raises: _ = list^ m.bench_function[bench_sort_list]( - BenchId("std_sort_low_card_" + str(count) + "_delta_" + str(delta)) + BenchId( + "std_sort_low_card_" + String(count) + "_delta_" + String(delta) + ) ) m.bench_function[bench_heap_sort]( - BenchId("heap_sort_low_card_" + str(count) + "_delta_" + str(delta)) + BenchId( + "heap_sort_low_card_" + String(count) + "_delta_" + String(delta) + ) ) diff --git a/stdlib/benchmarks/collections/bench_dict.mojo b/stdlib/benchmarks/collections/bench_dict.mojo index a4ed39e99f..10f04f62ae 100644 --- a/stdlib/benchmarks/collections/bench_dict.mojo +++ b/stdlib/benchmarks/collections/bench_dict.mojo @@ -65,7 +65,7 @@ fn bench_dict_insert[size: Int](mut b: Bencher) raises: items[key] = Int(random.random_si64(0, size)) b.iter[call_fn]() - keep(bool(items)) + keep(Bool(items)) # ===-----------------------------------------------------------------------===# @@ -93,7 +93,7 @@ fn bench_dict_lookup[size: Int](mut b: Bencher) raises: keep(res) b.iter[call_fn]() - keep(bool(items)) + keep(Bool(items)) # ===-----------------------------------------------------------------------===# @@ -132,20 +132,24 @@ def main(): @parameter for i in range(len(sizes)): - alias size = sizes.get[i, Int]() + alias size = sizes[i] m.bench_function[bench_dict_insert[size]]( - BenchId("bench_dict_insert[" + str(size) + "]") + BenchId("bench_dict_insert[" + String(size) + "]") ) m.bench_function[bench_dict_lookup[size]]( - BenchId("bench_dict_lookup[" + str(size) + "]") + BenchId("bench_dict_lookup[" + String(size) + "]") ) m.dump_report() @parameter for i in range(len(sizes)): - alias size = sizes.get[i, Int]() + alias size = sizes[i] var mem_s = total_bytes_used(make_dict[size]()) print( - '"bench_dict_memory_size[' + str(size) + ']",' + str(mem_s) + ",0" + '"bench_dict_memory_size[' + + String(size) + + ']",' + + String(mem_s) + + ",0" ) diff --git a/stdlib/benchmarks/collections/bench_string.mojo b/stdlib/benchmarks/collections/bench_string.mojo index 8805ac9d06..fe8ba978ed 100644 --- a/stdlib/benchmarks/collections/bench_string.mojo +++ b/stdlib/benchmarks/collections/bench_string.mojo @@ -53,9 +53,9 @@ fn make_string[ items.append(items[i]) i = i + 1 if i < len(items) - 1 else 0 items.append(0) - return String(items^) + return String(buffer=items^) else: - return String(f.read_bytes()) + return String(buffer=f.read_bytes()) except e: print(e, file=2) return abort[String]() @@ -94,7 +94,7 @@ fn bench_string_count[ keep(amnt) b.iter[call_fn]() - keep(bool(items)) + keep(Bool(items)) # ===-----------------------------------------------------------------------===# @@ -121,7 +121,7 @@ fn bench_string_split[ keep(res.data) b.iter[call_fn]() - keep(bool(items)) + keep(Bool(items)) # ===-----------------------------------------------------------------------===# @@ -140,7 +140,7 @@ fn bench_string_splitlines[ keep(res.data) b.iter[call_fn]() - keep(bool(items)) + keep(Bool(items)) # ===-----------------------------------------------------------------------===# @@ -159,7 +159,7 @@ fn bench_string_lower[ keep(res._buffer.data) b.iter[call_fn]() - keep(bool(items)) + keep(Bool(items)) # ===-----------------------------------------------------------------------===# @@ -178,7 +178,7 @@ fn bench_string_upper[ keep(res._buffer.data) b.iter[call_fn]() - keep(bool(items)) + keep(Bool(items)) # ===-----------------------------------------------------------------------===# @@ -200,7 +200,7 @@ fn bench_string_replace[ keep(res._buffer.data) b.iter[call_fn]() - keep(bool(items)) + keep(Bool(items)) # ===-----------------------------------------------------------------------===# @@ -219,7 +219,7 @@ fn bench_string_is_valid_utf8[ keep(res) b.iter[call_fn]() - keep(bool(items)) + keep(Bool(items)) # ===-----------------------------------------------------------------------===# @@ -255,14 +255,14 @@ def main(): @parameter for i in range(len(lengths)): - alias length = lengths.get[i, Int]() + alias length = lengths[i] @parameter for j in range(len(filenames)): - alias fname = filenames.get[j, StringLiteral]() - alias old = old_chars.get[j, StringLiteral]() - alias new = new_chars.get[j, StringLiteral]() - suffix = "[" + str(length) + "]" # "(" + fname + ")" + alias fname = filenames[j] + alias old = old_chars[j] + alias new = new_chars[j] + suffix = "[" + String(length) + "]" # "(" + fname + ")" m.bench_function[bench_string_count[length, fname, old]]( BenchId("bench_string_count" + suffix) ) diff --git a/stdlib/benchmarks/hashlib/bench_hash.mojo b/stdlib/benchmarks/hashlib/bench_hash.mojo index 6d2ba54044..0d95cc9afe 100644 --- a/stdlib/benchmarks/hashlib/bench_hash.mojo +++ b/stdlib/benchmarks/hashlib/bench_hash.mojo @@ -586,7 +586,7 @@ fn gen_word_pairs[words: String = words_en]() -> List[String]: try: var list = words.split(",") for w in list: - var w1 = str(w[].strip()) + var w1 = String(w[].strip()) for w in list: var w2 = w[].strip() result.append(w1 + " " + w2) diff --git a/stdlib/docs/bencher/Bench.md b/stdlib/docs/bencher/Bench.md deleted file mode 100644 index 19133b572f..0000000000 --- a/stdlib/docs/bencher/Bench.md +++ /dev/null @@ -1,174 +0,0 @@ ---- -title: Bench -version: 0.0.0 -slug: Bench -type: struct -namespace: benchmark.bencher ---- - -
- -Defines the main Benchmark struct which executes a Benchmark and print result. - -## Fields - -- ​config (`BenchConfig`): Constructs a Benchmark object based on specific - configuration and mode. -- ​mode (`Mode`): Benchmark mode object representing benchmark or test - mode. -- ​info_vec (`List[BenchmarkInfo]`): A list containing the bencmark info. - -## Implemented traits - -`AnyType`, -`Copyable`, -`Movable` - -## Methods - -### `__init__` - -
- -
- -```mojo -__init__(out self: Self, config: Optional[BenchConfig] = #kgen.none, mode: Mode = 0) -``` - -
- -Constructs a Benchmark object based on specific configuration and mode. - -**Args:** - -- ​config (`Optional[BenchConfig]`): Benchmark configuration object to - control length and frequency of benchmarks. -- ​mode (`Mode`): Benchmark mode object representing benchmark or test - mode. - -
- -### `bench_with_input` - -
- -
- -```mojo -bench_with_input[T: AnyType, bench_fn: fn(mut Bencher, $0) capturing -> None](mut self: Self, bench_id: BenchId, input: T, throughput_elems: Optional[Int] = #kgen.none) -``` - -
- -Benchmarks an input function with input args of type AnyType. - -**Parameters:** - -- ​T (`AnyType`): Benchmark function input type. -- ​bench_fn (`fn(mut Bencher, $0) capturing -> None`): The function to - be benchmarked. - -**Args:** - -- ​bench_id (`BenchId`): The benchmark Id object used for identification. -- ​input (`T`): Represents the target function's input arguments. -- ​throughput_elems (`Optional[Int]`): Optional argument representing - algorithmic throughput. - -
- -
- -
- -```mojo -bench_with_input[T: AnyTrivialRegType, bench_fn: fn(mut Bencher, $0) capturing -> None](mut self: Self, bench_id: BenchId, input: T, throughput_elems: Optional[Int] = #kgen.none) -``` - -
- -Benchmarks an input function with input args of type AnyTrivialRegType. - -**Parameters:** - -- ​T (`AnyTrivialRegType`): Benchmark function input type. -- ​bench_fn (`fn(mut Bencher, $0) capturing -> None`): The function to - be benchmarked. - -**Args:** - -- ​bench_id (`BenchId`): The benchmark Id object used for identification. -- ​input (`T`): Represents the target function's input arguments. -- ​throughput_elems (`Optional[Int]`): Optional argument representing - algorithmic throughput. - -
- -### `bench_function` - -
- -
- -```mojo -bench_function[bench_fn: fn(mut Bencher) capturing -> None](mut self: Self, bench_id: BenchId, throughput_elems: Optional[Int] = #kgen.none) -``` - -
- -Benchmarks or Tests an input function. - -**Parameters:** - -- ​bench_fn (`fn(mut Bencher) capturing -> None`): The function to be - benchmarked. - -**Args:** - -- ​bench_id (`BenchId`): The benchmark Id object used for identification. -- ​throughput_elems (`Optional[Int]`): Optional argument representing - algorithmic throughput. - -
- -
- -
- -```mojo -bench_function[bench_fn: fn(mut Bencher) raises capturing -> None](mut self: Self, bench_id: BenchId, throughput_elems: Optional[Int] = #kgen.none) -``` - -
- -Benchmarks or Tests an input function. - -**Parameters:** - -- ​bench_fn (`fn(mut Bencher) raises capturing -> None`): The function - to be benchmarked. - -**Args:** - -- ​bench_id (`BenchId`): The benchmark Id object used for identification. -- ​throughput_elems (`Optional[Int]`): Optional argument representing - algorithmic throughput. - -
- -### `dump_report` - -
- -
- -`dump_report(self: Self)` - -
- -Prints out the report from a Benchmark execution. - -
- -
diff --git a/stdlib/docs/bencher/BenchConfig.md b/stdlib/docs/bencher/BenchConfig.md deleted file mode 100644 index 8a83984d5e..0000000000 --- a/stdlib/docs/bencher/BenchConfig.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: BenchConfig -version: 0.0.0 -slug: BenchConfig -type: struct -namespace: benchmark.bencher ---- - -
- -Defines a benchmark configuration struct to control execution times and -frequency. - -## Fields - -- ​out_file (`Optional[Path]`): Output file to write results to. -- ​min_runtime_secs (`SIMD[float64, 1]`): Lower bound on benchmarking time - in secs. -- ​max_runtime_secs (`SIMD[float64, 1]`): Upper bound on benchmarking time - in secs. -- ​min_warmuptime_secs (`SIMD[float64, 1]`): Lower bound on the warmup time - in secs. -- ​max_batch_size (`Int`): The maximum number of iterations to perform per - time measurement. -- ​max_iters (`Int`): Max number of iterations to run. -- ​num_repetitions (`Int`): Number of times the benchmark has to be - repeated. -- ​flush_denormals (`Bool`): Whether or not the denormal values are - flushed. -- ​show_progress (`Bool`): Whether or not to show the progress of each - benchmark. -- ​tabular_view (`Bool`): Whether to print results in csv readable/tabular - format. - -## Implemented traits - -`AnyType`, -`CollectionElement`, -`Copyable`, -`Movable` - -## Methods - -### `__init__` - -
- -
- -```mojo -__init__(out self: out_file: Optional[Path] = None, min_runtime_secs: SIMD[float64, 1] = 1.0, max_runtime_secs: SIMD[float64, 1] = 2.0, min_warmuptime_secs: SIMD[float64, 1] = 1.0, max_batch_size: Int = 0, max_iters: Int = 1000000000, num_repetitions: Int = 1, flush_denormals: Bool = True) -``` - -
- -Constructs and initializes Benchmark config object with default and inputted values. - -**Args:** - -- ​out_file (`Optional[Path]`): Output file to write results to. -- ​min_runtime_secs (`SIMD[float64, 1]`): Upper bound on benchmarking time - in secs (default `1.0`). -- ​max_runtime_secs (`SIMD[float64, 1]`): Lower bound on benchmarking time - in secs (default `2.0`). -- ​min_warmuptime_secs (`SIMD[float64, 1]`): Lower bound on the warmup time - in secs (default `1.0`). -- ​max_batch_size (`Int`): The maximum number of iterations to perform per - time measurement. -- ​max_iters (`Int`): Max number of iterations to run (default - `1_000_000_000`). -- ​num_repetitions (`Int`): Number of times the benchmark has to be - repeated. -- ​flush_denormals (`Bool`): Whether or not the denormal values are - flushed. - -
- -
diff --git a/stdlib/docs/bencher/BenchId.md b/stdlib/docs/bencher/BenchId.md deleted file mode 100644 index 0d215bd972..0000000000 --- a/stdlib/docs/bencher/BenchId.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: BenchId -version: 0.0.0 -slug: BenchId -type: struct -namespace: benchmark.bencher ---- - -
- -Defines a benchmark ID struct to identify and represent a particular benchmark -execution. - -## Fields - -- ​func_name (`String`): The target function name. -- ​input_id (`Optional[String]`): The target function input ID phrase. - -## Implemented traits - -`AnyType`, -`Copyable`, -`Movable` - -## Methods - -### `__init__` - -
- -
- -`__init__(out self: Self, func_name: String, input_id: String)` - -
- -Constructs a Benchmark Id object from input function name and Id phrase. - -**Args:** - -- ​func_name (`String`): The target function name. -- ​input_id (`String`): The target function input id phrase. - -
- -
- -
- -`__init__(out self: Self, func_name: String)` - -
- -Constructs a Benchmark Id object from input function name. - -**Args:** - -- ​func_name (`String`): The target function name. - -
- -
diff --git a/stdlib/docs/bencher/Bencher.md b/stdlib/docs/bencher/Bencher.md deleted file mode 100644 index 91d68e80d8..0000000000 --- a/stdlib/docs/bencher/Bencher.md +++ /dev/null @@ -1,117 +0,0 @@ ---- -title: Bencher -version: 0.0.0 -slug: Bencher -type: struct -namespace: benchmark.bencher ---- - -
- -Defines a Bencher struct which facilitates the timing of a target function. - -## Fields - -- ​num_iters (`Int`): Number of iterations to run the target function. -- ​elapsed (`Int`): The total time elpased when running the target - function. - -## Implemented traits - -`AnyType`, -`Copyable`, -`Movable` - -## Methods - -### `__init__` - -
- -
- -`__init__(out self: Self, num_iters: Int)` - -
- -Constructs a Bencher object to run and time a function. - -**Args:** - -- ​num_iters (`Int`): Number of times to run the target function. - -
- -### `iter` - -
- -
- -`iter[iter_fn: fn() capturing -> None](mut self: Self)` - -
- -Returns the total elapsed time by running a target function a particular number -of times. - -**Parameters:** - -- ​iter_fn (`fn() capturing -> None`): The target function to benchmark. - -
- -
- -
- -`iter[iter_fn: fn() raises capturing -> None](mut self: Self)` - -
- -Returns the total elapsed time by running a target function a particular number -of times. - -**Parameters:** - -- ​iter_fn (`fn() raises capturing -> None`): The target function to - benchmark. - -
- -### `iter_custom` - -
- -
- -`iter_custom[iter_fn: fn(Int) capturing -> Int](mut self: Self)` - -
- -Times a target function with custom number of iterations. - -**Parameters:** - -- ​iter_fn (`fn(Int) capturing -> Int`): The target function to benchmark. - -
- -
- -
- -`iter_custom[iter_fn: fn(Int) raises capturing -> Int](mut self: Self)` - -
- -Times a target function with custom number of iterations. - -**Parameters:** - -- ​iter_fn (`fn(Int) raises capturing -> Int`): The target function to - benchmark. - -
- -
diff --git a/stdlib/docs/bencher/BenchmarkInfo.md b/stdlib/docs/bencher/BenchmarkInfo.md deleted file mode 100644 index 52b2922fa0..0000000000 --- a/stdlib/docs/bencher/BenchmarkInfo.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: BenchmarkInfo -version: 0.0.0 -slug: BenchmarkInfo -type: struct -namespace: benchmark.bencher ---- - -
- -Defines a Benchmark Info struct to record execution Statistics. - -## Fields - -- ​name (`String`): The name of the benchmark. -- ​result (`Report`): The output report after executing a benchmark. -- ​elems (`Optional[Int]`): Optional arg used to represent a specific - metric like throughput. - -## Implemented traits - -`AnyType`, -`CollectionElement`, -`Copyable`, -`Movable`, -`Stringable` - -## Methods - -### `__init__` - -
- -
- -`__init__(out self: Self, name: String, result: Report, elems: Optional[Int])` - -
- -Constructs a Benchmark Info object to return Benchmark report and Stats. - -**Args:** - -- ​name (`String`): The name of the benchmark. -- ​result (`Report`): The output report after executing a benchmark. -- ​elems (`Optional[Int]`): Optional arg used to represent a specific - metric like throughput. - -
- -
diff --git a/stdlib/docs/bencher/Mode.md b/stdlib/docs/bencher/Mode.md deleted file mode 100644 index 74efd79cc0..0000000000 --- a/stdlib/docs/bencher/Mode.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: Mode -version: 0.0.0 -slug: Mode -type: struct -namespace: benchmark.bencher ---- - -
- -Defines a Benchmark Mode to distinguish between test runs and actual benchmarks. - -## Aliases - -- `Benchmark = 0`: -- `Test = 1`: - -## Fields - -- ​value (`Int`): Represents the mode type. - -## Implemented traits - -`AnyType`, -`Copyable`, -`Movable` - -## Methods - -### `__eq__` - -
- -
- -`__eq__(self: Self, other: Self) -> Bool` - -
- -Check if its Benchmark mode or test mode. - -**Args:** - -- ​other (`Self`): The mode to be compared against. - -**Returns:** - -If its a test mode or benchmark mode. - -
- -
diff --git a/stdlib/docs/bencher/index.md b/stdlib/docs/bencher/index.md deleted file mode 100644 index 0372bc6dfb..0000000000 --- a/stdlib/docs/bencher/index.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: bencher -version: 0.0.0 -type: module -namespace: benchmark ---- - -
- -
- -This is preview documentation for the `bencher` module, available in nightly -builds now. This documentation will move to -[docs.modular.com](https://docs.modular.com/mojo/stdlib/benchmark/) soon. - -You can import these APIs from the `benchmark` package. For example: - -```mojo -from benchmark import Bencher -``` - -
- -## Structs - -- [​`BenchConfig`](./BenchConfig): Defines a benchmark configuration struct to - control execution times and frequency. -- [​`BenchId`](./BenchId): Defines a benchmark Id struct to identify and - represent a particular benchmark execution. -- [​`BenchmarkInfo`](./BenchmarkInfo): Defines a Benchmark Info struct to record - execution Statistics. -- [​`Mode`](./Mode): Defines a Benchmark Mode to distinguish between test runs - and actual benchmarks. -- [​`Bench`](./Bench): Defines the main Benchmark struct which executes a - Benchmark and print result. -- [​`Bencher`](./Bencher): Defines a Bencher struct which facilitates the timing - of a target function. - -
diff --git a/stdlib/docs/development.md b/stdlib/docs/development.md index 024dc87b6c..ef21e6fb81 100644 --- a/stdlib/docs/development.md +++ b/stdlib/docs/development.md @@ -239,7 +239,7 @@ fn get_cwd_and_paths() raises -> List[String]: result = List[String]() result.append(pathlib.get_cwd_message()) for path in cwd().listdir(): - result.append(str(path[])) + result.append(String(path[])) ``` This won't work because it's importing `pathlib` from the `stdlib.mojopkg` that diff --git a/stdlib/docs/style-guide.md b/stdlib/docs/style-guide.md index 82002c152c..e2298d1b66 100644 --- a/stdlib/docs/style-guide.md +++ b/stdlib/docs/style-guide.md @@ -371,7 +371,7 @@ a closure as a parameter that only runs when assertions are enabled: tensor = Tensor[DType.uint8, 1](TensorShape(1), cpu_device()) fn _test_cpu() capturing -> Bool: - return "cpu" in str(tensor._device) + return "cpu" in String(tensor._device) debug_assert[_test_cpu]("This code is only runnable on CPU") ``` diff --git a/stdlib/src/base64/base64.mojo b/stdlib/src/base64/base64.mojo index 2d84146ce9..b063916ddc 100644 --- a/stdlib/src/base64/base64.mojo +++ b/stdlib/src/base64/base64.mojo @@ -195,7 +195,7 @@ fn b16encode(str: StringSlice) -> String: out.append(0) - return String(out^) + return String(buffer=out^) # ===-----------------------------------------------------------------------===# @@ -240,4 +240,4 @@ fn b16decode(str: StringSlice) -> String: p.append(decode(hi) << 4 | decode(lo)) p.append(0) - return String(p^) + return String(buffer=p^) diff --git a/stdlib/src/builtin/_format_float.mojo b/stdlib/src/builtin/_format_float.mojo index ad1a93b0da..690501c379 100644 --- a/stdlib/src/builtin/_format_float.mojo +++ b/stdlib/src/builtin/_format_float.mojo @@ -545,16 +545,16 @@ fn _divide_by_pow10[ if CarrierDType is DType.uint64: @parameter - if N == 1 and bool(n_max <= 4611686018427387908): + if N == 1 and Bool(n_max <= 4611686018427387908): return _umul128_upper64(n, 1844674407370955162) - elif N == 3 and bool(n_max <= 15534100272597517998): + elif N == 3 and Bool(n_max <= 15534100272597517998): return _umul128_upper64(n, 4722366482869645214) >> 8 else: return n / pow(10, N) else: @parameter - if N == 1 and bool(n_max <= 1073741828): + if N == 1 and Bool(n_max <= 1073741828): return (_umul64(n.cast[DType.uint32](), 429496730) >> 32).cast[ CarrierDType ]() diff --git a/stdlib/src/builtin/_location.mojo b/stdlib/src/builtin/_location.mojo index 463cba7b08..410d332e66 100644 --- a/stdlib/src/builtin/_location.mojo +++ b/stdlib/src/builtin/_location.mojo @@ -40,7 +40,7 @@ struct _SourceLocation(Writable, Stringable): Args: msg: The message to attach the prefix to. """ - return "At " + str(self) + ": " + str(msg) + return "At " + String(self) + ": " + String(msg) fn write_to[W: Writer](self, mut writer: W): """ diff --git a/stdlib/src/builtin/bool.mojo b/stdlib/src/builtin/bool.mojo index 213d080e21..e83425f8e5 100644 --- a/stdlib/src/builtin/bool.mojo +++ b/stdlib/src/builtin/bool.mojo @@ -167,6 +167,27 @@ struct Bool( """ self = value.__bool__() + @always_inline + fn __init__[T: Boolable, //](out self, value: T): + """Set the bool representation of the object. + + Parameters: + T: The type of the object. + + Args: + value: The object to get the bool representation of. + """ + self = value.__bool__() + + @always_inline + fn __init__(out self, value: None): + """Set the bool representation of the `None` type to `False`. + + Args: + value: The object to get the bool representation of. + """ + self = False + @always_inline("nodebug") @implicit fn __init__(out self, value: SIMD[DType.bool, 1]): @@ -248,7 +269,7 @@ struct Bool( Returns: A string representation. """ - return str(self) + return String(self) @always_inline("nodebug") fn __int__(self) -> Int: @@ -533,19 +554,9 @@ struct Bool( # ===----------------------------------------------------------------------=== # -@always_inline -fn bool(value: None) -> Bool: - """Get the bool representation of the `None` type. - - Args: - value: The object to get the bool representation of. - - Returns: - The bool representation of the object. - """ - return False - - +@deprecated( + "the `bool` function is deprecated, use the `Bool` constructor instead" +) @always_inline fn bool[T: Boolable, //](value: T) -> Bool: """Get the bool representation of the object. diff --git a/stdlib/src/builtin/builtin_list.mojo b/stdlib/src/builtin/builtin_list.mojo index 535ccf206f..b89b9db1c6 100644 --- a/stdlib/src/builtin/builtin_list.mojo +++ b/stdlib/src/builtin/builtin_list.mojo @@ -91,6 +91,7 @@ struct ListLiteral[*Ts: CollectionElement](Sized, CollectionElement): # Methods # ===-------------------------------------------------------------------===# + # FIXME: This should have a getitem like Tuple does, not a "get" method. @always_inline fn get[i: Int, T: CollectionElement](self) -> ref [self.storage] T: """Get a list element at the given index. @@ -102,7 +103,7 @@ struct ListLiteral[*Ts: CollectionElement](Sized, CollectionElement): Returns: The element at the given index. """ - return self.storage.get[i, T]() + return rebind[T](self.storage[i]) # ===-------------------------------------------------------------------===# # Operator dunders @@ -457,7 +458,7 @@ struct VariadicListMem[ # ===-----------------------------------------------------------------------===# -alias _AnyTypeMetaType = __mlir_type[`!lit.anytrait<`, AnyType, `>`] +alias _AnyTypeMetaType = __type_of(AnyType) @register_passable diff --git a/stdlib/src/builtin/char.mojo b/stdlib/src/builtin/char.mojo index 3116e454a2..aa316d21a7 100644 --- a/stdlib/src/builtin/char.mojo +++ b/stdlib/src/builtin/char.mojo @@ -13,6 +13,11 @@ """Implements the `Char` type for representing single characters.""" from collections import Optional +from collections.string import StringSlice + +from bit import count_leading_zeros + +from memory import UnsafePointer @always_inline @@ -31,7 +36,7 @@ fn _is_unicode_scalar_value(codepoint: UInt32) -> Bool: @value -struct Char(CollectionElement): +struct Char(CollectionElement, EqualityComparable, Intable, Stringable): """A single textual character. This type represents a single textual character. Specifically, this type @@ -45,9 +50,14 @@ struct Char(CollectionElement): [1]: https://www.unicode.org/glossary/#unicode_scalar_value """ - var _codepoint: UInt32 + var _scalar_value: UInt32 """The Unicode scalar value represented by this type.""" + # ===-------------------------------------------------------------------===# + # Life cycle methods + # ===-------------------------------------------------------------------===# + + @always_inline fn __init__(out self, *, unsafe_unchecked_codepoint: UInt32): """Construct a `Char` from a code point value without checking that it falls in the valid range. @@ -66,7 +76,23 @@ struct Char(CollectionElement): "codepoint is not a valid Unicode scalar value", ) - self._codepoint = unsafe_unchecked_codepoint + self._scalar_value = unsafe_unchecked_codepoint + + @always_inline + fn __init__(out self, codepoint: UInt8): + """Construct a `Char` from a single byte value. + + This constructor cannot fail because non-negative 8-bit integers are + valid Unicode scalar values. + + Args: + codepoint: The 8-bit codepoint value to convert to a `Char`. + """ + self._scalar_value = UInt32(Int(codepoint)) + + # ===-------------------------------------------------------------------===# + # Factory methods + # ===-------------------------------------------------------------------===# @staticmethod fn from_u32(codepoint: UInt32) -> Optional[Self]: @@ -85,3 +111,392 @@ struct Char(CollectionElement): return Char(unsafe_unchecked_codepoint=codepoint) else: return None + + @staticmethod + fn ord(string: StringSlice) -> Char: + """Returns the `Char` that represents the given one-character string. + + Given a string representing one character, return a `Char` + representing the codepoint of that character. For example, `Char.ord("a")` + returns the codepoint `97`. This is the inverse of the `chr()` function. + + This function is similar to the `ord()` free function, except that it + returns a `Char` instead of an `Int`. + + Args: + string: The input string, which must contain only a single character. + + Returns: + A `Char` representing the codepoint of the given character. + """ + + # SAFETY: + # This is safe because `StringSlice` is guaranteed to point to valid + # UTF-8. + char, num_bytes = Char.unsafe_decode_utf8_char(string.unsafe_ptr()) + + debug_assert( + string.byte_length() == Int(num_bytes), + "input string must be one character", + ) + + return char + + @staticmethod + fn unsafe_decode_utf8_char(_ptr: UnsafePointer[Byte]) -> (Char, Int): + """Decodes a single `Char` and number of bytes read from a given UTF-8 + string pointer. + + Safety: + `_ptr` MUST point to the first byte in a **known-valid** UTF-8 + character sequence. This function MUST NOT be used on unvalidated + input. + + Args: + _ptr: Pointer to UTF-8 encoded data containing at least one valid + encoded codepoint. + + Returns: + The decoded codepoint `Char`, as well as the number of bytes read. + + """ + # UTF-8 to Unicode conversion: (represented as UInt32 BE) + # 1: 0aaaaaaa -> 00000000 00000000 00000000 0aaaaaaa a + # 2: 110aaaaa 10bbbbbb -> 00000000 00000000 00000aaa aabbbbbb a << 6 | b + # 3: 1110aaaa 10bbbbbb 10cccccc -> 00000000 00000000 aaaabbbb bbcccccc a << 12 | b << 6 | c + # 4: 11110aaa 10bbbbbb 10cccccc 10dddddd -> 00000000 000aaabb bbbbcccc ccdddddd a << 18 | b << 12 | c << 6 | d + var ptr = _ptr + + var b1 = ptr[] + if (b1 >> 7) == 0: # This is 1 byte ASCII char + return Char(b1), 1 + + # TODO: Use _utf8_first_byte_sequence_length() here instead for + # consistency. + var num_bytes = count_leading_zeros(~b1) + debug_assert( + 1 < Int(num_bytes) < 5, "invalid UTF-8 byte ", b1, " at index 0" + ) + + var shift = Int((6 * (num_bytes - 1))) + var b1_mask = 0b11111111 >> (num_bytes + 1) + var result = Int(b1 & b1_mask) << shift + for i in range(1, num_bytes): + ptr += 1 + # Assert that this is a continuation byte + debug_assert( + ptr[] >> 6 == 0b00000010, + "invalid UTF-8 byte ", + ptr[], + " at index ", + i, + ) + shift -= 6 + result |= Int(ptr[] & 0b00111111) << shift + + # SAFETY: Safe because the input bytes are required to be valid UTF-8, + # and valid UTF-8 will never decode to an out of bounds codepoint + # using the above algorithm. + # FIXME: + # UTF-8 encoding algorithms that do not properly exclude surrogate + # pair code points are actually relatively common (as I understand + # it); the algorithm above does not check for that. + var char = Char(unsafe_unchecked_codepoint=result) + + return char, Int(num_bytes) + + # ===-------------------------------------------------------------------===# + # Operator dunders + # ===-------------------------------------------------------------------===# + + fn __eq__(self, other: Self) -> Bool: + """Return True if this character has the same codepoint value as `other`. + + Args: + other: The codepoint value to compare against. + + Returns: + True if this character and `other` have the same codepoint value; + False otherwise. + """ + return self.to_u32() == other.to_u32() + + fn __ne__(self, other: Self) -> Bool: + """Return True if this character has a different codepoint value from + `other`. + + Args: + other: The codepoint value to compare against. + + Returns: + True if this character and `other` have different codepoint values; + False otherwise. + """ + return self.to_u32() != other.to_u32() + + # ===-------------------------------------------------------------------===# + # Trait implementations + # ===-------------------------------------------------------------------===# + + @always_inline + fn __int__(self) -> Int: + """Returns the numeric value of this scalar value as an integer. + + Returns: + The numeric value of this scalar value as an integer. + """ + return Int(self._scalar_value) + + @always_inline + fn __str__(self) -> String: + """Formats this `Char` as a single-character string. + + Returns: + A string containing this single character. + """ + var char_len = self.utf8_byte_length() + var buffer = List[Byte](capacity=char_len + 1) + _ = self.unsafe_write_utf8(buffer.unsafe_ptr()) + buffer.unsafe_ptr()[char_len] = 0 + buffer.size = char_len + 1 + return String(buffer=buffer^) + + # ===-------------------------------------------------------------------===# + # Methods + # ===-------------------------------------------------------------------===# + + @always_inline + fn is_ascii(self) -> Bool: + """Returns True if this `Char` is an ASCII character. + + All ASCII characters are less than or equal to codepoint value 127, and + take exactly 1 byte to encode in UTF-8. + + Returns: + A boolean indicating if this `Char` is an ASCII character. + """ + return self._scalar_value <= 0b0111_1111 + + fn is_ascii_digit(self) -> Bool: + """Determines whether the given character is a digit [0-9]. + + Returns: + True if the character is a digit. + """ + alias ord_0 = UInt32(ord("0")) + alias ord_9 = UInt32(ord("9")) + return ord_0 <= self.to_u32() <= ord_9 + + fn is_ascii_upper(self) -> Bool: + """Determines whether the given character is an uppercase character. + + This currently only respects the default "C" locale, i.e. returns True + iff the character specified is one of "ABCDEFGHIJKLMNOPQRSTUVWXYZ". + + Returns: + True if the character is uppercase. + """ + alias ord_a = UInt32(ord("A")) + alias ord_z = UInt32(ord("Z")) + return ord_a <= self.to_u32() <= ord_z + + fn is_ascii_lower(self) -> Bool: + """Determines whether the given character is an lowercase character. + + This currently only respects the default "C" locale, i.e. returns True + iff the character specified is one of "abcdefghijklmnopqrstuvwxyz". + + Returns: + True if the character is lowercase. + """ + alias ord_a = UInt32(ord("a")) + alias ord_z = UInt32(ord("z")) + return ord_a <= self.to_u32() <= ord_z + + fn is_ascii_printable(self) -> Bool: + """Determines whether the given character is a printable character. + + Returns: + True if the character is a printable character, otherwise False. + """ + alias ord_space = UInt32(ord(" ")) + alias ord_tilde = UInt32(ord("~")) + return ord_space <= self.to_u32() <= ord_tilde + + @always_inline + fn is_python_space(self) -> Bool: + """Determines whether this character is a Python whitespace string. + + This corresponds to Python's [universal separators]( + https://docs.python.org/3/library/stdtypes.html#str.splitlines): + `" \\t\\n\\v\\f\\r\\x1c\\x1d\\x1e\\x85\\u2028\\u2029"`. + + Returns: + True if this character is one of the whitespace characters listed + above, otherwise False. + + # Examples + + Check if a string contains only whitespace: + + ```mojo + from testing import assert_true, assert_false + + # ASCII space characters + assert_true(Char.ord(" ").is_python_space()) + assert_true(Char.ord("\t").is_python_space()) + + # Unicode paragraph separator: + assert_true(Char.from_u32(0x2029).value().is_python_space()) + + # Letters are not space characters + assert_fales(Char.ord("a").is_python_space()) + ``` + . + """ + + alias next_line = Char.from_u32(0x85).value() + alias unicode_line_sep = Char.from_u32(0x2028).value() + alias unicode_paragraph_sep = Char.from_u32(0x2029).value() + + return self.is_posix_space() or self in ( + next_line, + unicode_line_sep, + unicode_paragraph_sep, + ) + + fn is_posix_space(self) -> Bool: + """Returns True if this `Char` is a **space** character according to the + [POSIX locale][1]. + + The POSIX locale is also known as the C locale. + + [1]: https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html#tag_07_03_01 + + This only respects the default "C" locale, i.e. returns True only if the + character specified is one of " \\t\\n\\v\\f\\r". For semantics similar + to Python, use `String.isspace()`. + + Returns: + True iff the character is one of the whitespace characters listed + above. + """ + if not self.is_ascii(): + return False + + # ASCII char + var c = UInt8(Int(self)) + + # NOTE: a global LUT doesn't work at compile time so we can't use it here. + alias ` ` = UInt8(ord(" ")) + alias `\t` = UInt8(ord("\t")) + alias `\n` = UInt8(ord("\n")) + alias `\r` = UInt8(ord("\r")) + alias `\f` = UInt8(ord("\f")) + alias `\v` = UInt8(ord("\v")) + alias `\x1c` = UInt8(ord("\x1c")) + alias `\x1d` = UInt8(ord("\x1d")) + alias `\x1e` = UInt8(ord("\x1e")) + + # This compiles to something very clever that's even faster than a LUT. + return ( + c == ` ` + or c == `\t` + or c == `\n` + or c == `\r` + or c == `\f` + or c == `\v` + or c == `\x1c` + or c == `\x1d` + or c == `\x1e` + ) + + @always_inline + fn to_u32(self) -> UInt32: + """Returns the numeric value of this scalar value as an unsigned 32-bit + integer. + + Returns: + The numeric value of this scalar value as an unsigned 32-bit + integer. + """ + return self._scalar_value + + @always_inline + fn unsafe_write_utf8(self, ptr: UnsafePointer[Byte]) -> UInt: + """Shift unicode to utf8 representation. + + Safety: + `ptr` MUST point to at least `self.utf8_byte_length()` allocated + bytes or else an out-of-bounds write will occur, which is undefined + behavior. + + Args: + ptr: Pointer value to write the encoded UTF-8 bytes. Must validly + point to a sufficient number of bytes (1-4) to hold the encoded + data. + + Returns: + Returns the number of bytes written. + + ### Unicode (represented as UInt32 BE) to UTF-8 conversion: + - 1: 00000000 00000000 00000000 0aaaaaaa -> 0aaaaaaa + - a + - 2: 00000000 00000000 00000aaa aabbbbbb -> 110aaaaa 10bbbbbb + - (a >> 6) | 0b11000000, b | 0b10000000 + - 3: 00000000 00000000 aaaabbbb bbcccccc -> 1110aaaa 10bbbbbb 10cccccc + - (a >> 12) | 0b11100000, (b >> 6) | 0b10000000, c | 0b10000000 + - 4: 00000000 000aaabb bbbbcccc ccdddddd -> 11110aaa 10bbbbbb 10cccccc + 10dddddd + - (a >> 18) | 0b11110000, (b >> 12) | 0b10000000, (c >> 6) | 0b10000000, + d | 0b10000000 + . + """ + var c = Int(self) + + var num_bytes = self.utf8_byte_length() + + if num_bytes == 1: + ptr[0] = UInt8(c) + return 1 + + var shift = 6 * (num_bytes - 1) + var mask = UInt8(0xFF) >> UInt8(num_bytes + 1) + var num_bytes_marker = UInt8(0xFF) << (8 - num_bytes) + ptr[0] = ((c >> shift) & mask) | num_bytes_marker + for i in range(1, num_bytes): + shift -= 6 + ptr[i] = ((c >> shift) & 0b0011_1111) | 0b1000_0000 + + return num_bytes + + @always_inline + fn utf8_byte_length(self) -> UInt: + """Returns the number of UTF-8 bytes required to encode this character. + + The returned value is always between 1 and 4 bytes. + + Returns: + Byte count of UTF-8 bytes required to encode this character. + """ + + # Minimum codepoint values (respectively) that can fit in a 1, 2, 3, + # and 4 byte encoded UTF-8 sequence. + alias sizes = SIMD[DType.int32, 4]( + 0, + 2**7, + 2**11, + 2**16, + ) + + # Count how many of the minimums this codepoint exceeds, which is equal + # to the number of bytes needed to encode it. + var lt = (sizes <= Int(self)).cast[DType.uint8]() + + # TODO(MOCO-1537): Support `reduce_add()` at compile time. + # var count = Int(lt.reduce_add()) + var count = 0 + for i in range(len(lt)): + count += Int(lt[i]) + + return UInt(count) diff --git a/stdlib/src/builtin/comparable.mojo b/stdlib/src/builtin/comparable.mojo index 7d74b062fd..5f503487d9 100644 --- a/stdlib/src/builtin/comparable.mojo +++ b/stdlib/src/builtin/comparable.mojo @@ -12,8 +12,8 @@ # ===----------------------------------------------------------------------=== # -trait Comparable(EqualityComparable): - """A type which can be compared with other instances of itself.""" +trait LessThanComparable: + """A type which can be less than compared with other instances of itself.""" fn __lt__(self, rhs: Self) -> Bool: """Define whether `self` is less than `rhs`. @@ -26,28 +26,43 @@ trait Comparable(EqualityComparable): """ ... - fn __le__(self, rhs: Self) -> Bool: - """Define whether `self` is less than or equal to `rhs`. + +trait GreaterThanComparable: + """A type which can be greater than compared with other instances of itself. + """ + + fn __gt__(self, rhs: Self) -> Bool: + """Define whether `self` is greater than `rhs`. Args: rhs: The right hand side of the comparison. Returns: - True if `self` is less than or equal to `rhs`. + True if `self` is greater than `rhs`. """ ... - fn __gt__(self, rhs: Self) -> Bool: - """Define whether `self` is greater than `rhs`. + +trait LessThanOrEqualComparable: + """A type which can be less than or equal to compared with other instances of itself. + """ + + fn __le__(self, rhs: Self) -> Bool: + """Define whether `self` is less than or equal to `rhs`. Args: rhs: The right hand side of the comparison. Returns: - True if `self` is greater than `rhs`. + True if `self` is less than or equal to `rhs`. """ ... + +trait GreaterThanOrEqualComparable: + """A type which can be greater than or equal to compared with other instances of itself. + """ + fn __ge__(self, rhs: Self) -> Bool: """Define whether `self` is greater than or equal to `rhs`. @@ -58,3 +73,13 @@ trait Comparable(EqualityComparable): True if `self` is greater than or equal to `rhs`. """ ... + + +trait Comparable( + EqualityComparable, + LessThanComparable, + GreaterThanComparable, + LessThanOrEqualComparable, + GreaterThanOrEqualComparable, +): + """A type which can be compared with other instances of itself.""" diff --git a/stdlib/src/builtin/debug_assert.mojo b/stdlib/src/builtin/debug_assert.mojo index 52dde896aa..896368dba2 100644 --- a/stdlib/src/builtin/debug_assert.mojo +++ b/stdlib/src/builtin/debug_assert.mojo @@ -113,7 +113,7 @@ fn debug_assert[ ```mojo person = "name: john, age: 50" name = "john" - debug_assert(str("name: ") + name == person, "unexpected name") + debug_assert(String("name: ") + name == person, "unexpected name") ``` This will have a runtime penality due to allocating a `String` in the @@ -122,7 +122,7 @@ fn debug_assert[ ```mojo fn check_name() capturing -> Bool: - return str("name: ") + name == person + return String("name: ") + name == person debug_assert[check_name]("unexpected name") ``` @@ -196,7 +196,7 @@ fn debug_assert[ ```mojo person = "name: john, age: 50" name = "john" - debug_assert(str("name: ") + name == person, "unexpected name") + debug_assert(String("name: ") + name == person, "unexpected name") ``` This will have a runtime penality due to allocating a `String` in the @@ -205,7 +205,7 @@ fn debug_assert[ ```mojo fn check_name() capturing -> Bool: - return str("name: ") + name == person + return String("name: ") + name == person debug_assert[check_name]("unexpected name") ``` diff --git a/stdlib/src/builtin/error.mojo b/stdlib/src/builtin/error.mojo index 6d78fa5191..0e599ecbf5 100644 --- a/stdlib/src/builtin/error.mojo +++ b/stdlib/src/builtin/error.mojo @@ -23,6 +23,7 @@ from memory.memory import _free from collections.string import StringSlice from utils import StringRef +from utils.write import write_buffered # ===-----------------------------------------------------------------------===# # Error @@ -112,6 +113,26 @@ struct Error( self.data = dest self.loaded_length = -length + @no_inline + fn __init__[ + *Ts: Writable + ](out self, *args: *Ts, sep: StringLiteral = "", end: StringLiteral = ""): + """ + Construct an Error by concatenating a sequence of Writable arguments. + + Args: + args: A sequence of Writable arguments. + sep: The separator used between elements. + end: The String to write after printing the elements. + + Parameters: + Ts: The types of the arguments to format. Each type must be satisfy + `Writable`. + """ + var output = String() + write_buffered(output, args, sep=sep, end=end) + self = Error(output) + fn copy(self) -> Self: """Copy the object. @@ -184,7 +205,7 @@ struct Error( Returns: A printable representation of the error message. """ - return String.write("Error(", repr(self._message()), ")") + return String("Error(", repr(self._message()), ")") # ===-------------------------------------------------------------------===# # Methods diff --git a/stdlib/src/builtin/file.mojo b/stdlib/src/builtin/file.mojo index 4aa4784f1b..7851c20868 100644 --- a/stdlib/src/builtin/file.mojo +++ b/stdlib/src/builtin/file.mojo @@ -424,7 +424,7 @@ struct FileHandle: args: Sequence of arguments to write to this Writer. """ var file = FileDescriptor(self._get_raw_fd()) - write_buffered[buffer_size=4096](file, args) + write_buffered(file, args) fn _write[ address_space: AddressSpace diff --git a/stdlib/src/builtin/float_literal.mojo b/stdlib/src/builtin/float_literal.mojo index 6cee98bafa..9ddc2de605 100644 --- a/stdlib/src/builtin/float_literal.mojo +++ b/stdlib/src/builtin/float_literal.mojo @@ -122,7 +122,7 @@ struct FloatLiteral( Returns: A string representation. """ - return str(Float64(self)) + return String(Float64(self)) @always_inline("nodebug") fn __int_literal__(self) -> IntLiteral: diff --git a/stdlib/src/builtin/floatable.mojo b/stdlib/src/builtin/floatable.mojo index 1510173716..ed921aa2a7 100644 --- a/stdlib/src/builtin/floatable.mojo +++ b/stdlib/src/builtin/floatable.mojo @@ -18,10 +18,7 @@ These are Mojo built-ins, so you don't need to import them. trait Floatable: - """The `Floatable` trait describes a type that can be converted to a Float. - - Any type that conforms to `Floatable` works with the built-in `float` - function. + """The `Floatable` trait describes a type that can be converted to a Float64. This trait requires the type to implement the `__float__()` method. @@ -36,10 +33,10 @@ trait Floatable: return self.i ``` - A `Foo` can now be converted to a `Float64` using `float`: + A `Foo` can now be converted to a `Float64`: ```mojo - var f = float(Foo(5.5)) + var f = Float64(Foo(5.5)) ``` **Note:** If the `__float__()` method can raise an error, use @@ -58,10 +55,7 @@ trait Floatable: trait FloatableRaising: """The `FloatableRaising` trait describes a type that can be converted to a - Float, but the conversion might raise an error (e.g.: a string). - - Any type that conforms to `FloatableRaising` works with the built-in `float` - function. + Float64, but the conversion might raise an error (e.g.: a string). This trait requires the type to implement the `__float__()` method, which can raise an error. @@ -81,11 +75,11 @@ trait FloatableRaising: return self.value[Float64] ``` - A `MaybeFloat` can now be converted to `Float64` using `float`: + A `MaybeFloat` can now be converted to `Float64`: ```mojo try: - print(float(MaybeFloat(4.6))) + print(Float64(MaybeFloat(4.6))) except: print("error occured") ``` @@ -103,6 +97,10 @@ trait FloatableRaising: ... +# FIXME(25.2): Move float deprecation warnings to compiler errors +@deprecated( + "the `float` function is deprecated, use the `Float64` constructor instead" +) @always_inline fn float[T: Floatable](value: T, /) -> Float64: """Get the Float representation of the value. @@ -119,6 +117,9 @@ fn float[T: Floatable](value: T, /) -> Float64: return value.__float__() +@deprecated( + "the `float` function is deprecated, use the `Float64` constructor instead" +) @always_inline fn float[T: FloatableRaising](value: T, /) raises -> Float64: """Get the Float representation of the value. @@ -138,8 +139,9 @@ fn float[T: FloatableRaising](value: T, /) raises -> Float64: return value.__float__() -# TODO: Int can't conform to Floatable at the moment due to circular -# dependency with SIMD. +@deprecated( + "the `float` function is deprecated, use the `Float64` constructor instead" +) @always_inline fn float(value: Int, /) -> Float64: """Get the Float representation of the Int. diff --git a/stdlib/src/builtin/format_int.mojo b/stdlib/src/builtin/format_int.mojo index 79726e1a99..c54b602d19 100644 --- a/stdlib/src/builtin/format_int.mojo +++ b/stdlib/src/builtin/format_int.mojo @@ -225,7 +225,7 @@ fn _try_format_int( # incompatible radix and custom digit chars, which we aren't doing # above. return abort[String]( - "unexpected exception formatting value as hexadecimal: " + str(e) + "unexpected exception formatting value as hexadecimal: " + String(e) ) diff --git a/stdlib/src/builtin/int.mojo b/stdlib/src/builtin/int.mojo index f21bb325fa..367a5d507e 100644 --- a/stdlib/src/builtin/int.mojo +++ b/stdlib/src/builtin/int.mojo @@ -204,6 +204,109 @@ trait ImplicitlyIntable(Intable): ... +# ===----------------------------------------------------------------------=== # +# int +# ===----------------------------------------------------------------------=== # + + +# FIXME(25.2): Move `int` deprecation warnings to a compiler error +@deprecated( + "the `int` function is deprecated, use the `Int` constructor instead" +) +@always_inline +fn int[T: Intable](value: T) -> Int: + """Get the Int representation of the value. + + Parameters: + T: The Intable type. + + Args: + value: The object to get the integral representation of. + + Returns: + The integral representation of the value. + """ + return value.__int__() + + +@deprecated( + "the `int` function is deprecated, use the `Int` constructor instead" +) +@always_inline +fn int[T: IntableRaising](value: T) raises -> Int: + """Get the Int representation of the value. + + Parameters: + T: The Intable type. + + Args: + value: The object to get the integral representation of. + + Returns: + The integral representation of the value. + + Raises: + If the type does not have an integral representation. + """ + return value.__int__() + + +@deprecated( + "the `int` function is deprecated, use the `Int` constructor instead" +) +fn int(value: StringSlice, base: Int = 10) raises -> Int: + """Parses and returns the given string as an integer in the given base. + + If base is set to 0, the string is parsed as an Integer literal, with the + following considerations: + - '0b' or '0B' prefix indicates binary (base 2) + - '0o' or '0O' prefix indicates octal (base 8) + - '0x' or '0X' prefix indicates hexadecimal (base 16) + - Without a prefix, it's treated as decimal (base 10) + + Args: + value: A string to be parsed as an integer in the given base. + base: Base used for conversion, value must be between 2 and 36, or 0. + + Returns: + An integer value that represents the string. + + Raises: + If the given string cannot be parsed as an integer value or if an + incorrect base is provided. + + Examples: + >>> int("32") + 32 + >>> int("FF", 16) + 255 + >>> int("0xFF", 0) + 255 + >>> int("0b1010", 0) + 10 + + Notes: + This follows [Python's integer literals]( + https://docs.python.org/3/reference/lexical_analysis.html#integers). + """ + return atol(value, base) + + +@deprecated( + "the `int` function is deprecated, use the `Int` constructor instead" +) +fn int(value: UInt) -> Int: + """Get the Int representation of the value. + + Args: + value: The object to get the integral representation of. + + Returns: + The integral representation of the value. + """ + return value.value + + # ===----------------------------------------------------------------------=== # # Int # ===----------------------------------------------------------------------=== # @@ -532,7 +635,7 @@ struct Int( rhs: The value to divide on. Returns: - `float(self)/float(rhs)` value. + `Float64(self)/Float64(rhs)` value. """ return Float64(self) / Float64(rhs) @@ -1046,7 +1149,7 @@ struct Int( Returns: A string representation. """ - return str(self) + return String(self) fn __hash__(self) -> UInt: """Hash the int using builtin hash. diff --git a/stdlib/src/builtin/int_literal.mojo b/stdlib/src/builtin/int_literal.mojo index f7b72d9ea0..c114104ea6 100644 --- a/stdlib/src/builtin/int_literal.mojo +++ b/stdlib/src/builtin/int_literal.mojo @@ -701,7 +701,7 @@ struct IntLiteral( Returns: The value as a string. """ - return str(Int(self)) + return String(Int(self)) @always_inline fn __ceildiv__(self, denominator: Self) -> Self: diff --git a/stdlib/src/builtin/io.mojo b/stdlib/src/builtin/io.mojo index 465a4cefcf..b4971adf71 100644 --- a/stdlib/src/builtin/io.mojo +++ b/stdlib/src/builtin/io.mojo @@ -68,7 +68,7 @@ struct _fdopen[mode: StringLiteral = "a"]: """Closes the file handle.""" _ = fclose(self.handle) - fn readline(self) -> String: + fn readline(self) raises -> String: """Reads an entire line from stdin or until EOF. Lines are delimited by a newline character. Returns: @@ -95,7 +95,7 @@ struct _fdopen[mode: StringLiteral = "a"]: """ return self.read_until_delimiter("\n") - fn read_until_delimiter(self, delimiter: StringSlice) -> String: + fn read_until_delimiter(self, delimiter: StringSlice) raises -> String: """Reads an entire line from a stream, up to the `delimiter`. Does not include the delimiter in the result. @@ -140,6 +140,13 @@ struct _fdopen[mode: StringLiteral = "a"]: ord(delimiter), self.handle, ) + # Per man getdelim(3), getdelim will return -1 if an error occurs + # (or the user sends EOF without providing any input). We must + # raise an error in this case because otherwise, String() will crash mojo + # if the user sends EOF with no input. + # TODO: check errno to ensure we haven't encountered EINVAL or ENOMEM instead + if bytes_read == -1: + raise Error("EOF") # Copy the buffer (excluding the delimiter itself) into a Mojo String. var s = String(StringRef(buffer, bytes_read - 1)) # Explicitly free the buffer using free() instead of the Mojo allocator. @@ -283,7 +290,7 @@ fn print[ # ===----------------------------------------------------------------------=== # -fn input(prompt: String = "") -> String: +fn input(prompt: String = "") raises -> String: """Reads a line of input from the user. Reads a line from standard input, converts it to a string, and returns that string. diff --git a/stdlib/src/builtin/math.mojo b/stdlib/src/builtin/math.mojo index 843b380e88..28e3c72833 100644 --- a/stdlib/src/builtin/math.mojo +++ b/stdlib/src/builtin/math.mojo @@ -206,6 +206,31 @@ fn max[dtype: DType, //](x: SIMD[dtype, _], y: __type_of(x), /) -> __type_of(x): return __mlir_op.`pop.max`(x.value, y.value) +trait _CopyableGreaterThanComparable(Copyable, GreaterThanComparable): + ... + + +@always_inline +fn max[T: _CopyableGreaterThanComparable](x: T, *ys: T) -> T: + """Gets the maximum value from a sequence of values. + + Parameters: + T: A type that is both copyable and comparable with greater than. + + Args: + x: The first value to compare. + ys: Zero or more additional values to compare. + + Returns: + The maximum value from the input sequence. + """ + var res = x + for y in ys: + if y[] > res: + res = y[] + return res + + # ===----------------------------------------------------------------------=== # # min # ===----------------------------------------------------------------------=== # @@ -271,6 +296,31 @@ fn min[dtype: DType, //](x: SIMD[dtype, _], y: __type_of(x), /) -> __type_of(x): return __mlir_op.`pop.min`(x.value, y.value) +trait _CopyableLessThanComparable(Copyable, LessThanComparable): + ... + + +@always_inline +fn min[T: _CopyableLessThanComparable](x: T, *ys: T) -> T: + """Gets the minimum value from a sequence of values. + + Parameters: + T: A type that is both copyable and comparable with less than. + + Args: + x: The first value to compare. + ys: Zero or more additional values to compare. + + Returns: + The minimum value from the input sequence. + """ + var res = x + for y in ys: + if y[] < res: + res = y[] + return res + + # ===----------------------------------------------------------------------=== # # pow # ===----------------------------------------------------------------------=== # diff --git a/stdlib/src/builtin/object.mojo b/stdlib/src/builtin/object.mojo index a20b4b31c3..94ee27873b 100644 --- a/stdlib/src/builtin/object.mojo +++ b/stdlib/src/builtin/object.mojo @@ -568,18 +568,18 @@ struct _ObjectImpl( writer.write("None") return if self.is_bool(): - writer.write(str(self.get_as_bool())) + writer.write(String(self.get_as_bool())) return if self.is_int(): - writer.write(str(self.get_as_int())) + writer.write(String(self.get_as_int())) return if self.is_float(): - writer.write(str(self.get_as_float())) + writer.write(String(self.get_as_float())) return if self.is_str(): writer.write( "'" - + str( + + String( StringRef( self.get_as_string().data, self.get_as_string().length ) @@ -597,7 +597,7 @@ struct _ObjectImpl( for j in range(self.get_list_length()): if j != 0: writer.write(", ") - writer.write(str(object(self.get_list_element(j)))) + writer.write(String(object(self.get_list_element(j)))) writer.write("]") return @@ -609,9 +609,9 @@ struct _ObjectImpl( writer.write(", ") writer.write( "'" - + str(entry[].key) + + String(entry[].key) + "' = " - + str(object(entry[].value.copy())) + + String(object(entry[].value.copy())) ) print_sep = True writer.write("}") diff --git a/stdlib/src/builtin/repr.mojo b/stdlib/src/builtin/repr.mojo index 5ea538abce..9fd07cdc43 100644 --- a/stdlib/src/builtin/repr.mojo +++ b/stdlib/src/builtin/repr.mojo @@ -50,7 +50,7 @@ trait Representable: This is typically used for debugging, so it is important that the representation is information-rich and unambiguous. Note that when computing the string representation of a collection (`Dict`, `List`, `Set`, etc...), - the `repr` function is called on each element, not the `str()` function. + the `repr` function is called on each element, not the `String()` function. """ fn __repr__(self) -> String: diff --git a/stdlib/src/builtin/simd.mojo b/stdlib/src/builtin/simd.mojo index ec28c1de57..0a9cf32afa 100644 --- a/stdlib/src/builtin/simd.mojo +++ b/stdlib/src/builtin/simd.mojo @@ -57,6 +57,7 @@ from utils import IndexList, StaticTuple from utils._visualizers import lldb_formatter_wrapping_type from utils.numerics import FPUtils from utils.numerics import isnan as _isnan +from utils.numerics import isinf as _isinf from utils.numerics import max_finite as _max_finite from utils.numerics import max_or_inf as _max_or_inf from utils.numerics import min_finite as _min_finite @@ -173,7 +174,7 @@ fn _simd_construction_checks[type: DType, size: Int](): Parameters: type: The data type of SIMD vector elements. - size: The number of elements in the SIMD vector. + size: The number of elements in the SIMD vector. The size must not be greater than 2**15. """ constrained[ type is not DType.invalid, "simd type cannot be DType.invalid" @@ -184,6 +185,16 @@ fn _simd_construction_checks[type: DType, size: Int](): not (type is DType.bfloat16 and has_neon()), "bf16 is not supported for ARM architectures", ]() + # MOCO-1388: Until LLVM's issue #122571 is fixed, LLVM's SelectionDAG has + # a limit of 2^15 for the number of operands of the instruction. + # NOTE: Even after the limit increases in LLVM, compile time might be 3x + # slower than with GCC, therefore until we have a real use case for large + # SIMD, we better to keep limit at 2^15. + # NOTE: Might need to revisit the limit for targets that use GlobalISel + # as it does have smaller limit now. + constrained[ + size <= 2**15, "simd size is too large and must be less than 2^15" + ]() @always_inline("nodebug") @@ -287,15 +298,55 @@ struct SIMD[type: DType, size: Int]( _simd_construction_checks[type, size]() self = _unchecked_zero[type, size]() - # FIXME(MOCO-1291): Can't implement this due to ambiguity. - # @always_inline("nodebug") - # fn __init__(out self, *, other: SIMD[type, size]): - # """Explicitly copy the provided value. + @always_inline("nodebug") + fn __init__[other_type: DType, //](out self, value: SIMD[other_type, size]): + """Initialize from another SIMD of the same size. If the value + passed is a scalar, you can initialize a SIMD vector with more elements. + + Parameters: + other_type: The type of the value that is being cast from. + + Args: + value: The value to cast from. + + Example: - # Args: - # other: The value to copy. - # """ - # self = other + ```mojo + print(UInt64(UInt8(42))) # 42 + print(SIMD[DType.uint64, 4](UInt8(42))) # [42, 42, 42, 42] + ``` + + Casting behavior: + + ```mojo + # Basic casting preserves value within range + Int8(UInt8(127)) == Int8(127) + + # Numbers above signed max wrap to negative using two's complement + Int8(UInt8(128)) == Int8(-128) + Int8(UInt8(129)) == Int8(-127) + Int8(UInt8(256)) == Int8(0) + + # Negative signed cast to unsigned using two's complement + UInt8(Int8(-128)) == UInt8(128) + UInt8(Int8(-127)) == UInt8(129) + UInt8(Int8(-1)) == UInt8(255) + + # Truncate precision after downcast and upcast + Float64(Float32(Float64(123456789.123456789))) == Float64(123456792.0) + + # Rightmost bits of significand become 0's on upcast + Float64(Float32(0.3)) == Float64(0.30000001192092896) + + # Numbers equal after truncation of float literal and cast truncation + Float32(Float64(123456789.123456789)) == Float32(123456789.123456789) + + # Float to int/uint floors + Int64(Float64(42.2)) == Int64(42) + ``` + . + """ + self = value.cast[type]() @always_inline fn copy(self) -> Self: @@ -337,7 +388,6 @@ struct SIMD[type: DType, size: Int]( @implicit fn __init__(out self, value: __mlir_type.index): _simd_construction_checks[type, size]() - var t0 = __mlir_op.`pop.cast_from_builtin`[ _type = __mlir_type.`!pop.scalar` ](value) @@ -348,6 +398,35 @@ struct SIMD[type: DType, size: Int]( _type = __mlir_type[`!pop.simd<`, size.value, `, `, type.value, `>`] ](casted) + @always_inline + fn __init__[T: Floatable](out self: Scalar[DType.float64], value: T): + """Initialize a Float64 from a type conforming to Floatable. + + Parameters: + T: The Floatable type. + + Args: + value: The object to get the float point representation of. + """ + self = value.__float__() + + @always_inline + fn __init__[ + T: FloatableRaising + ](out self: Scalar[DType.float64], value: T) raises: + """Initialize a Float64 from a type conforming to FloatableRaising. + + Parameters: + T: The FloatableRaising type. + + Args: + value: The object to get the float point representation of. + + Raises: + If the type does not have a float point representation. + """ + self = value.__float__() + @always_inline("nodebug") @implicit fn __init__(out self, value: IntLiteral): @@ -620,19 +699,23 @@ struct SIMD[type: DType, size: Int]( ) ) - fn __init__[ + @staticmethod + fn from_bits[ int_type: DType, // - ](mut self, *, from_bits: SIMD[int_type, size]): + ](value: SIMD[int_type, size]) -> SIMD[type, size]: """Initializes the SIMD vector from the bits of an integral SIMD vector. Parameters: int_type: The integral type of the input SIMD vector. Args: - from_bits: The SIMD vector to copy the bits from. + value: The SIMD vector to copy the bits from. + + Returns: + The bitcast SIMD vector. """ constrained[int_type.is_integral(), "the SIMD type must be integral"]() - self = bitcast[type, size](from_bits) + return bitcast[type, size](value) # ===-------------------------------------------------------------------===# # Operator dunders @@ -1637,7 +1720,7 @@ struct SIMD[type: DType, size: Int]( # FIXME: This should be an alias var mask = FPUtils[type].exponent_mantissa_mask() - return Self(from_bits=self.to_bits() & mask) + return Self.from_bits(self.to_bits() & mask) else: return (self < 0).select(-self, self) @@ -1719,6 +1802,36 @@ struct SIMD[type: DType, size: Int]( Returns: A new SIMD vector whose elements have been casted to the target element type. + + Casting behavior: + + ```mojo + # Basic casting preserves value within range + Int8(UInt8(127)) == Int8(127) + + # Numbers above signed max wrap to negative using two's complement + Int8(UInt8(128)) == Int8(-128) + Int8(UInt8(129)) == Int8(-127) + Int8(UInt8(256)) == Int8(0) + + # Negative signed cast to unsigned using two's complement + UInt8(Int8(-128)) == UInt8(128) + UInt8(Int8(-127)) == UInt8(129) + UInt8(Int8(-1)) == UInt8(255) + + # Truncate precision after downcast and upcast + Float64(Float32(Float64(123456789.123456789))) == Float64(123456792.0) + + # Rightmost bits of significand become 0's on upcast + Float64(Float32(0.3)) == Float64(0.30000001192092896) + + # Numbers equal after truncation of float literal and cast truncation + Float32(Float64(123456789.123456789)) == Float32(123456789.123456789) + + # Float to int/uint floors + Int64(Float64(42.2)) == Int64(42) + ``` + . """ @parameter @@ -1757,6 +1870,17 @@ struct SIMD[type: DType, size: Int]( # use the optimizations defined above. return self.cast[DType.float32]().cast[target]() + @parameter + if target in (DType.float8e4m3, DType.float8e5m2): + # TODO(KERN-1488): use gpu (H100) instruction to convert from fp16 to fp8 + return rebind[SIMD[target, size]]( + _convert_f32_to_float8[size=size, target=target]( + rebind[SIMD[DType.float32, size]]( + self.cast[DType.float32]() + ) + ) + ) + @parameter if type in (DType.float8e4m3, DType.float8e5m2): constrained[ @@ -3210,6 +3334,180 @@ fn _convert_float8_to_f16[ ]() +@always_inline +fn _convert_f32_to_float8[ + type: DType, + target: DType, + size: Int, +](val: SIMD[type, size],) -> SIMD[target, size]: + @parameter + if is_nvidia_gpu() and _is_sm_9x(): + alias asm_prefix = "cvt.rn.satfinite.e4m3x2.f32" if target is DType.float8e4m3 else "cvt.rn.satfinite.e5m2x2.f32" + + @parameter + if size > 1: + var res = SIMD[target, size]() + + @parameter + for i in range(0, size, 2): + var f8x2_f32x2 = inlined_assembly[ + asm_prefix + " $0, $1, $2;", + Scalar[DType.uint16], + constraints="=h,f,f", + has_side_effect=False, + ](val[i + 1], val[i]) + var ui8x2 = bitcast[target, 2](f8x2_f32x2) + res = res.insert[offset=i](ui8x2) + return res + else: + var f8x2_f32x2 = inlined_assembly[ + asm_prefix + " $0, $1, $2;", + Scalar[DType.uint16], + constraints="=h,f,f", + has_side_effect=False, + ](Float32(0.0), val[0]) + var ui8x2 = bitcast[target, 2](f8x2_f32x2) + return ui8x2[0] + else: + + @always_inline + @parameter + fn wrapper_fn[ + input_type: DType, result_type: DType + ](val: Scalar[input_type]) capturing -> Scalar[result_type]: + return rebind[Scalar[result_type]]( + _convert_f32_to_float8_scaler[type, result_type]( + rebind[Scalar[type]](val) + ) + ) + + return _simd_apply[wrapper_fn, target, size](val) + + +@always_inline +fn _convert_f32_to_float8_scaler[ + type: DType, + target: DType, +](x: Scalar[type]) -> Scalar[target]: + # software implementation rounds toward nearest even + + alias IS_E4M3 = target is DType.float8e4m3 + alias FP8_NUM_MANTISSA_BITS = FPUtils[target].mantissa_width() + alias FP8_NUM_EXPONENT_BITS = FPUtils[target].exponent_width() + alias FP32_NUM_BITS = bitwidthof[type]() + alias FP8_EXPONENT_MASK: UInt8 = (1 << FP8_NUM_EXPONENT_BITS) - 1 + alias FP8_MANTISSA_MASK: UInt8 = (1 << FP8_NUM_MANTISSA_BITS) - 1 + alias FP8_MAX_EXPONENT = FPUtils[target].exponent_bias() + var FP8_MIN_EXPONENT = -6 if IS_E4M3 else -14 + alias FP8_EXPONENT_BIAS = FPUtils[target].exponent_bias() + alias FP32_EXPONENT_BIAS = FPUtils[type].exponent_bias() + alias FP32_NUM_MANTISSA_BITS = FPUtils[type].mantissa_width() + alias FP8_MAX_FLT: UInt8 = 0x7E if IS_E4M3 else 0x7B + + # Extract the bits in the FP32 type + var sign: UInt8 = 0x80 if FPUtils[type].get_sign(x) else 0x00 + var exp = Int32(FPUtils[type].get_exponent_biased(x)) - FP32_EXPONENT_BIAS + var mantissa = Int32(FPUtils[type].get_mantissa(x)) + var u: UInt8 = 0 + + var kF8_NaN: UInt8 = 0x7F + + # NaN => NaN + if _isnan(x): + return bitcast[target](kF8_NaN) + + # Inf => MAX_FLT (satfinite) + if _isinf(x): + return bitcast[target](sign | FP8_MAX_FLT) + + # Special handling + if exp == -128: + # int8 range is from -128 to 127 + # So 255(inf) - 127(bias) = 128 - will show up as -128 + + # satfinite + return bitcast[target](sign | FP8_MAX_FLT) + + var sticky_bit: Int32 = 0 + + var skip_sign = False + var may_be_nan = False + + if exp >= FP8_MIN_EXPONENT and exp <= FP8_MAX_EXPONENT: + # normal fp32 to normal fp8 + exp += FP8_EXPONENT_BIAS + u = ( + ( + (exp).cast[DType.uint32]() + & FP8_EXPONENT_MASK.cast[DType.uint32]() + ) + << FP8_NUM_MANTISSA_BITS + ).cast[DType.uint8]() + u = ( + u + | ( + mantissa >> (FP32_NUM_MANTISSA_BITS - FP8_NUM_MANTISSA_BITS) + ).cast[DType.uint8]() + ) + elif exp < FP8_MIN_EXPONENT: + # normal single-precision to subnormal float8-precision representation + var rshift: Int32 = FP8_MIN_EXPONENT - exp + if rshift < FP32_NUM_BITS: + mantissa |= 1 << FP32_NUM_MANTISSA_BITS + sticky_bit = ((mantissa & ((1 << rshift) - 1)) != 0).cast[ + DType.int32 + ]() + mantissa = mantissa >> rshift + u = ( + mantissa >> (FP32_NUM_MANTISSA_BITS - FP8_NUM_MANTISSA_BITS) + ).cast[DType.uint8]() & FP8_MANTISSA_MASK + else: + mantissa = 0 + u = 0 + # Exponent > FP8_MAX_EXPONENT - this is a special case done to match HW + # 0x4380_0000 to 0x43e0_0000 - maps from 256 to 448, and does not saturate / inf. + else: + if exp == (FP8_MAX_EXPONENT + 1): + var mantissa_tmp: UInt8 = ( + mantissa >> (FP32_NUM_MANTISSA_BITS - FP8_NUM_MANTISSA_BITS) + ).cast[DType.uint8]() + if mantissa_tmp < FP8_MANTISSA_MASK: + exp = exp + FP8_EXPONENT_BIAS + u = ((exp).cast[DType.uint32]() << FP8_NUM_MANTISSA_BITS).cast[ + DType.uint8 + ]() | mantissa_tmp + may_be_nan = mantissa_tmp == (FP8_MANTISSA_MASK - 1) + else: + # satfinite + return bitcast[target](sign | FP8_MAX_FLT) + else: + # satfinite + return bitcast[target](sign | FP8_MAX_FLT) + + # round to nearest even + var NUM_BITS_SHIFT: Int32 = FP32_NUM_MANTISSA_BITS - ( + FP8_NUM_MANTISSA_BITS + 1 + ) + var round_bit: Int32 = ((mantissa >> NUM_BITS_SHIFT) & 1) + sticky_bit |= ((mantissa & ((1 << NUM_BITS_SHIFT) - 1)) != 0).cast[ + DType.int32 + ]() + + if (round_bit and sticky_bit) or (round_bit and (u & 1)): + u = (u + 1).cast[DType.uint8]() + if may_be_nan: + skip_sign = True + + if u > FP8_MAX_FLT: + # satfinite + u = sign | FP8_MAX_FLT + + if not skip_sign: + u |= sign + + return bitcast[target](u) + + # ===----------------------------------------------------------------------=== # # bfloat16 # ===----------------------------------------------------------------------=== # @@ -3444,7 +3742,7 @@ fn _floor(x: SIMD) -> __type_of(x): bits & ~((1 << (shift_factor - e)) - 1), bits, ) - return __type_of(x)(from_bits=bits) + return __type_of(x).from_bits(bits) fn _write_scalar[ diff --git a/stdlib/src/builtin/str.mojo b/stdlib/src/builtin/str.mojo index 93f1482cf2..63ca502625 100644 --- a/stdlib/src/builtin/str.mojo +++ b/stdlib/src/builtin/str.mojo @@ -28,7 +28,7 @@ trait Stringable: Any type that conforms to `Stringable` or [`StringableRaising`](/mojo/stdlib/builtin/str/StringableRaising) works with the built-in [`print()`](/mojo/stdlib/builtin/io/print) and - [`str()`](/mojo/stdlib/builtin/str/str) functions. + [`String()`](/mojo/stdlib/builtin/str/str) functions. The `Stringable` trait requires the type to define the `__str__()` method. For example: @@ -42,12 +42,12 @@ trait Stringable: return self.s ``` - Now you can pass an instance of `Foo` to the `str()` function to get back a + Now you can pass an instance of `Foo` to the `String()` function to get back a `String`: ```mojo var foo = Foo("test") - print(str(foo) == "test") + print(String(foo) == "test") ``` ```plaintext @@ -83,7 +83,7 @@ trait StringableRaising: [`Stringable`](/mojo/stdlib/builtin/str/Stringable) or `StringableRaising` works with the built-in [`print()`](/mojo/stdlib/builtin/io/print) and - [`str()`](/mojo/stdlib/builtin/str/str) functions. + [`String()`](/mojo/stdlib/builtin/str/str) functions. The `StringableRaising` trait requires the type to define the `__str__()` method, which can raise an error. For example: @@ -99,13 +99,13 @@ trait StringableRaising: return self.s ``` - Now you can pass an instance of `Foo` to the `str()` function to get back a + Now you can pass an instance of `Foo` to the `String()` function to get back a `String`: ```mojo fn main() raises: var foo = Foo("test") - print(str(foo) == "test") + print(String(foo) == "test") ``` ```plaintext @@ -130,6 +130,10 @@ trait StringableRaising: # ===----------------------------------------------------------------------=== # +# FIXME(25.2): Move `str` deprecation warnings to a compiler error +@deprecated( + "the `str` function is deprecated, use the `String` constructor instead" +) @no_inline fn str[T: Stringable](value: T) -> String: """Get the string representation of a value. @@ -146,19 +150,10 @@ fn str[T: Stringable](value: T) -> String: return value.__str__() -@no_inline -fn str(value: None) -> String: - """Get the string representation of the `None` type. - - Args: - value: The object to get the string representation of. - - Returns: - The string representation of the object. - """ - return "None" - - +# FIXME(25.2): Move `str` deprecation warnings to a compiler error +@deprecated( + "the `str` function is deprecated, use the `String` constructor instead" +) @no_inline fn str[T: StringableRaising](value: T) raises -> String: """Get the string representation of a value. diff --git a/stdlib/src/builtin/string_literal.mojo b/stdlib/src/builtin/string_literal.mojo index 72f1207149..65bbdff186 100644 --- a/stdlib/src/builtin/string_literal.mojo +++ b/stdlib/src/builtin/string_literal.mojo @@ -135,7 +135,7 @@ struct StringLiteral( Returns: The string value as a StringLiteral. """ - return Self._from_string[str(value)]() + return Self._from_string[String(value)]() # ===-------------------------------------------------------------------===# # Operator dunders @@ -373,7 +373,7 @@ struct StringLiteral( Returns: A float value that represents the string, or otherwise raises. """ - return float(self.as_string_slice()) + return Float64(self.as_string_slice()) @no_inline fn __str__(self) -> String: @@ -470,7 +470,7 @@ struct StringLiteral( Returns: A new string containing the character at the specified position. """ - return str(self)[idx] + return String(self)[idx] # ===-------------------------------------------------------------------===# # Methods @@ -648,7 +648,7 @@ struct StringLiteral( Returns: The joined string. """ - return str(self).join(elems) + return String(self).join(elems) fn join(self, *elems: Int) -> String: """Joins the elements from the tuple using the current string literal as a @@ -662,9 +662,9 @@ struct StringLiteral( """ if len(elems) == 0: return "" - var curr = str(elems[0]) + var curr = String(elems[0]) for i in range(1, len(elems)): - curr += self + str(elems[i]) + curr += self + String(elems[i]) return curr fn join[*Types: Stringable](self, *elems: *Types) -> String: @@ -689,7 +689,7 @@ struct StringLiteral( is_first = False else: result += self - result += str(a) + result += String(a) elems.each[add_elt]() return result @@ -717,7 +717,7 @@ struct StringLiteral( ``` . """ - return str(self).split(sep, maxsplit) + return String(self).split(sep, maxsplit) fn split(self, sep: NoneType = None, maxsplit: Int = -1) -> List[String]: """Split the string literal by every whitespace separator. @@ -745,7 +745,7 @@ struct StringLiteral( ``` . """ - return str(self).split(sep, maxsplit) + return String(self).split(sep, maxsplit) fn splitlines(self, keepends: Bool = False) -> List[String]: """Split the string literal at line boundaries. This corresponds to Python's @@ -774,7 +774,7 @@ struct StringLiteral( Returns: The number of occurrences of `substr`. """ - return str(self).count(substr) + return String(self).count(substr) fn lower(self) -> String: """Returns a copy of the string literal with all cased characters @@ -784,7 +784,7 @@ struct StringLiteral( A new string where cased letters have been converted to lowercase. """ - return str(self).lower() + return String(self).lower() fn upper(self) -> String: """Returns a copy of the string literal with all cased characters @@ -794,7 +794,7 @@ struct StringLiteral( A new string where cased letters have been converted to uppercase. """ - return str(self).upper() + return String(self).upper() fn rjust(self, width: Int, fillchar: StringLiteral = " ") -> String: """Returns the string right justified in a string literal of specified width. @@ -806,7 +806,7 @@ struct StringLiteral( Returns: Returns right justified string, or self if width is not bigger than self length. """ - return str(self).rjust(width, fillchar) + return String(self).rjust(width, fillchar) fn ljust(self, width: Int, fillchar: StringLiteral = " ") -> String: """Returns the string left justified in a string literal of specified width. @@ -818,7 +818,7 @@ struct StringLiteral( Returns: Returns left justified string, or self if width is not bigger than self length. """ - return str(self).ljust(width, fillchar) + return String(self).ljust(width, fillchar) fn center(self, width: Int, fillchar: StringLiteral = " ") -> String: """Returns the string center justified in a string literal of specified width. @@ -830,7 +830,7 @@ struct StringLiteral( Returns: Returns center justified string, or self if width is not bigger than self length. """ - return str(self).center(width, fillchar) + return String(self).center(width, fillchar) fn startswith( self, prefix: StringSlice, start: Int = 0, end: Int = -1 @@ -872,7 +872,7 @@ struct StringLiteral( Returns: True if all characters are digits else False. """ - return str(self).isdigit() + return String(self).isdigit() fn isupper(self) -> Bool: """Returns True if all cased characters in the string literal are @@ -884,7 +884,7 @@ struct StringLiteral( True if all cased characters in the string literal are uppercase and there is at least one cased character, False otherwise. """ - return str(self).isupper() + return String(self).isupper() fn islower(self) -> Bool: """Returns True if all cased characters in the string literal @@ -896,7 +896,7 @@ struct StringLiteral( True if all cased characters in the string literal are lowercase and there is at least one cased character, False otherwise. """ - return str(self).islower() + return String(self).islower() fn strip(self) -> String: """Return a copy of the string literal with leading and trailing @@ -930,7 +930,7 @@ struct StringLiteral( Returns: A string with no trailing characters. """ - return String(str(self).rstrip(chars)) + return String(String(self).rstrip(chars)) fn rstrip(self) -> String: """Return a copy of the string with trailing whitespaces removed. This @@ -961,4 +961,4 @@ struct StringLiteral( Returns: A copy of the string with no leading whitespaces. """ - return String(str(self).lstrip()) + return String(String(self).lstrip()) diff --git a/stdlib/src/builtin/tuple.mojo b/stdlib/src/builtin/tuple.mojo index 523e322ebc..57a7950944 100644 --- a/stdlib/src/builtin/tuple.mojo +++ b/stdlib/src/builtin/tuple.mojo @@ -186,21 +186,6 @@ struct Tuple[*element_types: CollectionElement](Sized, CollectionElement): # Use an immortal mut reference, which converts to self's origin. return UnsafePointer(elt_kgen_ptr)[] - # TODO(#38268): Remove this method when references and parameter expressions - # cooperate better. We can't handle the use in test_simd without this. - @always_inline("nodebug") - fn get[i: Int, T: CollectionElement](ref self) -> ref [self] T: - """Get a tuple element and rebind to the specified type. - - Parameters: - i: The element index. - T: The element type. - - Returns: - The tuple element at the requested index. - """ - return rebind[T](self[i]) - @always_inline("nodebug") fn __contains__[ T: EqualityComparableCollectionElement @@ -230,7 +215,7 @@ struct Tuple[*element_types: CollectionElement](Sized, CollectionElement): @parameter if _type_is_eq[element_types[i], T](): - if self.get[i, T]() == value: + if rebind[T](self[i]) == value: return True return False diff --git a/stdlib/src/builtin/uint.mojo b/stdlib/src/builtin/uint.mojo index 7067e94d68..afbc0b47fc 100644 --- a/stdlib/src/builtin/uint.mojo +++ b/stdlib/src/builtin/uint.mojo @@ -121,7 +121,7 @@ struct UInt(Indexer, _HashableWithHasher): ```mojo %# from testing import assert_equal x = UInt(50) - assert_equal(str(x), "50") + assert_equal(String(x), "50") ``` Returns: @@ -164,7 +164,7 @@ struct UInt(Indexer, _HashableWithHasher): Returns: The string representation of this UInt. """ - return String.write("UInt(", str(self), ")") + return String("UInt(", String(self), ")") fn __hash__(self) -> UInt: """Hash the UInt using builtin hash. @@ -263,7 +263,7 @@ struct UInt(Indexer, _HashableWithHasher): rhs: The value to divide on. Returns: - `float(self)/float(rhs)` value. + `Float64(self)/Float64(rhs)` value. """ return Float64(self) / Float64(rhs) diff --git a/stdlib/src/collections/__init__.mojo b/stdlib/src/collections/__init__.mojo index 97f58c9c88..123ed4db6b 100644 --- a/stdlib/src/collections/__init__.mojo +++ b/stdlib/src/collections/__init__.mojo @@ -21,3 +21,4 @@ from .list import List from .optional import Optional, OptionalReg from .set import Set from .vector import InlinedFixedVector +from .linked_list import LinkedList diff --git a/stdlib/src/collections/counter.mojo b/stdlib/src/collections/counter.mojo index abe33c2fb8..fc2e4fea03 100644 --- a/stdlib/src/collections/counter.mojo +++ b/stdlib/src/collections/counter.mojo @@ -160,7 +160,7 @@ struct Counter[V: KeyElement](Sized, CollectionElement, Boolable): Returns: `False` if the Counter is empty, `True` otherwise. """ - return bool(len(self)) + return Bool(len(self)) # ===------------------------------------------------------------------=== # # Comparison operators diff --git a/stdlib/src/collections/deque.mojo b/stdlib/src/collections/deque.mojo index f55c345f79..f563976b2b 100644 --- a/stdlib/src/collections/deque.mojo +++ b/stdlib/src/collections/deque.mojo @@ -444,7 +444,7 @@ struct Deque[ElementType: CollectionElement]( print(my_deque.__str__()) ``` - When the compiler supports conditional methods, then a simple `str(my_deque)` will + When the compiler supports conditional methods, then a simple `String(my_deque)` will be enough. The elements' type must implement the `__repr__()` method for this to work. @@ -1016,14 +1016,14 @@ struct _DequeIter[ fn __iter__(self) -> Self: return self - fn __next__(mut self) -> Pointer[ElementType, deque_lifetime]: + fn __next__(mut self, out p: Pointer[ElementType, deque_lifetime]): @parameter if forward: + p = Pointer.address_of(self.src[][self.index]) self.index += 1 - return Pointer.address_of(self.src[][self.index - 1]) else: self.index -= 1 - return Pointer.address_of(self.src[][self.index]) + p = Pointer.address_of(self.src[][self.index]) fn __len__(self) -> Int: @parameter diff --git a/stdlib/src/collections/dict.mojo b/stdlib/src/collections/dict.mojo index 31ea5bc0e4..c6f585bae6 100644 --- a/stdlib/src/collections/dict.mojo +++ b/stdlib/src/collections/dict.mojo @@ -22,6 +22,11 @@ Its implementation closely mirrors Python's `dict` implementation: - Insertion order is implicitly preserved. Iteration over keys, values, and items have a deterministic order based on insertion. +- For more information on the Mojo `Dict` type, see the + [Mojo `Dict` manual](/mojo/manual/types/#dict). To learn more about using + Python dictionaries from Mojo, see + [Python types in Mojo](/mojo/manual/python/types/#python-types-in-mojo). + Key elements must implement the `KeyElement` trait, which encompasses Movable, Hashable, and EqualityComparable. It also includes CollectionElement and Copyable until we push references through the standard library types. @@ -380,6 +385,11 @@ struct Dict[K: KeyElement, V: CollectionElement]( K: The type of the dictionary key. Must be Hashable and EqualityComparable so we can find the key in the map. V: The value type of the dictionary. Currently must be CollectionElement. + + For more information on the Mojo `Dict` type, see the + [Mojo `Dict` manual](/mojo/manual/types/#dict). To learn more about using + Python dictionaries from Mojo, see + [Python types in Mojo](/mojo/manual/python/types/#python-types-in-mojo). """ # Implementation: @@ -702,7 +712,7 @@ struct Dict[K: KeyElement, V: CollectionElement]( # prints "{1: 1.1, 2: 2.2}" ``` - When the compiler supports conditional methods, then a simple `str(my_dict)` will + When the compiler supports conditional methods, then a simple `String(my_dict)` will be enough. Note that both they keys and values' types must implement the `__repr__()` method @@ -720,7 +730,7 @@ struct Dict[K: KeyElement, V: CollectionElement]( var minimum_capacity = self._minimum_size_of_string_representation() var string_buffer = List[UInt8](capacity=minimum_capacity) string_buffer.append(0) # Null terminator - var result = String(string_buffer^) + var result = String(buffer=string_buffer^) result += "{" var i = 0 @@ -738,11 +748,11 @@ struct Dict[K: KeyElement, V: CollectionElement]( fn _minimum_size_of_string_representation(self) -> Int: # we do a rough estimation of the minimum number of chars that we'll see - # in the string representation, we assume that str(key) and str(value) + # in the string representation, we assume that String(key) and String(value) # will be both at least one char. return ( 2 # '{' and '}' - + len(self) * 6 # str(key), str(value) ": " and ", " + + len(self) * 6 # String(key), String(value) ": " and ", " - 2 # remove the last ", " ) diff --git a/stdlib/src/collections/inline_list.mojo b/stdlib/src/collections/inline_list.mojo index 2d7b16d428..0ff105a6c1 100644 --- a/stdlib/src/collections/inline_list.mojo +++ b/stdlib/src/collections/inline_list.mojo @@ -53,16 +53,14 @@ struct _InlineListIter[ fn __iter__(self) -> Self: return self - fn __next__( - mut self, - ) -> Pointer[T, __origin_of(self.src[][0])]: + fn __next__(mut self, out p: Pointer[T, __origin_of(self.src[][0])]): @parameter if forward: + p = Pointer.address_of(self.src[][self.index]) self.index += 1 - return Pointer.address_of(self.src[][self.index - 1]) else: self.index -= 1 - return Pointer.address_of(self.src[][self.index]) + p = Pointer.address_of(self.src[][self.index]) @always_inline fn __has_next__(self) -> Bool: diff --git a/stdlib/src/collections/linked_list.mojo b/stdlib/src/collections/linked_list.mojo new file mode 100644 index 0000000000..515b6404a0 --- /dev/null +++ b/stdlib/src/collections/linked_list.mojo @@ -0,0 +1,343 @@ +# ===----------------------------------------------------------------------=== # +# Copyright (c) 2024, Modular Inc. All rights reserved. +# +# Licensed under the Apache License v2.0 with LLVM Exceptions: +# https://llvm.org/LICENSE.txt +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ===----------------------------------------------------------------------=== # + +from memory import UnsafePointer +from collections import Optional +from collections._index_normalization import normalize_index + + +trait WritableCollectionElement(CollectionElement, Writable): + """A trait that combines CollectionElement and Writable traits. + + This trait requires types to implement both CollectionElement and Writable + interfaces, allowing them to be used in collections and written to output. + """ + + pass + + +@value +struct Node[ElementType: WritableCollectionElement]: + """A node in a linked list data structure. + + Parameters: + ElementType: The type of element stored in the node. + """ + + var value: ElementType + """The value stored in this node.""" + var prev: UnsafePointer[Node[ElementType]] + """The previous node in the list.""" + var next: UnsafePointer[Node[ElementType]] + """The next node in the list.""" + + fn __init__( + out self, + owned value: ElementType, + prev: Optional[UnsafePointer[Node[ElementType]]], + next: Optional[UnsafePointer[Node[ElementType]]], + ): + """Initialize a new Node with the given value and optional prev/next + pointers. + + Args: + value: The value to store in this node. + prev: Optional pointer to the previous node. + next: Optional pointer to the next node. + """ + self.value = value^ + self.prev = prev.value() if prev else __type_of(self.prev)() + self.next = next.value() if next else __type_of(self.next)() + + fn __str__(self) -> String: + """Convert this node's value to a string representation. + + Returns: + String representation of the node's value. + """ + return String.write(self) + + @no_inline + fn write_to[W: Writer](self, mut writer: W): + """Write this node's value to the given writer. + + Parameters: + W: The type of writer to write the value to. + + Args: + writer: The writer to write the value to. + """ + writer.write(self.value) + + +struct LinkedList[ElementType: WritableCollectionElement]: + """A doubly-linked list implementation. + + A doubly-linked list is a data structure where each element points to both + the next and previous elements, allowing for efficient insertion and deletion + at any position. + + Parameters: + ElementType: The type of elements stored in the list. Must implement + WritableCollectionElement. + """ + + var _head: UnsafePointer[Node[ElementType]] + """The first node in the list.""" + var _tail: UnsafePointer[Node[ElementType]] + """The last node in the list.""" + var _size: Int + """The number of elements in the list.""" + + fn __init__(out self): + """Initialize an empty linked list.""" + self._head = __type_of(self._head)() + self._tail = __type_of(self._tail)() + self._size = 0 + + fn __init__(mut self, owned *elements: ElementType): + """Initialize a linked list with the given elements. + + Args: + elements: Variable number of elements to initialize the list with. + """ + self = Self(elements=elements^) + + fn __init__(out self, *, owned elements: VariadicListMem[ElementType, _]): + """Initialize a linked list with the given elements. + + Args: + elements: Variable number of elements to initialize the list with. + """ + self = Self() + + for elem in elements: + self.append(elem[]) + + # Do not destroy the elements when their backing storage goes away. + __mlir_op.`lit.ownership.mark_destroyed`( + __get_mvalue_as_litref(elements) + ) + + fn __copyinit__(mut self, read other: Self): + """Initialize this list as a copy of another list. + + Args: + other: The list to copy from. + """ + self._head = other._head + self._tail = other._tail + self._size = other._size + + fn __moveinit__(mut self, owned other: Self): + """Initialize this list by moving elements from another list. + + Args: + other: The list to move elements from. + """ + self._head = other._head + self._tail = other._tail + self._size = other._size + other._head = __type_of(other._head)() + other._tail = __type_of(other._tail)() + other._size = 0 + + fn __del__(owned self): + """Clean up the list by freeing all nodes.""" + var curr = self._head + while curr: + var next = curr[].next + curr.destroy_pointee() + curr.free() + curr = next + + fn append(mut self, owned value: ElementType): + """Add an element to the end of the list. + + Args: + value: The value to append. + """ + var node = Node[ElementType](value^, self._tail, None) + var addr = UnsafePointer[__type_of(node)].alloc(1) + addr.init_pointee_move(node) + if self: + self._tail[].next = addr + else: + self._head = addr + self._tail = addr + self._size += 1 + + fn prepend(mut self, owned value: ElementType): + """Add an element to the beginning of the list. + + Args: + value: The value to prepend. + """ + var node = Node[ElementType](value^, None, self._head) + var addr = UnsafePointer[__type_of(node)].alloc(1) + addr.init_pointee_move(node) + if self: + self._head[].prev = addr + else: + self._tail = addr + self._head = addr + self._size += 1 + + fn reverse(mut self): + """Reverse the order of elements in the list.""" + var prev = __type_of(self._head)() + var curr = self._head + while curr: + var next = curr[].next + curr[].next = prev + prev = curr + curr = next + self._tail = self._head + self._head = prev + + fn pop(mut self) -> ElementType: + """Remove and return the first element of the list. + + Returns: + The first element in the list. + """ + var elem = self._tail + var value = elem[].value + self._tail = elem[].prev + self._size -= 1 + if self._size == 0: + self._head = __type_of(self._head)() + return value^ + + fn copy(self) -> Self: + """Create a deep copy of the list. + + Returns: + A new list containing copies of all elements. + """ + var new = Self() + var curr = self._head + while curr: + new.append(curr[].value) + curr = curr[].next + return new^ + + fn _get_node_ptr(ref self, index: Int) -> UnsafePointer[Node[ElementType]]: + """Get a pointer to the node at the specified index. + + This method optimizes traversal by starting from either the head or tail + depending on which is closer to the target index. + + Args: + index: The index of the node to get. + + Returns: + A pointer to the node at the specified index. + """ + var l = len(self) + var i = normalize_index[container_name="LinkedList"](index, self) + debug_assert(0 <= i < l, "index out of bounds") + var mid = l // 2 + if i <= mid: + var curr = self._head + for _ in range(i): + curr = curr[].next + return curr + else: + var curr = self._tail + for _ in range(l - i - 1): + curr = curr[].prev + return curr + + fn __getitem__(ref self, index: Int) -> ref [self] ElementType: + """Get the element at the specified index. + + Args: + index: The index of the element to get. + + Returns: + The element at the specified index. + """ + debug_assert(len(self) > 0, "unable to get item from empty list") + return self._get_node_ptr(index)[].value + + fn __setitem__(mut self, index: Int, owned value: ElementType): + """Set the element at the specified index. + + Args: + index: The index of the element to set. + value: The new value to set. + """ + debug_assert(len(self) > 0, "unable to set item from empty list") + self._get_node_ptr(index)[].value = value^ + + fn __len__(self) -> Int: + """Get the number of elements in the list. + + Returns: + The number of elements in the list. + """ + return self._size + + fn __bool__(self) -> Bool: + """Check if the list is non-empty. + + Returns: + True if the list has elements, False otherwise. + """ + return len(self) != 0 + + fn __str__(self) -> String: + """Convert the list to its string representation. + + Returns: + String representation of the list. + """ + return String.write(self) + + fn __repr__(self) -> String: + """Convert the list to its string representation. + + Returns: + String representation of the list. + """ + var writer = String() + self._write(writer, prefix="LinkedList(", suffix=")") + return writer + + fn write_to[W: Writer](self, mut writer: W): + """Write the list to the given writer. + + Parameters: + W: The type of writer to write the list to. + + Args: + writer: The writer to write the list to. + """ + self._write(writer) + + @no_inline + fn _write[ + W: Writer + ](self, mut writer: W, *, prefix: String = "[", suffix: String = "]"): + if not self: + return writer.write(prefix, suffix) + + var curr = self._head + writer.write(prefix) + for i in range(len(self)): + if i: + writer.write(", ") + writer.write(curr[]) + curr = curr[].next + writer.write(suffix) diff --git a/stdlib/src/collections/list.mojo b/stdlib/src/collections/list.mojo index 10456b1323..aedb0f4612 100644 --- a/stdlib/src/collections/list.mojo +++ b/stdlib/src/collections/list.mojo @@ -60,16 +60,14 @@ struct _ListIter[ fn __iter__(self) -> Self: return self - fn __next__( - mut self, - ) -> Pointer[T, list_origin]: + fn __next__(mut self, out p: Pointer[T, list_origin]): @parameter if forward: + p = Pointer.address_of(self.src[][self.index]) self.index += 1 - return Pointer.address_of(self.src[][self.index - 1]) else: self.index -= 1 - return Pointer.address_of(self.src[][self.index]) + p = Pointer.address_of(self.src[][self.index]) @always_inline fn __has_next__(self) -> Bool: @@ -403,7 +401,7 @@ struct List[T: CollectionElement, hint_trivial_type: Bool = False]( print(my_list.__str__()) ``` - When the compiler supports conditional methods, then a simple `str(my_list)` will + When the compiler supports conditional methods, then a simple `String(my_list)` will be enough. The elements' type must implement the `__repr__()` method for this to work. @@ -505,7 +503,7 @@ struct List[T: CollectionElement, hint_trivial_type: Bool = False]( """ if self.size >= self.capacity: self._realloc(self.capacity * 2 | Int(self.capacity == 0)) - (self.data + self.size).init_pointee_move(value^) + self._unsafe_next_uninit_ptr().init_pointee_move(value^) self.size += 1 fn insert(mut self, i: Int, owned value: T): @@ -611,7 +609,7 @@ struct List[T: CollectionElement, hint_trivial_type: Bool = False]( If there is no capacity left, resizes to `len(self) + value.size`. """ self.reserve(self.size + value.size) - (self.data + self.size).store(value) + self._unsafe_next_uninit_ptr().store(value) self.size += value.size fn extend[ @@ -633,7 +631,7 @@ struct List[T: CollectionElement, hint_trivial_type: Bool = False]( debug_assert(count <= value.size, "count must be <= value.size") self.reserve(self.size + count) var v_ptr = UnsafePointer.address_of(value).bitcast[Scalar[D]]() - memcpy(self.data + self.size, v_ptr, count) + memcpy(self._unsafe_next_uninit_ptr(), v_ptr, count) self.size += count fn extend[ @@ -651,7 +649,7 @@ struct List[T: CollectionElement, hint_trivial_type: Bool = False]( If there is no capacity left, resizes to `len(self) + len(value)`. """ self.reserve(self.size + len(value)) - memcpy(self.data + self.size, value.unsafe_ptr(), len(value)) + memcpy(self._unsafe_next_uninit_ptr(), value.unsafe_ptr(), len(value)) self.size += len(value) fn pop(mut self, i: Int = -1) -> T: @@ -808,6 +806,31 @@ struct List[T: CollectionElement, hint_trivial_type: Bool = False]( return i raise "ValueError: Given element is not in list" + fn _binary_search_index[ + dtype: DType, //, + ](self: List[Scalar[dtype], **_], needle: Scalar[dtype]) -> Optional[UInt]: + """Finds the index of `needle` with binary search. + + This function will return an unspecified index if `self` is not + sorted in ascending order. + + Args: + needle: The value to binary search for. + + Returns: + Returns None if `needle` is not present, or if `self` was not + sorted. + """ + var cursor = UInt(0) + var b = self.data + var length = len(self) + while length > 1: + var half = length >> 1 + length -= half + cursor += Int(b[cursor + half - 1] < needle) * half + + return Optional(cursor) if b[cursor] == needle else None + fn clear(mut self): """Clears the elements in the list.""" for i in range(self.size): @@ -1007,6 +1030,40 @@ struct List[T: CollectionElement, hint_trivial_type: Bool = False]( """ return self.data + @always_inline + fn _unsafe_next_uninit_ptr( + ref self, + ) -> UnsafePointer[ + T, + mut = Origin(__origin_of(self)).is_mutable, + origin = __origin_of(self), + ]: + """Retrieves a pointer to the next uninitialized element position. + + This returns a pointer that points to the element position immediately + after the last initialized element. + + This is equivalent to `list.unsafe_ptr() + len(list)`. + + # Safety + + - This pointer MUST not be used to read or write memory beyond the + allocated capacity of this list. + - This pointer may not be used to initialize non-contiguous elements. + - Ensure that `List.size` is updated to reflect the new number of + initialized elements, otherwise elements may be unexpectedly + overwritten or not destroyed correctly. + """ + debug_assert( + self.capacity > 0 and self.capacity > self.size, + ( + "safety violation: Insufficient capacity to retrieve pointer to" + " next uninitialized element" + ), + ) + + return self.data + self.size + fn _cast_hint_trivial_type[ hint_trivial_type: Bool ](owned self) -> List[T, hint_trivial_type]: diff --git a/stdlib/src/collections/optional.mojo b/stdlib/src/collections/optional.mojo index b96d3d694a..806119a053 100644 --- a/stdlib/src/collections/optional.mojo +++ b/stdlib/src/collections/optional.mojo @@ -22,7 +22,7 @@ var a = Optional(1) var b = Optional[Int](None) if a: print(a.value()) # prints 1 -if b: # bool(b) is False, so no print +if b: # Bool(b) is False, so no print print(b.value()) var c = a.or_else(2) var d = b.or_else(2) @@ -73,7 +73,7 @@ struct Optional[T: CollectionElement]( var b = Optional[Int](None) if a: print(a.value()) # prints 1 - if b: # bool(b) is False, so no print + if b: # Bool(b) is False, so no print print(b.value()) var c = a.or_else(2) var d = b.or_else(2) diff --git a/stdlib/src/collections/string/__init__.mojo b/stdlib/src/collections/string/__init__.mojo index 97f9fdc563..cfa4894938 100644 --- a/stdlib/src/collections/string/__init__.mojo +++ b/stdlib/src/collections/string/__init__.mojo @@ -18,10 +18,6 @@ from .string import ( atof, atol, chr, - isdigit, - islower, - isprintable, - isupper, ord, ) -from .string_slice import StringSlice, StaticString +from .string_slice import StringSlice, StaticString, CharsIter diff --git a/stdlib/src/collections/string/_unicode.mojo b/stdlib/src/collections/string/_unicode.mojo index 980211ae22..f9acb9db7d 100644 --- a/stdlib/src/collections/string/_unicode.mojo +++ b/stdlib/src/collections/string/_unicode.mojo @@ -11,47 +11,98 @@ # limitations under the License. # ===----------------------------------------------------------------------=== # -from bit import count_leading_zeros from memory import UnsafePointer, memcpy +from memory import Span from collections.string._unicode_lookups import * -fn _uppercase_mapping_index(rune: Int) -> Int: +fn _uppercase_mapping_index(rune: Char) -> Int: """Return index for upper case mapping or -1 if no mapping is given.""" return _to_index[has_uppercase_mapping](rune) -fn _uppercase_mapping2_index(rune: Int) -> Int: +fn _uppercase_mapping2_index(rune: Char) -> Int: """Return index for upper case mapping converting the rune to 2 runes, or -1 if no mapping is given. """ return _to_index[has_uppercase_mapping2](rune) -fn _uppercase_mapping3_index(rune: Int) -> Int: +fn _uppercase_mapping3_index(rune: Char) -> Int: """Return index for upper case mapping converting the rune to 3 runes, or -1 if no mapping is given. """ return _to_index[has_uppercase_mapping3](rune) -fn _lowercase_mapping_index(rune: Int) -> Int: +fn _lowercase_mapping_index(rune: Char) -> Int: """Return index for lower case mapping or -1 if no mapping is given.""" return _to_index[has_lowercase_mapping](rune) @always_inline -fn _to_index[lookup: List[UInt32, **_]](rune: Int) -> Int: +fn _to_index[lookup: List[UInt32, **_]](rune: Char) -> Int: """Find index of rune in lookup with binary search. Returns -1 if not found.""" - var cursor = 0 - var x = UInt32(rune) - var b = lookup.data - var length = len(lookup) - while length > 1: - var half = length >> 1 - length -= half - cursor += Int(b.load(cursor + half - 1) < x) * half - return cursor if b.load(cursor) == x else -1 + var result = lookup._binary_search_index(rune.to_u32()) + + if result: + return result.unsafe_value() + else: + return -1 + + +# TODO: +# Refactor this to return a Span[Char, StaticConstantOrigin], so that the +# return `UInt` count and fixed-size `InlineArray` are not necessary. +fn _get_uppercase_mapping( + char: Char, +) -> Optional[Tuple[UInt, InlineArray[Char, 3]]]: + """Returns the 1, 2, or 3 character sequence that is the uppercase form of + `char`. + + Returns None if `char` does not have an uppercase equivalent. + """ + var array = InlineArray[Char, 3](fill=Char(0)) + + var index1 = _uppercase_mapping_index(char) + if index1 != -1: + var rune = uppercase_mapping[index1] + array[0] = Char(unsafe_unchecked_codepoint=rune) + return Tuple(UInt(1), array) + + var index2 = _uppercase_mapping2_index(char) + if index2 != -1: + var runes = uppercase_mapping2[index2] + array[0] = Char(unsafe_unchecked_codepoint=runes[0]) + array[1] = Char(unsafe_unchecked_codepoint=runes[1]) + return Tuple(UInt(2), array) + + var index3 = _uppercase_mapping3_index(char) + if index3 != -1: + var runes = uppercase_mapping3[index3] + array[0] = Char(unsafe_unchecked_codepoint=runes[0]) + array[1] = Char(unsafe_unchecked_codepoint=runes[1]) + array[2] = Char(unsafe_unchecked_codepoint=runes[2]) + return Tuple(UInt(3), array) + + return None + + +fn _get_lowercase_mapping(char: Char) -> Optional[Char]: + var index: Optional[UInt] = has_lowercase_mapping._binary_search_index( + char.to_u32() + ) + + if index: + # SAFETY: We just checked that `result` is present. + var codepoint = lowercase_mapping[index.unsafe_value()] + + # SAFETY: + # We know this is a valid `Char` because the mapping data tables + # contain only valid codepoints. + return Char(unsafe_unchecked_codepoint=codepoint) + else: + return None fn is_uppercase(s: StringSlice) -> Bool: @@ -66,19 +117,18 @@ fn is_uppercase(s: StringSlice) -> Bool: there is at least one cased character, False otherwise. """ var found = False - for c in s: - var rune = ord(c) - var index = _lowercase_mapping_index(rune) + for char in s.chars(): + var index = _lowercase_mapping_index(char) if index != -1: found = True continue - index = _uppercase_mapping_index(rune) + index = _uppercase_mapping_index(char) if index != -1: return False - index = _uppercase_mapping2_index(rune) + index = _uppercase_mapping2_index(char) if index != -1: return False - index = _uppercase_mapping3_index(rune) + index = _uppercase_mapping3_index(char) if index != -1: return False return found @@ -96,71 +146,25 @@ fn is_lowercase(s: StringSlice) -> Bool: there is at least one cased character, False otherwise. """ var found = False - for c in s: - var rune = ord(c) - var index = _uppercase_mapping_index(rune) + for char in s.chars(): + var index = _uppercase_mapping_index(char) if index != -1: found = True continue - index = _uppercase_mapping2_index(rune) + index = _uppercase_mapping2_index(char) if index != -1: found = True continue - index = _uppercase_mapping3_index(rune) + index = _uppercase_mapping3_index(char) if index != -1: found = True continue - index = _lowercase_mapping_index(rune) + index = _lowercase_mapping_index(char) if index != -1: return False return found -fn _ord(_p: UnsafePointer[UInt8]) -> (Int, Int): - """Return the rune and number of bytes to be consumed, for given UTF-8 string pointer - """ - var p = _p - var b1 = p[] - if (b1 >> 7) == 0: # This is 1 byte ASCII char - return Int(b1), 1 - var num_bytes = count_leading_zeros(~b1) - var shift = Int((6 * (num_bytes - 1))) - var b1_mask = 0b11111111 >> (num_bytes + 1) - var result = Int(b1 & b1_mask) << shift - for _ in range(1, num_bytes): - p += 1 - shift -= 6 - result |= Int(p[] & 0b00111111) << shift - return result, Int(num_bytes) - - -fn _write_rune(rune: UInt32, p: UnsafePointer[UInt8]) -> Int: - """Write rune as UTF-8 into provided pointer. Return number of added bytes. - """ - if (rune >> 7) == 0: # This is 1 byte ASCII char - p[0] = rune.cast[DType.uint8]() - return 1 - - @always_inline - fn _utf8_len(val: UInt32) -> Int: - alias sizes = SIMD[DType.uint32, 4]( - 0, 0b1111_111, 0b1111_1111_111, 0b1111_1111_1111_1111 - ) - var values = SIMD[DType.uint32, 4](val) - var mask = values > sizes - return Int(mask.cast[DType.uint8]().reduce_add()) - - var num_bytes = _utf8_len(rune) - var shift = 6 * (num_bytes - 1) - var mask = UInt32(0xFF) >> (num_bytes + 1) - var num_bytes_marker = UInt32(0xFF) << (8 - num_bytes) - p[0] = (((rune >> shift) & mask) | num_bytes_marker).cast[DType.uint8]() - for i in range(1, num_bytes): - shift -= 6 - p[i] = (((rune >> shift) & 0b00111111) | 0b10000000).cast[DType.uint8]() - return num_bytes - - fn to_lowercase(s: StringSlice) -> String: """Returns a new string with all characters converted to uppercase. @@ -171,39 +175,36 @@ fn to_lowercase(s: StringSlice) -> String: A new string where cased letters have been converted to lowercase. """ var input = s.unsafe_ptr() - var capacity = (s.byte_length() >> 1) * 3 + 1 - var output = UnsafePointer[UInt8].alloc(capacity) + var output = List[Byte](capacity=_estimate_needed_size(s.byte_length())) var input_offset = 0 - var output_offset = 0 while input_offset < s.byte_length(): - var rune_and_size = _ord(input + input_offset) - var index = _lowercase_mapping_index(rune_and_size[0]) - if index == -1: + var rune_and_size = Char.unsafe_decode_utf8_char(input + input_offset) + var lowercase_char_opt = _get_lowercase_mapping(rune_and_size[0]) + if lowercase_char_opt is None: memcpy( - output + output_offset, input + input_offset, rune_and_size[1] + output._unsafe_next_uninit_ptr(), + input + input_offset, + rune_and_size[1], ) - output_offset += rune_and_size[1] + output.size += rune_and_size[1] else: - output_offset += _write_rune( - lowercase_mapping[index], output + output_offset + var lower_char: Char = lowercase_char_opt.unsafe_value() + output.size += lower_char.unsafe_write_utf8( + output._unsafe_next_uninit_ptr() ) input_offset += rune_and_size[1] - if output_offset >= ( - capacity - 5 - ): # check if we need to resize the ouput - capacity += ((s.byte_length() - input_offset) >> 1) * 3 + 1 - var new_output = UnsafePointer[UInt8].alloc(capacity) - memcpy(new_output, output, output_offset) - output.free() - output = new_output - - output[output_offset] = 0 - var list = List[UInt8]( - ptr=output, length=(output_offset + 1), capacity=capacity - ) - return String(list) + # Check if we need to reserve additional capacity. + if output.size >= output.capacity - 5: + output.reserve( + output.capacity + + _estimate_needed_size(s.byte_length() - input_offset) + ) + + # Add NUL terminator + output.append(0) + return String(buffer=output^) fn to_uppercase(s: StringSlice) -> String: @@ -216,51 +217,48 @@ fn to_uppercase(s: StringSlice) -> String: A new string where cased letters have been converted to uppercase. """ var input = s.unsafe_ptr() - var capacity = (s.byte_length() >> 1) * 3 + 1 - var output = UnsafePointer[UInt8].alloc(capacity) + var output = List[Byte](capacity=_estimate_needed_size(s.byte_length())) var input_offset = 0 - var output_offset = 0 while input_offset < s.byte_length(): - var rune_and_size = _ord(input + input_offset) - var index = _uppercase_mapping_index(rune_and_size[0]) - var index2 = _uppercase_mapping2_index( - rune_and_size[0] - ) if index == -1 else -1 - var index3 = _uppercase_mapping3_index( - rune_and_size[0] - ) if index == -1 and index2 == -1 else -1 - if index != -1: - output_offset += _write_rune( - uppercase_mapping[index], output + output_offset + var rune_and_size = Char.unsafe_decode_utf8_char(input + input_offset) + + var uppercase_replacement_opt = _get_uppercase_mapping(rune_and_size[0]) + + if uppercase_replacement_opt: + # A given character can be replaced with a sequence of characters + # up to 3 characters in length. A fixed size `Char` array is + # returned, along with a `count` (1, 2, or 3) of how many + # replacement characters are in the uppercase replacement sequence. + count, uppercase_replacement_chars = ( + uppercase_replacement_opt.unsafe_value() ) - elif index2 != -1: - var runes = uppercase_mapping2[index2] - output_offset += _write_rune(runes[0], output + output_offset) - output_offset += _write_rune(runes[1], output + output_offset) - elif index3 != -1: - var runes = uppercase_mapping3[index3] - output_offset += _write_rune(runes[0], output + output_offset) - output_offset += _write_rune(runes[1], output + output_offset) - output_offset += _write_rune(runes[2], output + output_offset) + for char_idx in range(count): + var char: Char = uppercase_replacement_chars[char_idx] + output.size += char.unsafe_write_utf8( + output._unsafe_next_uninit_ptr() + ) else: memcpy( - output + output_offset, input + input_offset, rune_and_size[1] + output._unsafe_next_uninit_ptr(), + input + input_offset, + rune_and_size[1], ) - output_offset += rune_and_size[1] + output.size += rune_and_size[1] input_offset += rune_and_size[1] - if output_offset >= ( - capacity - 5 - ): # check if we need to resize the ouput - capacity += ((s.byte_length() - input_offset) >> 1) * 3 + 1 - var new_output = UnsafePointer[UInt8].alloc(capacity) - memcpy(new_output, output, output_offset) - output.free() - output = new_output - - output[output_offset] = 0 - var list = List[UInt8]( - ptr=output, length=(output_offset + 1), capacity=capacity - ) - return String(list) + # Check if we need to reserve additional capacity. + if output.size >= output.capacity - 5: + output.reserve( + output.capacity + + _estimate_needed_size(s.byte_length() - input_offset) + ) + + # Add NUL terminator + output.append(0) + return String(buffer=output^) + + +@always_inline +fn _estimate_needed_size(byte_len: Int) -> Int: + return 3 * (byte_len >> 1) + 1 diff --git a/stdlib/src/collections/string/format.mojo b/stdlib/src/collections/string/format.mojo index 1cd5cd968e..ad358a028e 100644 --- a/stdlib/src/collections/string/format.mojo +++ b/stdlib/src/collections/string/format.mojo @@ -248,7 +248,7 @@ struct _FormatCurlyEntry(CollectionElement, CollectionElementNew): elif manual_indexing_count and automatic_indexing_count: raise Error("Cannot both use manual and automatic indexing") elif raised_manual_index: - var val = str(raised_manual_index.value()) + var val = String(raised_manual_index.value()) raise Error("Index " + val + " not in *args") elif start: raise Error(l_err) @@ -326,11 +326,11 @@ struct _FormatCurlyEntry(CollectionElement, CollectionElementNew): manual_indexing_count += 1 except e: alias unexp = "Not the expected error from atol" - debug_assert("not convertible to integer" in str(e), unexp) + debug_assert("not convertible to integer" in String(e), unexp) # field is a keyword for **kwargs: # TODO: add support for "My name is {person.name}".format(person=Person(name="Fred")) # TODO: add support for "My name is {person[name]}".format(person={"name": "Fred"}) - var f = str(field) + var f = String(field) self.field = f raised_kwarg_field = f return True @@ -362,16 +362,16 @@ struct _FormatCurlyEntry(CollectionElement, CollectionElementNew): var data: String if empty and type_impls_write_str: - data = str(args[i]) # TODO: use writer and return + data = String(args[i]) # TODO: use writer and return elif empty and type_impls_str: - data = str(args[i]) + data = String(args[i]) elif flag == `s` and type_impls_write_str: if empty: # TODO: use writer and return pass - data = str(args[i]) + data = String(args[i]) elif flag == `s` and type_impls_str: - data = str(args[i]) + data = String(args[i]) elif flag == `r` and type_impls_write_repr: if empty: # TODO: use writer and return @@ -386,8 +386,8 @@ struct _FormatCurlyEntry(CollectionElement, CollectionElementNew): alias argnum = "Argument number: " alias does_not = " does not implement the trait " alias needed = "needed for conversion_flag: " - var flg = String(List[UInt8](flag, 0)) - raise Error(argnum + str(i) + does_not + needed + flg) + var flg = String(buffer=List[UInt8](flag, 0)) + raise Error(String(argnum, i, does_not, needed, flg)) if self.format_spec: self.format_spec.value().format( @@ -528,7 +528,7 @@ struct _FormatSpec: In addition to the above presentation types, integers can be formatted with the floating-point presentation types listed below (except 'n' and None). - When doing so, float() is used to convert the integer to a floating-point + When doing so, Float64() is used to convert the integer to a floating-point number before formatting. The available presentation types for float and Decimal values are: @@ -586,7 +586,7 @@ struct _FormatSpec: large as needed to represent the given value faithfully.\ For Decimal, this is the same as either 'g' or 'G' depending on the value\ of context.capitals for the current decimal context.\ - The overall effect is to match the output of str() as altered by the other\ + The overall effect is to match the output of String() as altered by the other\ format modifiers.| """ @@ -699,7 +699,7 @@ struct _FormatSpec: # TODO: transform to int/float depending on format spec # TODO: send to float/int 's __format__ method # their methods should stringify as hex/bin/oct etc. - res += str(item) + res += String(item) # ===-----------------------------------------------------------------------===# diff --git a/stdlib/src/collections/string/inline_string.mojo b/stdlib/src/collections/string/inline_string.mojo index 6cb7203e6d..8235033158 100644 --- a/stdlib/src/collections/string/inline_string.mojo +++ b/stdlib/src/collections/string/inline_string.mojo @@ -122,7 +122,7 @@ struct InlineString(Sized, Stringable, CollectionElement, CollectionElementNew): except e: abort( "unreachable: InlineString append to FixedString failed: " - + str(e), + + String(e), ) else: # We're currently in the small layout but must change to the @@ -140,7 +140,7 @@ struct InlineString(Sized, Stringable, CollectionElement, CollectionElementNew): # Copy the bytes from the additional string. buffer.extend(str_slice.as_bytes()) buffer.append(0) # Add the NUL byte - self._storage = Self.Layout(String(buffer^)) + self._storage = Self.Layout(String(buffer=buffer^)) fn __add__(self, other: StringSlice) -> Self: """Construct a string by appending another string at the end of this string. @@ -197,7 +197,7 @@ struct InlineString(Sized, Stringable, CollectionElement, CollectionElementNew): The string representation of the type. """ if self._is_small(): - return str(self._storage[_FixedString[Self.SMALL_CAP]]) + return String(self._storage[_FixedString[Self.SMALL_CAP]]) else: return self._storage[String] @@ -303,9 +303,9 @@ struct _FixedString[CAP: Int]( if len(literal) > CAP: raise Error( "String literal (len=" - + str(len(literal)) + + String(len(literal)) + ") is longer than FixedString capacity (" - + str(CAP) + + String(CAP) + ")" ) @@ -385,11 +385,11 @@ struct _FixedString[CAP: Int]( return Optional( Error( "Insufficient capacity to append len=" - + str(len(bytes)) + + String(len(bytes)) + " string to len=" - + str(len(self)) + + String(len(self)) + " FixedString with capacity=" - + str(CAP), + + String(CAP), ) ) diff --git a/stdlib/src/collections/string/string.mojo b/stdlib/src/collections/string/string.mojo index 7f766c5897..ba8fe11d8e 100644 --- a/stdlib/src/collections/string/string.mojo +++ b/stdlib/src/collections/string/string.mojo @@ -13,11 +13,14 @@ """Implements basic object methods for working with strings.""" from collections import KeyElement, List, Optional +from collections.string import CharsIter from collections._index_normalization import normalize_index from hashlib._hasher import _HashableWithHasher, _Hasher +from os import abort from sys import bitwidthof, llvm_intrinsic from sys.ffi import c_char from sys.intrinsics import _type_is_eq +from utils.write import write_buffered from bit import count_leading_zeros from memory import UnsafePointer, memcmp, memcpy, Span @@ -41,10 +44,8 @@ from collections.string._unicode import ( from collections.string.format import _CurlyEntryFormattable, _FormatCurlyEntry from collections.string.string_slice import ( StringSlice, - _shift_unicode_to_utf8, _StringSliceIter, _to_string_list, - _unicode_codepoint_utf8_byte_length, _utf8_byte_type, ) @@ -66,34 +67,7 @@ fn ord(s: StringSlice) -> Int: Returns: An integer representing the code point of the given character. """ - # UTF-8 to Unicode conversion: (represented as UInt32 BE) - # 1: 0aaaaaaa -> 00000000 00000000 00000000 0aaaaaaa a - # 2: 110aaaaa 10bbbbbb -> 00000000 00000000 00000aaa aabbbbbb a << 6 | b - # 3: 1110aaaa 10bbbbbb 10cccccc -> 00000000 00000000 aaaabbbb bbcccccc a << 12 | b << 6 | c - # 4: 11110aaa 10bbbbbb 10cccccc 10dddddd -> 00000000 000aaabb bbbbcccc ccdddddd a << 18 | b << 12 | c << 6 | d - var p = s.unsafe_ptr() - var b1 = p[] - if (b1 >> 7) == 0: # This is 1 byte ASCII char - debug_assert(s.byte_length() == 1, "input string length must be 1") - return Int(b1) - var num_bytes = count_leading_zeros(~b1) - debug_assert( - s.byte_length() == Int(num_bytes), "input string must be one character" - ) - debug_assert( - 1 < Int(num_bytes) < 5, "invalid UTF-8 byte ", b1, " at index 0" - ) - var shift = Int((6 * (num_bytes - 1))) - var b1_mask = 0b11111111 >> (num_bytes + 1) - var result = Int(b1 & b1_mask) << shift - for i in range(1, num_bytes): - p += 1 - debug_assert( - p[] >> 6 == 0b00000010, "invalid UTF-8 byte ", b1, " at index ", i - ) - shift -= 6 - result |= Int(p[] & 0b00111111) << shift - return result + return Int(Char.ord(s)) # ===----------------------------------------------------------------------=== # @@ -122,16 +96,17 @@ fn chr(c: Int) -> String: if c < 0b1000_0000: # 1 byte ASCII char return String(String._buffer_type(c, 0)) - var num_bytes = _unicode_codepoint_utf8_byte_length(c) - var p = UnsafePointer[UInt8].alloc(num_bytes + 1) - _shift_unicode_to_utf8(p, c, num_bytes) - # TODO: decide whether to use replacement char (�) or raise ValueError - # if not _is_valid_utf8(p, num_bytes): - # debug_assert(False, "Invalid Unicode code point") - # p.free() - # return chr(0xFFFD) - p[num_bytes] = 0 - return String(ptr=p, length=num_bytes + 1) + var char_opt = Char.from_u32(c) + if not char_opt: + # TODO: Raise ValueError instead. + return abort[String]( + String("chr(", c, ") is not a valid Unicode codepoint") + ) + + # SAFETY: We just checked that `char` is present. + var char = char_opt.unsafe_value() + + return String(char) # ===----------------------------------------------------------------------=== # @@ -167,7 +142,7 @@ fn _repr_ascii(c: UInt8) -> String: if c == ord_back_slash: return r"\\" - elif isprintable(c): + elif Char(c).is_ascii_printable(): return _chr_ascii(c) elif c == ord_tab: return r"\t" @@ -282,7 +257,7 @@ fn atol(str_slice: StringSlice, base: Int = 10) raises -> Int: real_base = base if real_base <= 10: - ord_num_max = ord(str(real_base - 1)) + ord_num_max = ord(String(real_base - 1)) else: ord_num_max = ord("9") ord_letter_max = ( @@ -316,13 +291,13 @@ fn atol(str_slice: StringSlice, base: Int = 10) raises -> Int: elif ord_letter_min[1] <= ord_current <= ord_letter_max[1]: result += ord_current - ord_letter_min[1] + 10 found_valid_chars_after_start = True - elif _isspace(ord_current): + elif Char(UInt8(ord_current)).is_posix_space(): has_space_after_number = True start = pos + 1 break else: raise Error(_str_to_base_error(base, str_slice)) - if pos + 1 < str_len and not _isspace(buff[pos + 1]): + if pos + 1 < str_len and not Char(buff[pos + 1]).is_posix_space(): var nextresult = result * real_base if nextresult < result: raise Error( @@ -336,7 +311,7 @@ fn atol(str_slice: StringSlice, base: Int = 10) raises -> Int: if has_space_after_number: for pos in range(start, str_len): - if not _isspace(buff[pos]): + if not Char(buff[pos]).is_posix_space(): raise Error(_str_to_base_error(base, str_slice)) if is_negative: result = -result @@ -358,7 +333,7 @@ fn _trim_and_handle_sign(str_slice: StringSlice, str_len: Int) -> (Int, Bool): """ var buff = str_slice.unsafe_ptr() var start: Int = 0 - while start < str_len and _isspace(buff[start]): + while start < str_len and Char(buff[start]).is_posix_space(): start += 1 var p: Bool = buff[start] == ord("+") var n: Bool = buff[start] == ord("-") @@ -401,9 +376,9 @@ fn _handle_base_prefix( fn _str_to_base_error(base: Int, str_slice: StringSlice) -> String: return ( "String is not convertible to integer with base " - + str(base) + + String(base) + ": '" - + str(str_slice) + + String(str_slice) + "'" ) @@ -443,7 +418,9 @@ fn _identify_base(str_slice: StringSlice, start: Int) -> Tuple[Int, Int]: fn _atof_error(str_ref: StringSlice) -> Error: - return Error("String is not convertible to float: '" + str(str_ref) + "'") + return Error( + "String is not convertible to float: '" + String(str_ref) + "'" + ) fn atof(str_slice: StringSlice) raises -> Float64: @@ -552,156 +529,6 @@ fn atof(str_slice: StringSlice) raises -> Float64: return result * sign -# ===----------------------------------------------------------------------=== # -# isdigit -# ===----------------------------------------------------------------------=== # - - -fn isdigit(c: UInt8) -> Bool: - """Determines whether the given character is a digit [0-9]. - - Args: - c: The character to check. - - Returns: - True if the character is a digit. - """ - alias ord_0 = ord("0") - alias ord_9 = ord("9") - return ord_0 <= Int(c) <= ord_9 - - -# ===----------------------------------------------------------------------=== # -# isupper -# ===----------------------------------------------------------------------=== # - - -fn isupper(c: UInt8) -> Bool: - """Determines whether the given character is an uppercase character. - - This currently only respects the default "C" locale, i.e. returns True iff - the character specified is one of "ABCDEFGHIJKLMNOPQRSTUVWXYZ". - - Args: - c: The character to check. - - Returns: - True if the character is uppercase. - """ - return _is_ascii_uppercase(c) - - -fn _is_ascii_uppercase(c: UInt8) -> Bool: - alias ord_a = ord("A") - alias ord_z = ord("Z") - return ord_a <= Int(c) <= ord_z - - -# ===----------------------------------------------------------------------=== # -# islower -# ===----------------------------------------------------------------------=== # - - -fn islower(c: UInt8) -> Bool: - """Determines whether the given character is an lowercase character. - - This currently only respects the default "C" locale, i.e. returns True iff - the character specified is one of "abcdefghijklmnopqrstuvwxyz". - - Args: - c: The character to check. - - Returns: - True if the character is lowercase. - """ - return _is_ascii_lowercase(c) - - -fn _is_ascii_lowercase(c: UInt8) -> Bool: - alias ord_a = ord("a") - alias ord_z = ord("z") - return ord_a <= Int(c) <= ord_z - - -# ===----------------------------------------------------------------------=== # -# _isspace -# ===----------------------------------------------------------------------=== # - - -fn _isspace(c: StringSlice) -> Bool: - """Determines whether the given character is a whitespace character. - - This only respects the default "C" locale, i.e. returns True only if the - character specified is one of " \\t\\n\\v\\f\\r". For semantics similar - to Python, use `String.isspace()`. - - Args: - c: The character to check. - - Returns: - True iff the character is one of the whitespace characters listed above. - """ - return _isspace(ord(c)) - - -fn _isspace(c: UInt8) -> Bool: - """Determines whether the given character is a whitespace character. - - This only respects the default "C" locale, i.e. returns True only if the - character specified is one of " \\t\\n\\v\\f\\r". For semantics similar - to Python, use `String.isspace()`. - - Args: - c: The character to check. - - Returns: - True iff the character is one of the whitespace characters listed above. - """ - - # NOTE: a global LUT doesn't work at compile time so we can't use it here. - alias ` ` = UInt8(ord(" ")) - alias `\t` = UInt8(ord("\t")) - alias `\n` = UInt8(ord("\n")) - alias `\r` = UInt8(ord("\r")) - alias `\f` = UInt8(ord("\f")) - alias `\v` = UInt8(ord("\v")) - alias `\x1c` = UInt8(ord("\x1c")) - alias `\x1d` = UInt8(ord("\x1d")) - alias `\x1e` = UInt8(ord("\x1e")) - - # This compiles to something very clever that's even faster than a LUT. - return ( - c == ` ` - or c == `\t` - or c == `\n` - or c == `\r` - or c == `\f` - or c == `\v` - or c == `\x1c` - or c == `\x1d` - or c == `\x1e` - ) - - -# ===----------------------------------------------------------------------=== # -# isprintable -# ===----------------------------------------------------------------------=== # - - -fn isprintable(c: UInt8) -> Bool: - """Determines whether the given character is a printable character. - - Args: - c: The character to check. - - Returns: - True if the character is a printable character, otherwise False. - """ - alias ord_space = ord(" ") - alias ord_tilde = ord("~") - return ord_space <= Int(c) <= ord_tilde - - # ===----------------------------------------------------------------------=== # # String # ===----------------------------------------------------------------------=== # @@ -750,7 +577,125 @@ struct String( # ===------------------------------------------------------------------=== # @always_inline - fn __init__(out self, owned buffer: List[UInt8, *_]): + fn __init__(out self): + """Construct an uninitialized string.""" + self._buffer = Self._buffer_type() + + @no_inline + fn __init__[T: Stringable](out self, value: T): + """Initialize from a type conforming to `Stringable`. + + Parameters: + T: The type conforming to Stringable. + + Args: + value: The object to get the string representation of. + """ + self = value.__str__() + + @no_inline + fn __init__[T: StringableRaising](out self, value: T) raises: + """Initialize from a type conforming to `StringableRaising`. + + Parameters: + T: The type conforming to Stringable. + + Args: + value: The object to get the string representation of. + + Raises: + If there is an error when computing the string representation of the type. + """ + self = value.__str__() + + @no_inline + fn __init__[ + *Ts: Writable + ](out self, *args: *Ts, sep: StaticString = "", end: StaticString = ""): + """ + Construct a string by concatenating a sequence of Writable arguments. + + Args: + args: A sequence of Writable arguments. + sep: The separator used between elements. + end: The String to write after printing the elements. + + Parameters: + Ts: The types of the arguments to format. Each type must be satisfy + `Writable`. + + Examples: + + Construct a String from several `Writable` arguments: + + ```mojo + var string = String(1, 2.0, "three", sep=", ") + print(string) # "1, 2.0, three" + ``` + . + """ + self = String() + write_buffered(self, args, sep=sep, end=end) + + @staticmethod + @no_inline + fn __init__[ + *Ts: Writable + ]( + out self, + args: VariadicPack[_, Writable, *Ts], + sep: StaticString = "", + end: StaticString = "", + ): + """ + Construct a string by passing a variadic pack. + + Args: + args: A VariadicPack of Writable arguments. + sep: The separator used between elements. + end: The String to write after printing the elements. + + Parameters: + Ts: The types of the arguments to format. Each type must be satisfy + `Writable`. + + Examples: + + ```mojo + fn variadic_pack_to_string[ + *Ts: Writable, + ](*args: *Ts) -> String: + return String(args) + + string = variadic_pack_to_string(1, ", ", 2.0, ", ", "three") + %# from testing import assert_equal + %# assert_equal(string, "1, 2.0, three") + ``` + . + """ + self = String() + write_buffered(self, args, sep=sep, end=end) + + @no_inline + fn __init__(out self, value: None): + """Initialize a `None` type as "None". + + Args: + value: The object to get the string representation of. + """ + self = "None" + + @always_inline + fn __init__(out self, *, capacity: Int): + """Construct an uninitialized string with the given capacity. + + Args: + capacity: The capacity of the string. + """ + self._buffer = Self._buffer_type(capacity=capacity) + + @always_inline + fn __init__(out self, *, owned buffer: List[UInt8, *_]): """Construct a string from a buffer of bytes without copying the allocated data. @@ -773,20 +718,6 @@ struct String( ) self._buffer = buffer^._cast_hint_trivial_type[True]() - @always_inline - fn __init__(out self): - """Construct an uninitialized string.""" - self._buffer = Self._buffer_type() - - @always_inline - fn __init__(out self, *, capacity: Int): - """Construct an uninitialized string with the given capacity. - - Args: - capacity: The capacity of the string. - """ - self._buffer = Self._buffer_type(capacity=capacity) - fn copy(self) -> Self: """Explicitly copy the provided value. @@ -795,36 +726,6 @@ struct String( """ return self # Just use the implicit copyinit. - fn __init__(out self, strref: StringRef): - """Construct a string from a StringRef object. - - Args: - strref: The StringRef from which to construct this string object. - """ - var length = len(strref) - var buffer = Self._buffer_type() - # +1 for null terminator, initialized to 0 - buffer.resize(length + 1, 0) - memcpy(dest=buffer.data, src=strref.data, count=length) - self = Self(buffer^) - - fn __init__(out self, str_slice: StringSlice): - """Construct a string from a string slice. - - Args: - str_slice: The string slice from which to construct this string. - - Notes: - This will allocate a new string that copies the string contents from - the provided string slice. - """ - - var length = str_slice.byte_length() - var ptr = UnsafePointer[Byte].alloc(length + 1) # null terminator - memcpy(ptr, str_slice.unsafe_ptr(), length) - ptr[length] = 0 - self = String(ptr=ptr, length=length + 1) - @always_inline @implicit fn __init__(out self, literal: StringLiteral): @@ -884,8 +785,7 @@ struct String( fn write[ *Ts: Writable ](*args: *Ts, sep: StaticString = "", end: StaticString = "") -> Self: - """ - Construct a string by concatenating a sequence of Writable arguments. + """Construct a string by concatenating a sequence of Writable arguments. Args: args: A sequence of Writable arguments. @@ -899,63 +799,29 @@ struct String( Returns: A string formed by formatting the argument sequence. - Examples: - - Construct a String from several `Writable` arguments: + This is used only when reusing the `write_to` method for + `__str__` in order to avoid an endless loop recalling + the constructor: ```mojo - var string = String.write(1, ", ", 2.0, ", ", "three") - print(string) # "1, 2.0, three" - %# from testing import assert_equal - %# assert_equal(string, "1, 2.0, three") - ``` - . - """ - var output = String() - write_args(output, args, sep=sep, end=end) - return output^ + fn write_to[W: Writer](self, mut writer: W): + writer.write_bytes(self.as_bytes()) - @staticmethod - @no_inline - fn write[ - *Ts: Writable - ]( - args: VariadicPack[_, Writable, *Ts], - sep: StaticString = "", - end: StaticString = "", - ) -> Self: - """ - Construct a string by passing a variadic pack. - - Args: - args: A VariadicPack of Writable arguments. - sep: The separator used between elements. - end: The String to write after printing the elements. - - Parameters: - Ts: The types of the arguments to format. Each type must be satisfy - `Writable`. - - Returns: - A string formed by formatting the VariadicPack. + fn __str__(self) -> String: + return String.write(self) + ``` - Examples: + Otherwise you can use the `String` constructor directly without calling + the `String.write` static method: ```mojo - fn variadic_pack_to_string[ - *Ts: Writable, - ](*args: *Ts) -> String: - return String.write(args) - - string = variadic_pack_to_string(1, ", ", 2.0, ", ", "three") - %# from testing import assert_equal - %# assert_equal(string, "1, 2.0, three") + var msg = String("my message", 42, 42.2, True) ``` . """ - var output = String() - write_args(output, args, sep=sep, end=end) - return output^ + var string = String() + write_buffered(string, args, sep=sep, end=end) + return string^ @staticmethod @always_inline @@ -1198,15 +1064,14 @@ struct String( """ self._iadd[False](other.as_bytes()) + @deprecated("Use `str.chars()` or `str.char_slices()` instead.") fn __iter__(self) -> _StringSliceIter[__origin_of(self)]: """Iterate over the string, returning immutable references. Returns: An iterator of references to the string elements. """ - return _StringSliceIter[__origin_of(self)]( - ptr=self.unsafe_ptr(), length=self.byte_length() - ) + return self.char_slices() fn __reversed__(self) -> _StringSliceIter[__origin_of(self), False]: """Iterate backwards over the string, returning immutable references. @@ -1231,22 +1096,46 @@ struct String( """ return self.byte_length() > 0 + @always_inline fn __len__(self) -> Int: - """Gets the string length, in bytes (for now) PREFER: - String.byte_length(), a future version will make this method return - Unicode codepoints. + """Get the string length of in bytes. + + This function returns the number of bytes in the underlying UTF-8 + representation of the string. + + To get the number of Unicode codepoints in a string, use + `len(str.chars())`. Returns: - The string length, in bytes (for now). - """ - var unicode_length = self.byte_length() + The string length in bytes. + + # Examples + + Query the length of a string, in bytes and Unicode codepoints: + + ```mojo + from testing import assert_equal + + var s = String("ನಮಸ್ಕಾರ") + + assert_equal(len(s), 21) + assert_equal(len(s.chars()), 7) + ``` + + Strings containing only ASCII characters have the same byte and + Unicode codepoint length: - # TODO: everything uses this method assuming it's byte length - # for i in range(unicode_length): - # if _utf8_byte_type(self._buffer[i]) == 1: - # unicode_length -= 1 + ```mojo + from testing import assert_equal - return unicode_length + var s = String("abc") + + assert_equal(len(s), 3) + assert_equal(len(s.chars()), 3) + ``` + . + """ + return self.byte_length() @always_inline fn __str__(self) -> String: @@ -1305,9 +1194,9 @@ struct String( """ if len(elems) == 0: return "" - var curr = str(elems[0]) + var curr = String(elems[0]) for i in range(1, len(elems)): - curr += self + str(elems[i]) + curr += self + String(elems[i]) return curr fn join[*Types: Writable](self, *elems: *Types) -> String: @@ -1370,7 +1259,7 @@ struct String( is_first = False else: result += self - result += str(e[]) + result += String(e[]) return result @@ -1420,6 +1309,76 @@ struct String( buf.append(0) return String(buf^) + @always_inline + fn chars(self) -> CharsIter[__origin_of(self)]: + """Returns an iterator over the `Char`s encoded in this string slice. + + Returns: + An iterator type that returns successive `Char` values stored in + this string slice. + + # Examples + + Print the characters in a string: + + ```mojo + from testing import assert_equal + + var s = String("abc") + var iter = s.chars() + assert_equal(iter.__next__(), Char.ord("a")) + assert_equal(iter.__next__(), Char.ord("b")) + assert_equal(iter.__next__(), Char.ord("c")) + assert_equal(iter.__has_next__(), False) + ``` + + `chars()` iterates over Unicode codepoints, and supports multibyte + codepoints: + + ```mojo + from testing import assert_equal + + # A visual character composed of a combining sequence of 2 codepoints. + var s = String("á") + assert_equal(s.byte_length(), 3) + + var iter = s.chars() + assert_equal(iter.__next__(), Char.ord("a")) + # U+0301 Combining Acute Accent + assert_equal(iter.__next__().to_u32(), 0x0301) + assert_equal(iter.__has_next__(), False) + ``` + . + """ + return self.as_string_slice().chars() + + fn char_slices(self) -> _StringSliceIter[__origin_of(self)]: + """Returns an iterator over single-character slices of this string. + + Each returned slice points to a single Unicode codepoint encoded in the + underlying UTF-8 representation of this string. + + Returns: + An iterator of references to the string elements. + + # Examples + + Iterate over the character slices in a string: + + ```mojo + from testing import assert_equal, assert_true + + var s = String("abc") + var iter = s.char_slices() + assert_true(iter.__next__() == "a") + assert_true(iter.__next__() == "b") + assert_true(iter.__next__() == "c") + assert_equal(iter.__has_next__(), False) + ``` + . + """ + return self.as_string_slice().char_slices() + fn unsafe_ptr( ref self, ) -> UnsafePointer[ @@ -1662,7 +1621,7 @@ struct String( while lhs <= str_byte_len: # Python adds all "whitespace chars" as one separator # if no separator was specified - for s in self[lhs:]: + for s in self[lhs:].char_slices(): if not s.isspace(): break lhs += s.byte_length() @@ -1676,7 +1635,9 @@ struct String( output.append(self[str_byte_len]) break rhs = lhs + num_bytes(self.unsafe_ptr()[lhs]) - for s in self[lhs + num_bytes(self.unsafe_ptr()[lhs]) :]: + for s in self[ + lhs + num_bytes(self.unsafe_ptr()[lhs]) : + ].char_slices(): if s.isspace(): break rhs += s.byte_length() @@ -2031,8 +1992,8 @@ struct String( """ if not self: return False - for c in self: - if not isdigit(ord(c)): + for char in self.chars(): + if not char.is_ascii_digit(): return False return True @@ -2064,8 +2025,8 @@ struct String( Returns: True if all characters are printable else False. """ - for c in self: - if not isprintable(ord(c)): + for char in self.chars(): + if not char.is_ascii_printable(): return False return True diff --git a/stdlib/src/collections/string/string_slice.mojo b/stdlib/src/collections/string/string_slice.mojo index 129df13b88..5f0bf7ec7b 100644 --- a/stdlib/src/collections/string/string_slice.mojo +++ b/stdlib/src/collections/string/string_slice.mojo @@ -25,7 +25,6 @@ from bit import count_leading_zeros from collections import List, Optional from collections.string.format import _CurlyEntryFormattable, _FormatCurlyEntry from collections.string._utf8_validation import _is_valid_utf8 -from collections.string.string import _isspace from memory import UnsafePointer, memcmp, memcpy, Span from memory.memory import _memcmp_impl_unconstrained from sys import bitwidthof, simdwidthof @@ -37,16 +36,16 @@ alias StaticString = StringSlice[StaticConstantOrigin] """An immutable static string slice.""" -fn _count_utf8_continuation_bytes(span: Span[Byte]) -> Int: +fn _count_utf8_continuation_bytes(str_slice: StringSlice) -> Int: alias sizes = (256, 128, 64, 32, 16, 8) - var ptr = span.unsafe_ptr() - var num_bytes = len(span) + var ptr = str_slice.unsafe_ptr() + var num_bytes = str_slice.byte_length() var amnt: Int = 0 var processed = 0 @parameter for i in range(len(sizes)): - alias s = sizes.get[i, Int]() + alias s = sizes[i] @parameter if simdwidthof[DType.uint8]() >= s: @@ -63,14 +62,6 @@ fn _count_utf8_continuation_bytes(span: Span[Byte]) -> Int: return amnt -fn _unicode_codepoint_utf8_byte_length(c: Int) -> Int: - debug_assert( - 0 <= c <= 0x10FFFF, "Value: ", c, " is not a valid Unicode code point" - ) - alias sizes = SIMD[DType.int32, 4](0, 0b0111_1111, 0b0111_1111_1111, 0xFFFF) - return Int((sizes < c).cast[DType.uint8]().reduce_add()) - - @always_inline fn _utf8_first_byte_sequence_length(b: Byte) -> Int: """Get the length of the sequence starting with given byte. Do note that @@ -83,34 +74,6 @@ fn _utf8_first_byte_sequence_length(b: Byte) -> Int: return Int(count_leading_zeros(~b)) + Int(b < 0b1000_0000) -fn _shift_unicode_to_utf8(ptr: UnsafePointer[UInt8], c: Int, num_bytes: Int): - """Shift unicode to utf8 representation. - - ### Unicode (represented as UInt32 BE) to UTF-8 conversion: - - 1: 00000000 00000000 00000000 0aaaaaaa -> 0aaaaaaa - - a - - 2: 00000000 00000000 00000aaa aabbbbbb -> 110aaaaa 10bbbbbb - - (a >> 6) | 0b11000000, b | 0b10000000 - - 3: 00000000 00000000 aaaabbbb bbcccccc -> 1110aaaa 10bbbbbb 10cccccc - - (a >> 12) | 0b11100000, (b >> 6) | 0b10000000, c | 0b10000000 - - 4: 00000000 000aaabb bbbbcccc ccdddddd -> 11110aaa 10bbbbbb 10cccccc - 10dddddd - - (a >> 18) | 0b11110000, (b >> 12) | 0b10000000, (c >> 6) | 0b10000000, - d | 0b10000000 - """ - if num_bytes == 1: - ptr[0] = UInt8(c) - return - - var shift = 6 * (num_bytes - 1) - var mask = UInt8(0xFF) >> (num_bytes + 1) - var num_bytes_marker = UInt8(0xFF) << (8 - num_bytes) - ptr[0] = ((c >> shift) & mask) | num_bytes_marker - for i in range(1, num_bytes): - shift -= 6 - ptr[i] = ((c >> shift) & 0b0011_1111) | 0b1000_0000 - - fn _utf8_byte_type(b: SIMD[DType.uint8, _], /) -> __type_of(b): """UTF-8 byte type. @@ -218,17 +181,154 @@ struct _StringSliceIter[ fn __len__(self) -> Int: @parameter if forward: - remaining = self.length - self.index - cont = _count_utf8_continuation_bytes( - Span[Byte, ImmutableAnyOrigin]( - ptr=self.ptr + self.index, length=remaining - ) + var remaining = self.length - self.index + var span = Span[Byte, ImmutableAnyOrigin]( + ptr=self.ptr + self.index, length=remaining ) - return remaining - cont + return StringSlice(unsafe_from_utf8=span).char_length() else: - return self.index - _count_utf8_continuation_bytes( - Span[Byte, ImmutableAnyOrigin](ptr=self.ptr, length=self.index) + var span = Span[Byte, ImmutableAnyOrigin]( + ptr=self.ptr, length=self.index ) + return StringSlice(unsafe_from_utf8=span).char_length() + + +@value +struct CharsIter[mut: Bool, //, origin: Origin[mut]]: + """Iterator over the `Char`s in a string slice, constructed by + `StringSlice.chars()`. + + Parameters: + mut: Mutability of the underlying string data. + origin: Origin of the underlying string data. + """ + + var _slice: StringSlice[origin] + """String slice containing the bytes that have not been read yet. + + When this iterator advances, the pointer in `_slice` is advanced by the + byte length of each read character, and the slice length is decremented by + the same amount. + """ + + # Note: + # Marked private since `StringSlice.chars()` is the intended public way to + # construct this type. + @doc_private + fn __init__(out self, str_slice: StringSlice[origin]): + self._slice = str_slice + + # ===-------------------------------------------------------------------===# + # Trait implementations + # ===-------------------------------------------------------------------===# + + @doc_private + fn __iter__(self) -> Self: + return self + + fn __next__(mut self) -> Char: + """Get the next character in the underlying string slice. + + This returns the next `Char` encoded in the underlying string, and + advances the iterator state. + + This function will abort if this iterator has been exhausted. + + Returns: + The next character in the string. + """ + + return self.next().value() + + @always_inline + fn __has_next__(self) -> Bool: + """Returns True if there are still elements in this iterator. + + Returns: + A boolean indicating if there are still elements in this iterator. + """ + return Bool(self.peek_next()) + + @always_inline + fn __len__(self) -> Int: + """Returns the remaining length of this iterator in `Char`s. + + The value returned from this method indicates the number of subsequent + calls to `next()` that will return a value. + + Returns: + Number of codepoints remaining in this iterator. + """ + return self._slice.char_length() + + # ===-------------------------------------------------------------------===# + # Methods + # ===-------------------------------------------------------------------===# + + fn peek_next(self) -> Optional[Char]: + """Check what the next character in this iterator is, without advancing + the iterator state. + + Repeated calls to this method will return the same value. + + Returns: + The next character in the underlying string, or None if the string + is empty. + + # Examples + + `peek_next()` does not advance the iterator, so repeated calls will + return the same value: + + ```mojo + from collections.string import StringSlice + from testing import assert_equal + + var input = StringSlice("123") + var iter = input.chars() + + assert_equal(iter.peek_next().value(), Char.ord("1")) + assert_equal(iter.peek_next().value(), Char.ord("1")) + assert_equal(iter.peek_next().value(), Char.ord("1")) + + # A call to `next()` return the same value as `peek_next()` had, + # but also advance the iterator. + assert_equal(iter.next().value(), Char.ord("1")) + + # Later `peek_next()` calls will return the _new_ next character: + assert_equal(iter.peek_next().value(), Char.ord("2")) + ``` + . + """ + if len(self._slice) > 0: + # SAFETY: Will not read out of bounds because `_slice` is guaranteed + # to contain valid UTF-8. + char, _ = Char.unsafe_decode_utf8_char(self._slice.unsafe_ptr()) + return char + else: + return None + + fn next(mut self) -> Optional[Char]: + """Get the next character in the underlying string slice, or None if + the iterator is empty. + + This returns the next `Char` encoded in the underlying string, and + advances the iterator state. + + Returns: + A character if the string is not empty, otherwise None. + """ + var result: Optional[Char] = self.peek_next() + + if result: + # SAFETY: We just checked that `result` holds a value + var char_len = result.unsafe_value().utf8_byte_length() + # Advance the pointer in _slice. + self._slice._slice._data += char_len + # Decrement the byte-length of _slice. + self._slice._slice._len -= char_len + + return result @value @@ -396,12 +496,20 @@ struct StringSlice[mut: Bool, //, origin: Origin[mut]]( @no_inline fn __str__(self) -> String: - """Gets this slice as a standard `String`. + """Convert this StringSlice to a String. Returns: - The string representation of the slice. + A new String. + + Notes: + This will allocate a new string that copies the string contents from + the provided string slice. """ - return String(str_slice=self) + var length = self.byte_length() + var ptr = UnsafePointer[Byte].alloc(length + 1) # null terminator + memcpy(ptr, self.unsafe_ptr(), length) + ptr[length] = 0 + return String(ptr=ptr, length=length + 1) fn __repr__(self) -> String: """Return a Mojo-compatible representation of this string slice. @@ -412,7 +520,7 @@ struct StringSlice[mut: Bool, //, origin: Origin[mut]]( """ var result = String() var use_dquote = False - for s in self: + for s in self.char_slices(): use_dquote = use_dquote or (s == "'") if s == "\\": @@ -424,12 +532,12 @@ struct StringSlice[mut: Bool, //, origin: Origin[mut]]( elif s == "\r": result += r"\r" else: - var codepoint = ord(s) - if isprintable(codepoint): + var codepoint = Char.ord(s) + if codepoint.is_ascii_printable(): result += s - elif codepoint < 0x10: + elif codepoint.to_u32() < 0x10: result += hex(codepoint, prefix=r"\x0") - elif codepoint < 0x20 or codepoint == 0x7F: + elif codepoint.to_u32() < 0x20 or codepoint.to_u32() == 0x7F: result += hex(codepoint, prefix=r"\x") else: # multi-byte character result += s @@ -439,16 +547,48 @@ struct StringSlice[mut: Bool, //, origin: Origin[mut]]( else: return "'" + result + "'" + @always_inline fn __len__(self) -> Int: - """Nominally returns the _length in Unicode codepoints_ (not bytes!). + """Get the string length in bytes. + + This function returns the number of bytes in the underlying UTF-8 + representation of the string. + + To get the number of Unicode codepoints in a string, use + `len(str.chars())`. Returns: - The length in Unicode codepoints. + The string length in bytes. + + # Examples + + Query the length of a string, in bytes and Unicode codepoints: + + ```mojo + from collections.string import StringSlice + from testing import assert_equal + + var s = StringSlice("ನಮಸ್ಕಾರ") + + assert_equal(len(s), 21) + assert_equal(len(s.chars()), 7) + ``` + + Strings containing only ASCII characters have the same byte and + Unicode codepoint length: + + ```mojo + from collections.string import StringSlice + from testing import assert_equal + + var s = StringSlice("abc") + + assert_equal(len(s), 3) + assert_equal(len(s.chars()), 3) + ``` + . """ - var b_len = self.byte_length() - alias S = Span[Byte, StaticConstantOrigin] - var s = S(ptr=self.unsafe_ptr(), length=b_len) - return b_len - _count_utf8_continuation_bytes(s) + return self.byte_length() fn write_to[W: Writer](self, mut writer: W): """Formats this string slice to the provided `Writer`. @@ -485,7 +625,7 @@ struct StringSlice[mut: Bool, //, origin: Origin[mut]]( Returns: The file system path representation as a string. """ - return String(self) + return self.__str__() # ===------------------------------------------------------------------===# # Operator dunders @@ -578,15 +718,14 @@ struct StringSlice[mut: Bool, //, origin: Origin[mut]]( self.unsafe_ptr(), rhs.unsafe_ptr(), min(len1, len2) ) + @deprecated("Use `str.chars()` or `str.char_slices()` instead.") fn __iter__(self) -> _StringSliceIter[origin]: """Iterate over the string, returning immutable references. Returns: An iterator of references to the string elements. """ - return _StringSliceIter[origin]( - ptr=self.unsafe_ptr(), length=self.byte_length() - ) + return self.char_slices() fn __reversed__(self) -> _StringSliceIter[origin, False]: """Iterate backwards over the string, returning immutable references. @@ -756,7 +895,7 @@ struct StringSlice[mut: Bool, //, origin: Origin[mut]]( # if not s.isspace(): # break # r_idx -= 1 - while r_idx > 0 and _isspace(self.as_bytes()[r_idx - 1]): + while r_idx > 0 and Char(self.as_bytes()[r_idx - 1]).is_posix_space(): r_idx -= 1 return Self(unsafe_from_utf8=self.as_bytes()[:r_idx]) @@ -806,10 +945,68 @@ struct StringSlice[mut: Bool, //, origin: Origin[mut]]( # if not s.isspace(): # break # l_idx += 1 - while l_idx < self.byte_length() and _isspace(self.as_bytes()[l_idx]): + while ( + l_idx < self.byte_length() + and Char(self.as_bytes()[l_idx]).is_posix_space() + ): l_idx += 1 return Self(unsafe_from_utf8=self.as_bytes()[l_idx:]) + @always_inline + fn chars(self) -> CharsIter[origin]: + """Returns an iterator over the `Char`s encoded in this string slice. + + Returns: + An iterator type that returns successive `Char` values stored in + this string slice. + + # Examples + + Print the characters in a string: + + ```mojo + from collections.string import StringSlice + from testing import assert_equal + + var s = StringSlice("abc") + var iter = s.chars() + assert_equal(iter.__next__(), Char.ord("a")) + assert_equal(iter.__next__(), Char.ord("b")) + assert_equal(iter.__next__(), Char.ord("c")) + assert_equal(iter.__has_next__(), False) + ``` + + `chars()` iterates over Unicode codepoints, and supports multibyte + codepoints: + + ```mojo + from collections.string import StringSlice + from testing import assert_equal + + # A visual character composed of a combining sequence of 2 codepoints. + var s = StringSlice("á") + assert_equal(s.byte_length(), 3) + + var iter = s.chars() + assert_equal(iter.__next__(), Char.ord("a")) + # U+0301 Combining Acute Accent + assert_equal(iter.__next__().to_u32(), 0x0301) + assert_equal(iter.__has_next__(), False) + ``` + . + """ + return CharsIter(self) + + fn char_slices(self) -> _StringSliceIter[origin]: + """Iterate over the string, returning immutable references. + + Returns: + An iterator of references to the string elements. + """ + return _StringSliceIter[origin]( + ptr=self.unsafe_ptr(), length=self.byte_length() + ) + @always_inline fn as_bytes(self) -> Span[Byte, origin]: """Get the sequence of encoded bytes of the underlying string. @@ -840,6 +1037,68 @@ struct StringSlice[mut: Bool, //, origin: Origin[mut]]( return len(self.as_bytes()) + fn char_length(self) -> UInt: + """Returns the length in Unicode codepoints. + + This returns the number of `Char` codepoint values encoded in the UTF-8 + representation of this string. + + Note: To get the length in bytes, use `StringSlice.byte_length()`. + + Returns: + The length in Unicode codepoints. + + # Examples + + Query the length of a string, in bytes and Unicode codepoints: + + ```mojo + from collections.string import StringSlice + from testing import assert_equal + + var s = StringSlice("ನಮಸ್ಕಾರ") + + assert_equal(s.char_length(), 7) + assert_equal(len(s), 21) + ``` + + Strings containing only ASCII characters have the same byte and + Unicode codepoint length: + + ```mojo + from collections.string import StringSlice + from testing import assert_equal + + var s = StringSlice("abc") + + assert_equal(s.char_length(), 3) + assert_equal(len(s), 3) + ``` + + The character length of a string with visual combining characters is + the length in Unicode codepoints, not grapheme clusters: + + ```mojo + from collections.string import StringSlice + from testing import assert_equal + + var s = StringSlice("á") + assert_equal(s.char_length(), 2) + assert_equal(s.byte_length(), 3) + ``` + . + """ + # Every codepoint is encoded as one leading byte + 0 to 3 continuation + # bytes. + # The total number of codepoints is equal the number of leading bytes. + # So we can compute the number of leading bytes (and thereby codepoints) + # by subtracting the number of continuation bytes length from the + # overall length in bytes. + # For a visual explanation of how this UTF-8 codepoint counting works: + # https://connorgray.com/ephemera/project-log#2025-01-13 + var continuation_count = _count_utf8_continuation_bytes(self) + return self.byte_length() - continuation_count + fn get_immutable( self, ) -> StringSlice[ImmutableOrigin.cast_from[origin].result]: @@ -1034,44 +1293,42 @@ struct StringSlice[mut: Bool, //, origin: Origin[mut]]( fn isspace(self) -> Bool: """Determines whether every character in the given StringSlice is a python whitespace String. This corresponds to Python's - [universal separators:]( - https://docs.python.org/3/library/stdtypes.html#str.splitlines) - `" \\t\\n\\v\\f\\r\\x1c\\x1d\\x1e\\x85\\u2028\\u2029"`. + [universal separators]( + https://docs.python.org/3/library/stdtypes.html#str.splitlines): + `" \\t\\n\\v\\f\\r\\x1c\\x1d\\x1e\\x85\\u2028\\u2029"`. Returns: True if the whole StringSlice is made up of whitespace characters listed above, otherwise False. + + Examples: + + Check if a string contains only whitespace: + + ```mojo + from collections.string import StringSlice + from testing import assert_true, assert_false + + # An empty string is not considered to contain only whitespace chars: + assert_false(StringSlice("").isspace()) + + # ASCII space characters + assert_true(StringSlice(" ").isspace()) + assert_true(StringSlice("\t").isspace()) + + # Contains non-space characters + assert_false(StringSlice(" abc ").isspace()) + ``` + . """ if self.byte_length() == 0: return False - # TODO add line and paragraph separator as stringliteral - # once Unicode escape sequences are accepted - var next_line = List[UInt8](0xC2, 0x85) - """TODO: \\x85""" - var unicode_line_sep = List[UInt8](0xE2, 0x80, 0xA8) - """TODO: \\u2028""" - var unicode_paragraph_sep = List[UInt8](0xE2, 0x80, 0xA9) - """TODO: \\u2029""" - - for s in self: - var no_null_len = s.byte_length() - var ptr = s.unsafe_ptr() - if no_null_len == 1 and _isspace(ptr[0]): - continue - elif ( - no_null_len == 2 and memcmp(ptr, next_line.unsafe_ptr(), 2) == 0 - ): - continue - elif no_null_len == 3 and ( - memcmp(ptr, unicode_line_sep.unsafe_ptr(), 3) == 0 - or memcmp(ptr, unicode_paragraph_sep.unsafe_ptr(), 3) == 0 - ): - continue - else: + for s in self.chars(): + if not s.is_python_space(): return False - _ = next_line, unicode_line_sep, unicode_paragraph_sep + return True fn isnewline[single_character: Bool = False](self) -> Bool: @@ -1100,7 +1357,7 @@ struct StringSlice[mut: Bool, //, origin: Origin[mut]]( ) else: var offset = 0 - for s in self: + for s in self.char_slices(): var b_len = s.byte_length() if not _is_newline_char(ptr, offset, ptr[offset], b_len): return False diff --git a/stdlib/src/math/math.mojo b/stdlib/src/math/math.mojo index 81d53289cf..d2acffd50a 100644 --- a/stdlib/src/math/math.mojo +++ b/stdlib/src/math/math.mojo @@ -421,8 +421,8 @@ fn exp2[ 1.33336498402e-3, ), ](xc) - return __type_of(r)( - from_bits=(r.to_bits() + (m << FPUtils[type].mantissa_width())) + return __type_of(r).from_bits( + (r.to_bits() + (m << FPUtils[type].mantissa_width())) ) @@ -489,7 +489,7 @@ fn _ldexp_impl[ alias integral_type = FPUtils[type].integral_type var m = exp.cast[integral_type]() + FPUtils[type].exponent_bias() - return x * __type_of(x)(from_bits=m << FPUtils[type].mantissa_width()) + return x * __type_of(x).from_bits(m << FPUtils[type].mantissa_width()) @always_inline @@ -676,7 +676,7 @@ fn frexp[ (((mask1 & x_int) >> mantissa_width) - exponent_bias).cast[type](), zero, ) - var frac = selector.select(T(from_bits=x_int & ~mask1 | mask2), zero) + var frac = selector.select(T.from_bits(x_int & ~mask1 | mask2), zero) return StaticTuple[size=2](frac, exp) @@ -2588,7 +2588,7 @@ trait CeilDivable: var x: Float64 fn __ceildiv__(self, denominator: Self) -> Self: - return -(self.x // -denominator.x) + return Self(self.x // denominator.x) ``` """ @@ -2621,7 +2621,7 @@ trait CeilDivableRaising: var x: object fn __ceildiv__(self, denominator: Self) raises -> Self: - return -(self.x // -denominator.x) + return Self(self.x // denominator.x) ``` """ diff --git a/stdlib/src/memory/pointer.mojo b/stdlib/src/memory/pointer.mojo index 1cd5f70dc4..54f60a1330 100644 --- a/stdlib/src/memory/pointer.mojo +++ b/stdlib/src/memory/pointer.mojo @@ -417,4 +417,4 @@ struct Pointer[ Returns: The string representation of the Pointer. """ - return str(UnsafePointer.address_of(self[])) + return String(UnsafePointer.address_of(self[])) diff --git a/stdlib/src/memory/span.mojo b/stdlib/src/memory/span.mojo index af08b48728..6657aba8b4 100644 --- a/stdlib/src/memory/span.mojo +++ b/stdlib/src/memory/span.mojo @@ -68,16 +68,14 @@ struct _SpanIter[ return self @always_inline - fn __next__( - mut self, - ) -> Pointer[T, origin]: + fn __next__(mut self, out p: Pointer[T, origin]): @parameter if forward: + p = Pointer.address_of(self.src[self.index]) self.index += 1 - return Pointer.address_of(self.src[self.index - 1]) else: self.index -= 1 - return Pointer.address_of(self.src[self.index]) + p = Pointer.address_of(self.src[self.index]) @always_inline fn __has_next__(self) -> Bool: diff --git a/stdlib/src/memory/unsafe_pointer.mojo b/stdlib/src/memory/unsafe_pointer.mojo index c2aefe847e..d2c19e8fb1 100644 --- a/stdlib/src/memory/unsafe_pointer.mojo +++ b/stdlib/src/memory/unsafe_pointer.mojo @@ -442,7 +442,7 @@ struct UnsafePointer[ """ # TODO: Avoid intermediate String allocation. - writer.write(str(self)) + writer.write(String(self)) # ===-------------------------------------------------------------------===# # Methods diff --git a/stdlib/src/os/_linux_aarch64.mojo b/stdlib/src/os/_linux_aarch64.mojo index f6184d56ab..2eaba1b631 100644 --- a/stdlib/src/os/_linux_aarch64.mojo +++ b/stdlib/src/os/_linux_aarch64.mojo @@ -70,20 +70,20 @@ struct _c_stat(Stringable): @no_inline fn __str__(self) -> String: var res = String("{\n") - res += "st_dev: " + str(self.st_dev) + ",\n" - res += "st_mode: " + str(self.st_mode) + ",\n" - res += "st_nlink: " + str(self.st_nlink) + ",\n" - res += "st_ino: " + str(self.st_ino) + ",\n" - res += "st_uid: " + str(self.st_uid) + ",\n" - res += "st_gid: " + str(self.st_gid) + ",\n" - res += "st_rdev: " + str(self.st_rdev) + ",\n" - res += "st_size: " + str(self.st_size) + ",\n" - res += "st_blksize: " + str(self.st_blksize) + ",\n" - res += "st_blocks: " + str(self.st_blocks) + ",\n" - res += "st_atimespec: " + str(self.st_atimespec) + ",\n" - res += "st_mtimespec: " + str(self.st_mtimespec) + ",\n" - res += "st_ctimespec: " + str(self.st_ctimespec) + ",\n" - res += "st_birthtimespec: " + str(self.st_birthtimespec) + "\n" + res += "st_dev: " + String(self.st_dev) + ",\n" + res += "st_mode: " + String(self.st_mode) + ",\n" + res += "st_nlink: " + String(self.st_nlink) + ",\n" + res += "st_ino: " + String(self.st_ino) + ",\n" + res += "st_uid: " + String(self.st_uid) + ",\n" + res += "st_gid: " + String(self.st_gid) + ",\n" + res += "st_rdev: " + String(self.st_rdev) + ",\n" + res += "st_size: " + String(self.st_size) + ",\n" + res += "st_blksize: " + String(self.st_blksize) + ",\n" + res += "st_blocks: " + String(self.st_blocks) + ",\n" + res += "st_atimespec: " + String(self.st_atimespec) + ",\n" + res += "st_mtimespec: " + String(self.st_mtimespec) + ",\n" + res += "st_ctimespec: " + String(self.st_ctimespec) + ",\n" + res += "st_birthtimespec: " + String(self.st_birthtimespec) + "\n" return res + "}" fn _to_stat_result(self) -> stat_result: diff --git a/stdlib/src/os/_linux_x86.mojo b/stdlib/src/os/_linux_x86.mojo index 76c1816e81..fbd5629f48 100644 --- a/stdlib/src/os/_linux_x86.mojo +++ b/stdlib/src/os/_linux_x86.mojo @@ -68,20 +68,20 @@ struct _c_stat(Stringable): @no_inline fn __str__(self) -> String: var res = String("{\n") - res += "st_dev: " + str(self.st_dev) + ",\n" - res += "st_mode: " + str(self.st_mode) + ",\n" - res += "st_nlink: " + str(self.st_nlink) + ",\n" - res += "st_ino: " + str(self.st_ino) + ",\n" - res += "st_uid: " + str(self.st_uid) + ",\n" - res += "st_gid: " + str(self.st_gid) + ",\n" - res += "st_rdev: " + str(self.st_rdev) + ",\n" - res += "st_size: " + str(self.st_size) + ",\n" - res += "st_blksize: " + str(self.st_blksize) + ",\n" - res += "st_blocks: " + str(self.st_blocks) + ",\n" - res += "st_atimespec: " + str(self.st_atimespec) + ",\n" - res += "st_mtimespec: " + str(self.st_mtimespec) + ",\n" - res += "st_ctimespec: " + str(self.st_ctimespec) + ",\n" - res += "st_birthtimespec: " + str(self.st_birthtimespec) + "\n" + res += "st_dev: " + String(self.st_dev) + ",\n" + res += "st_mode: " + String(self.st_mode) + ",\n" + res += "st_nlink: " + String(self.st_nlink) + ",\n" + res += "st_ino: " + String(self.st_ino) + ",\n" + res += "st_uid: " + String(self.st_uid) + ",\n" + res += "st_gid: " + String(self.st_gid) + ",\n" + res += "st_rdev: " + String(self.st_rdev) + ",\n" + res += "st_size: " + String(self.st_size) + ",\n" + res += "st_blksize: " + String(self.st_blksize) + ",\n" + res += "st_blocks: " + String(self.st_blocks) + ",\n" + res += "st_atimespec: " + String(self.st_atimespec) + ",\n" + res += "st_mtimespec: " + String(self.st_mtimespec) + ",\n" + res += "st_ctimespec: " + String(self.st_ctimespec) + ",\n" + res += "st_birthtimespec: " + String(self.st_birthtimespec) + "\n" return res + "}" fn _to_stat_result(self) -> stat_result: diff --git a/stdlib/src/os/_macos.mojo b/stdlib/src/os/_macos.mojo index b23a5f713d..596fb6e459 100644 --- a/stdlib/src/os/_macos.mojo +++ b/stdlib/src/os/_macos.mojo @@ -73,22 +73,22 @@ struct _c_stat(Stringable): @no_inline fn __str__(self) -> String: var res = String("{\n") - res += "st_dev: " + str(self.st_dev) + ",\n" - res += "st_mode: " + str(self.st_mode) + ",\n" - res += "st_nlink: " + str(self.st_nlink) + ",\n" - res += "st_ino: " + str(self.st_ino) + ",\n" - res += "st_uid: " + str(self.st_uid) + ",\n" - res += "st_gid: " + str(self.st_gid) + ",\n" - res += "st_rdev: " + str(self.st_rdev) + ",\n" - res += "st_atimespec: " + str(self.st_atimespec) + ",\n" - res += "st_mtimespec: " + str(self.st_mtimespec) + ",\n" - res += "st_ctimespec: " + str(self.st_ctimespec) + ",\n" - res += "st_birthtimespec: " + str(self.st_birthtimespec) + ",\n" - res += "st_size: " + str(self.st_size) + ",\n" - res += "st_blocks: " + str(self.st_blocks) + ",\n" - res += "st_blksize: " + str(self.st_blksize) + ",\n" - res += "st_flags: " + str(self.st_flags) + ",\n" - res += "st_gen: " + str(self.st_gen) + "\n" + res += "st_dev: " + String(self.st_dev) + ",\n" + res += "st_mode: " + String(self.st_mode) + ",\n" + res += "st_nlink: " + String(self.st_nlink) + ",\n" + res += "st_ino: " + String(self.st_ino) + ",\n" + res += "st_uid: " + String(self.st_uid) + ",\n" + res += "st_gid: " + String(self.st_gid) + ",\n" + res += "st_rdev: " + String(self.st_rdev) + ",\n" + res += "st_atimespec: " + String(self.st_atimespec) + ",\n" + res += "st_mtimespec: " + String(self.st_mtimespec) + ",\n" + res += "st_ctimespec: " + String(self.st_ctimespec) + ",\n" + res += "st_birthtimespec: " + String(self.st_birthtimespec) + ",\n" + res += "st_size: " + String(self.st_size) + ",\n" + res += "st_blocks: " + String(self.st_blocks) + ",\n" + res += "st_blksize: " + String(self.st_blksize) + ",\n" + res += "st_flags: " + String(self.st_flags) + ",\n" + res += "st_gen: " + String(self.st_gen) + "\n" return res + "}" fn _to_stat_result(self) -> stat_result: diff --git a/stdlib/src/os/atomic.mojo b/stdlib/src/os/atomic.mojo index 5b34c70298..3b1088fcce 100644 --- a/stdlib/src/os/atomic.mojo +++ b/stdlib/src/os/atomic.mojo @@ -53,7 +53,7 @@ struct Atomic[type: DType, *, scope: StringLiteral = ""]: self.value = value @always_inline - fn load(mut self) -> Scalar[type]: + fn load(self) -> Scalar[type]: """Loads the current value from the atomic. Returns: @@ -139,7 +139,7 @@ struct Atomic[type: DType, *, scope: StringLiteral = ""]: ) @always_inline - fn fetch_add(mut self, rhs: Scalar[type]) -> Scalar[type]: + fn fetch_add(self, rhs: Scalar[type]) -> Scalar[type]: """Performs atomic in-place add. Atomically replaces the current value with the result of arithmetic @@ -158,7 +158,7 @@ struct Atomic[type: DType, *, scope: StringLiteral = ""]: return Self._fetch_add(value_addr, rhs) @always_inline - fn __iadd__(mut self, rhs: Scalar[type]): + fn __iadd__(self, rhs: Scalar[type]): """Performs atomic in-place add. Atomically replaces the current value with the result of arithmetic @@ -173,7 +173,7 @@ struct Atomic[type: DType, *, scope: StringLiteral = ""]: _ = self.fetch_add(rhs) @always_inline - fn fetch_sub(mut self, rhs: Scalar[type]) -> Scalar[type]: + fn fetch_sub(self, rhs: Scalar[type]) -> Scalar[type]: """Performs atomic in-place sub. Atomically replaces the current value with the result of arithmetic @@ -197,7 +197,7 @@ struct Atomic[type: DType, *, scope: StringLiteral = ""]: ](value_addr.address, rhs.value) @always_inline - fn __isub__(mut self, rhs: Scalar[type]): + fn __isub__(self, rhs: Scalar[type]): """Performs atomic in-place sub. Atomically replaces the current value with the result of arithmetic @@ -213,7 +213,7 @@ struct Atomic[type: DType, *, scope: StringLiteral = ""]: @always_inline fn compare_exchange_weak( - mut self, mut expected: Scalar[type], desired: Scalar[type] + self, mut expected: Scalar[type], desired: Scalar[type] ) -> Bool: """Atomically compares the self value with that of the expected value. If the values are equal, then the self value is replaced with the @@ -271,7 +271,7 @@ struct Atomic[type: DType, *, scope: StringLiteral = ""]: _max_impl[scope=scope](ptr, rhs) @always_inline - fn max(mut self, rhs: Scalar[type]): + fn max(self, rhs: Scalar[type]): """Performs atomic in-place max. Atomically replaces the current value with the result of max of the @@ -311,7 +311,7 @@ struct Atomic[type: DType, *, scope: StringLiteral = ""]: _min_impl[scope=scope](ptr, rhs) @always_inline - fn min(mut self, rhs: Scalar[type]): + fn min(self, rhs: Scalar[type]): """Performs atomic in-place min. Atomically replaces the current value with the result of min of the diff --git a/stdlib/src/os/fstat.mojo b/stdlib/src/os/fstat.mojo index 83e493bc7a..fb683155da 100644 --- a/stdlib/src/os/fstat.mojo +++ b/stdlib/src/os/fstat.mojo @@ -169,10 +169,10 @@ struct stat_result(Stringable, Writable): writer.write(", st_uid=", self.st_uid) writer.write(", st_gid=", self.st_gid) writer.write(", st_size=", self.st_size) - writer.write(", st_atime=", str(self.st_atimespec)) - writer.write(", st_mtime=", str(self.st_mtimespec)) - writer.write(", st_ctime=", str(self.st_ctimespec)) - writer.write(", st_birthtime=", str(self.st_birthtimespec)) + writer.write(", st_atime=", String(self.st_atimespec)) + writer.write(", st_mtime=", String(self.st_mtimespec)) + writer.write(", st_ctime=", String(self.st_ctimespec)) + writer.write(", st_birthtime=", String(self.st_birthtimespec)) writer.write(", st_blocks=", self.st_blocks) writer.write(", st_blksize=", self.st_blksize) writer.write(", st_rdev=", self.st_rdev) @@ -194,7 +194,7 @@ struct stat_result(Stringable, Writable): Returns: A representation of stat_result. """ - return str(self) + return String(self) # ===----------------------------------------------------------------------=== # diff --git a/stdlib/src/os/os.mojo b/stdlib/src/os/os.mojo index cf44c53814..0d623bcfe6 100644 --- a/stdlib/src/os/os.mojo +++ b/stdlib/src/os/os.mojo @@ -250,16 +250,16 @@ fn abort[result: AnyType = NoneType._mlir_type]() -> result: @no_inline fn abort[ - result: AnyType = NoneType._mlir_type, *, W: Writable -](message: W) -> result: + result: AnyType = NoneType._mlir_type, *Ts: Writable +](*messages: *Ts) -> result: """Calls a target dependent trap instruction if available. Parameters: result: The result type. - W: The Writable type. + Ts: The Writable types. Args: - message: The message to include when aborting. + messages: The messages to include when aborting. Returns: A null result type. @@ -267,7 +267,7 @@ fn abort[ @parameter if not is_gpu(): - print(message, flush=True) + print(String(messages), flush=True) return abort[result]() @@ -367,11 +367,11 @@ def makedirs[ mkdir(path, mode) except e: if not exist_ok: - raise str( + raise String( e ) + "\nset `makedirs(path, exist_ok=True)` to allow existing dirs" if not os.path.isdir(path): - raise "path not created: " + path.__fspath__() + "\n" + str(e) + raise "path not created: " + path.__fspath__() + "\n" + String(e) fn rmdir[PathLike: os.PathLike](path: PathLike) raises: diff --git a/stdlib/src/os/path/path.mojo b/stdlib/src/os/path/path.mojo index 60ea06e96b..139e77d681 100644 --- a/stdlib/src/os/path/path.mojo +++ b/stdlib/src/os/path/path.mojo @@ -367,8 +367,8 @@ def split[PathLike: os.PathLike, //](path: PathLike) -> (String, String): fspath = path.__fspath__() i = fspath.rfind(os.sep) + 1 head, tail = fspath[:i], fspath[i:] - if head and head != str(os.sep) * len(head): - head = str(head.rstrip(sep)) + if head and head != String(os.sep) * len(head): + head = String(head.rstrip(sep)) return head, tail diff --git a/stdlib/src/pathlib/path.mojo b/stdlib/src/pathlib/path.mojo index 4cfbf1357a..cec42c48b3 100644 --- a/stdlib/src/pathlib/path.mojo +++ b/stdlib/src/pathlib/path.mojo @@ -61,8 +61,8 @@ fn _dir_of_current_file() raises -> Path: @no_inline fn _dir_of_current_file_impl(file_name: StringLiteral) raises -> Path: - var i = str(file_name).rfind(DIR_SEPARATOR) - return Path(str(file_name)[0:i]) + var i = String(file_name).rfind(DIR_SEPARATOR) + return Path(String(file_name)[0:i]) @value @@ -184,7 +184,7 @@ struct Path( Returns: A string representation of the path. """ - return str(self) + return String(self) fn __repr__(self) -> String: """Returns a printable representation of the path. @@ -192,7 +192,7 @@ struct Path( Returns: A printable representation of the path. """ - return str(self) + return String(self) fn __eq__(self, other: Self) -> Bool: """Returns True if the two paths are equal. @@ -203,7 +203,7 @@ struct Path( Returns: True if the paths are equal and False otherwise. """ - return str(self) == str(other) + return String(self) == String(other) fn __eq__(self, other: StringSlice) -> Bool: """Returns True if the two paths are equal. @@ -340,7 +340,7 @@ struct Path( value: The value to write. """ with open(self, "w") as f: - f.write(str(value)) + f.write(String(value)) fn suffix(self) -> String: """The path's extension, if any. diff --git a/stdlib/src/prelude/__init__.mojo b/stdlib/src/prelude/__init__.mojo index 75b88c8700..dffb5725b5 100644 --- a/stdlib/src/prelude/__init__.mojo +++ b/stdlib/src/prelude/__init__.mojo @@ -21,10 +21,6 @@ from collections.string import ( atof, atol, chr, - isdigit, - islower, - isprintable, - isupper, ord, ) from hashlib.hash import Hashable, hash @@ -39,8 +35,14 @@ from builtin.builtin_list import ( VariadicPack, ) from builtin.builtin_slice import Slice, slice +from builtin.comparable import ( + LessThanComparable, + GreaterThanComparable, + LessThanOrEqualComparable, + GreaterThanOrEqualComparable, + Comparable, +) from builtin.char import Char -from builtin.comparable import Comparable from builtin.constrained import constrained from builtin.coroutine import AnyCoroutine, Coroutine, RaisingCoroutine from builtin.debug_assert import debug_assert @@ -60,6 +62,7 @@ from builtin.int import ( ImplicitlyIntable, IntableRaising, index, + int, ) from builtin.int_literal import IntLiteral from builtin.io import input, print diff --git a/stdlib/src/pwd/_linux.mojo b/stdlib/src/pwd/_linux.mojo index 3f1d3b4460..877cebd05b 100644 --- a/stdlib/src/pwd/_linux.mojo +++ b/stdlib/src/pwd/_linux.mojo @@ -10,9 +10,9 @@ # See the License for the specific language governing permissions and # limitations under the License. # ===----------------------------------------------------------------------=== # -from sys.ffi import c_char, external_call - from memory import UnsafePointer +from utils import StringRef +from sys.ffi import c_char, external_call from .pwd import Passwd @@ -35,20 +35,20 @@ struct _C_Passwd: fn _build_pw_struct(passwd_ptr: UnsafePointer[_C_Passwd]) raises -> Passwd: var c_pwuid = passwd_ptr[] return Passwd( - pw_name=String(c_pwuid.pw_name), - pw_passwd=String(c_pwuid.pw_passwd), + pw_name=String(StringRef(c_pwuid.pw_name)), + pw_passwd=String(StringRef(c_pwuid.pw_passwd)), pw_uid=Int(c_pwuid.pw_uid), pw_gid=Int(c_pwuid.pw_gid), - pw_gecos=String(c_pwuid.pw_gecos), - pw_dir=String(c_pwuid.pw_dir), - pw_shell=String(c_pwuid.pw_shell), + pw_gecos=String(StringRef(c_pwuid.pw_gecos)), + pw_dir=String(StringRef(c_pwuid.pw_dir)), + pw_shell=String(StringRef(c_pwuid.pw_shell)), ) fn _getpw_linux(uid: UInt32) raises -> Passwd: var passwd_ptr = external_call["getpwuid", UnsafePointer[_C_Passwd]](uid) if not passwd_ptr: - raise "user ID not found in the password database: " + str(uid) + raise "user ID not found in the password database: " + String(uid) return _build_pw_struct(passwd_ptr) diff --git a/stdlib/src/pwd/_macos.mojo b/stdlib/src/pwd/_macos.mojo index 348a4b1377..7aa51eeeb2 100644 --- a/stdlib/src/pwd/_macos.mojo +++ b/stdlib/src/pwd/_macos.mojo @@ -10,9 +10,9 @@ # See the License for the specific language governing permissions and # limitations under the License. # ===----------------------------------------------------------------------=== # -from sys.ffi import c_char, external_call - +from utils import StringRef from memory import UnsafePointer +from sys.ffi import c_char, external_call from .pwd import Passwd @@ -39,13 +39,13 @@ struct _C_Passwd: fn _build_pw_struct(passwd_ptr: UnsafePointer[_C_Passwd]) raises -> Passwd: var c_pwuid = passwd_ptr[] var passwd = Passwd( - pw_name=String(c_pwuid.pw_name), - pw_passwd=String(c_pwuid.pw_passwd), + pw_name=String(StringRef(c_pwuid.pw_name)), + pw_passwd=String(StringRef(c_pwuid.pw_passwd)), pw_uid=Int(c_pwuid.pw_uid), pw_gid=Int(c_pwuid.pw_gid), - pw_gecos=String(c_pwuid.pw_gecos), - pw_dir=String(c_pwuid.pw_dir), - pw_shell=String(c_pwuid.pw_shell), + pw_gecos=String(StringRef(c_pwuid.pw_gecos)), + pw_dir=String(StringRef(c_pwuid.pw_dir)), + pw_shell=String(StringRef(c_pwuid.pw_shell)), ) return passwd @@ -53,7 +53,7 @@ fn _build_pw_struct(passwd_ptr: UnsafePointer[_C_Passwd]) raises -> Passwd: fn _getpw_macos(uid: UInt32) raises -> Passwd: var passwd_ptr = external_call["getpwuid", UnsafePointer[_C_Passwd]](uid) if not passwd_ptr: - raise "user ID not found in the password database: " + str(uid) + raise "user ID not found in the password database: " + String(uid) return _build_pw_struct(passwd_ptr) diff --git a/stdlib/src/python/_cpython.mojo b/stdlib/src/python/_cpython.mojo index e247533f6f..52b7d58343 100644 --- a/stdlib/src/python/_cpython.mojo +++ b/stdlib/src/python/_cpython.mojo @@ -486,7 +486,7 @@ struct PyObject(Stringable, Representable, Writable): Returns: A string representation. """ - return str(self) + return String(self) # ===-------------------------------------------------------------------===# # Methods @@ -574,7 +574,7 @@ struct PyModuleDef_Base(Stringable, Representable, Writable): Returns: A string representation. """ - return str(self) + return String(self) # ===-------------------------------------------------------------------===# # Methods @@ -694,7 +694,7 @@ struct PyModuleDef(Stringable, Representable, Writable): Returns: A string representation. """ - return str(self) + return String(self) # ===-------------------------------------------------------------------===# # Methods diff --git a/stdlib/src/python/python.mojo b/stdlib/src/python/python.mojo index ca1ccab3ab..e5c774c2e5 100644 --- a/stdlib/src/python/python.mojo +++ b/stdlib/src/python/python.mojo @@ -412,7 +412,7 @@ struct Python: "invalid unchecked conversion of Python error to Mojo error", ) - var error: Error = str(PythonObject(cpython.PyErr_Fetch())) + var error: Error = String(PythonObject(cpython.PyErr_Fetch())) cpython.PyErr_Clear() return error diff --git a/stdlib/src/python/python_object.mojo b/stdlib/src/python/python_object.mojo index 4abc013786..86081cd0d0 100644 --- a/stdlib/src/python/python_object.mojo +++ b/stdlib/src/python/python_object.mojo @@ -499,21 +499,21 @@ struct PythonObject( @parameter if _type_is_eq[T, PythonObject](): - obj = value.get[i, PythonObject]() + obj = rebind[PythonObject](value[i]) elif _type_is_eq[T, Int](): - obj = PythonObject(value.get[i, Int]()) + obj = PythonObject(rebind[Int](value[i])) elif _type_is_eq[T, Float64](): - obj = PythonObject(value.get[i, Float64]()) + obj = PythonObject(rebind[Float64](value[i])) elif _type_is_eq[T, Bool](): - obj = PythonObject(value.get[i, Bool]()) + obj = PythonObject(rebind[Bool](value[i])) elif _type_is_eq[T, StringRef](): obj = PythonObject( StringSlice[MutableAnyOrigin]( - unsafe_from_utf8_strref=value.get[i, StringRef]() + unsafe_from_utf8_strref=rebind[StringRef](value[i]) ) ) elif _type_is_eq[T, StringLiteral](): - obj = PythonObject(value.get[i, StringLiteral]()) + obj = PythonObject(rebind[StringLiteral](value[i])) else: obj = PythonObject(0) constrained[ @@ -1492,7 +1492,7 @@ struct PythonObject( cpython = _get_global_python_itf().cpython() return cpython.PyFloat_AsDouble(self.py_object) - @deprecated("Use `float(obj)` instead.") + @deprecated("Use `Float64(obj)` instead.") fn to_float64(self) -> Float64: """Returns a float representation of the object. @@ -1531,7 +1531,7 @@ struct PythonObject( """ # TODO: Avoid this intermediate String allocation, if possible. - writer.write(str(self)) + writer.write(String(self)) # ===-------------------------------------------------------------------===# # Methods @@ -1589,7 +1589,7 @@ struct PythonObject( var actual_type = cpython.Py_TYPE(self.unsafe_as_py_object_ptr()) var actual_type_name = PythonObject(cpython.PyType_GetName(actual_type)) - return str(actual_type_name) + return String(actual_type_name) # ===-----------------------------------------------------------------------===# diff --git a/stdlib/src/sys/_amdgpu.mojo b/stdlib/src/sys/_amdgpu.mojo index 7e3f2ca06a..b8cbb9a876 100644 --- a/stdlib/src/sys/_amdgpu.mojo +++ b/stdlib/src/sys/_amdgpu.mojo @@ -23,7 +23,6 @@ from sys.intrinsics import ( ) from time import sleep from collections import InlineArray -from utils import StaticTuple # NOTE: MOST OF THE CODE HERE IS ADAPTED FROM # AMD'S `device-libs`. @@ -547,12 +546,11 @@ struct Header: me: UInt32, low: UInt32, ): + var active = ballot[DType.int64](True).cast[DType.uint64]() if me == low: var control = set_ready_flag(0) self._handle[].control = control - self._handle[].activemask = ballot[DType.int64](True).cast[ - DType.uint64 - ]() + self._handle[].activemask = active self._handle[].service = service_id payload[Int(me), 0] = arg0 @@ -627,9 +625,7 @@ struct header_t: @value @register_passable("trivial") struct Payload: - var _handle: UnsafePointer[ - payload_t, address_space = _GPUAddressSpace.GLOBAL - ] + var _handle: UnsafePointer[payload_t] @always_inline fn __setitem__(mut self, idx0: Int, idx1: Int, value: UInt64): @@ -641,9 +637,8 @@ struct Payload: # but this is actually just conforming to the ABI of: # https://github.com/ROCm/clr/blob/f5b2516f5d8a44b06ad1907594db1be25a9fe57b/rocclr/device/devhostcall.hpp#L99 @value -@register_passable("trivial") struct payload_t: - var slots: StaticTuple[StaticTuple[UInt64, 8], 64] + var slots: InlineArray[InlineArray[UInt64, 8], 64] @value @@ -752,9 +747,7 @@ struct buffer_t: var headers: UnsafePointer[ header_t, address_space = _GPUAddressSpace.GLOBAL ] - var payloads: UnsafePointer[ - payload_t, address_space = _GPUAddressSpace.GLOBAL - ] + var payloads: UnsafePointer[payload_t] var doorbell: UInt64 var free_stack: UInt64 var ready_stack: UInt64 diff --git a/stdlib/src/sys/ffi.mojo b/stdlib/src/sys/ffi.mojo index 429dd1e0f7..cafee526e0 100644 --- a/stdlib/src/sys/ffi.mojo +++ b/stdlib/src/sys/ffi.mojo @@ -206,7 +206,7 @@ struct DLHandle(CollectionElement, CollectionElementNew, Boolable): name.unsafe_cstr_ptr(), ) - return bool(opaque_function_ptr) + return Bool(opaque_function_ptr) # TODO(#15590): Implement support for windows and remove the always_inline. @always_inline diff --git a/stdlib/src/tempfile/tempfile.mojo b/stdlib/src/tempfile/tempfile.mojo index 18b783cffe..e298462290 100644 --- a/stdlib/src/tempfile/tempfile.mojo +++ b/stdlib/src/tempfile/tempfile.mojo @@ -40,7 +40,7 @@ fn _get_random_name(size: Int = 8) -> String: ) name_list.append(ord(characters[rand_index])) name_list.append(0) - return String(name_list^) + return String(buffer=name_list^) fn _candidate_tempdir_list() -> List[String]: @@ -64,7 +64,7 @@ fn _candidate_tempdir_list() -> List[String]: # As a last resort, the current directory if possible, # os.path.getcwd() could raise try: - dirlist.append(str(Path())) + dirlist.append(String(Path())) except: pass @@ -102,7 +102,7 @@ fn _try_to_create_file(dir: StringSlice) -> Bool: # verify that we have writing access in the target directory try: - with FileHandle(str(filename), "w"): + with FileHandle(String(filename), "w"): pass os.remove(filename) return True @@ -161,7 +161,7 @@ fn mkdtemp( # python implementation expands the path, # but several functions are not yet implemented in mojo # i.e. abspath, normpath - return str(dir_name) + return String(dir_name) except: continue raise Error("Failed to create temporary file") @@ -279,7 +279,7 @@ struct NamedTemporaryFile: print( f.read() == "Hello world!" ) - print(str(p), p.exists()) #Removed by default + print(String(p), p.exists()) #Removed by default ``` Note: `NamedTemporaryFile.__init__` document the arguments. """ @@ -415,7 +415,7 @@ struct NamedTemporaryFile: args: Sequence of arguments to write to this Writer. """ var file = FileDescriptor(self._file_handle._get_raw_fd()) - write_buffered[buffer_size=4096](file, args) + write_buffered(file, args) @always_inline fn write_bytes(mut self, bytes: Span[Byte, _]): diff --git a/stdlib/src/testing/testing.mojo b/stdlib/src/testing/testing.mojo index e6235bc616..f8b02cc294 100644 --- a/stdlib/src/testing/testing.mojo +++ b/stdlib/src/testing/testing.mojo @@ -43,7 +43,7 @@ from utils import StringSlice @always_inline fn _assert_error[T: Stringable](msg: T, loc: _SourceLocation) -> String: - return loc.prefix("AssertionError: " + str(msg)) + return loc.prefix("AssertionError: " + String(msg)) @always_inline @@ -141,7 +141,10 @@ fn assert_equal[ """ if lhs != rhs: raise _assert_cmp_error["`left == right` comparison"]( - str(lhs), str(rhs), msg=msg, loc=location.or_else(__call_location()) + String(lhs), + String(rhs), + msg=msg, + loc=location.or_else(__call_location()), ) @@ -200,7 +203,10 @@ fn assert_equal[ """ if any(lhs != rhs): raise _assert_cmp_error["`left == right` comparison"]( - str(lhs), str(rhs), msg=msg, loc=location.or_else(__call_location()) + String(lhs), + String(rhs), + msg=msg, + loc=location.or_else(__call_location()), ) @@ -345,7 +351,10 @@ fn assert_not_equal[ """ if lhs == rhs: raise _assert_cmp_error["`left != right` comparison"]( - str(lhs), str(rhs), msg=msg, loc=location.or_else(__call_location()) + String(lhs), + String(rhs), + msg=msg, + loc=location.or_else(__call_location()), ) @@ -403,7 +412,10 @@ fn assert_not_equal[ """ if all(lhs == rhs): raise _assert_cmp_error["`left != right` comparison"]( - str(lhs), str(rhs), msg=msg, loc=location.or_else(__call_location()) + String(lhs), + String(rhs), + msg=msg, + loc=location.or_else(__call_location()), ) @@ -490,11 +502,11 @@ fn assert_almost_equal[ ) if not all(almost_equal): - var err = str(lhs) + " is not close to " + str(rhs) + var err = String(lhs) + " is not close to " + String(rhs) @parameter if type.is_integral() or type.is_floating_point(): - err += " with a diff of " + str(abs(lhs - rhs)) + err += " with a diff of " + String(abs(lhs - rhs)) if msg: err += " (" + msg + ")" @@ -529,7 +541,10 @@ fn assert_is[ """ if lhs is not rhs: raise _assert_cmp_error["`left is right` identification"]( - str(lhs), str(rhs), msg=msg, loc=location.or_else(__call_location()) + String(lhs), + String(rhs), + msg=msg, + loc=location.or_else(__call_location()), ) @@ -560,7 +575,10 @@ fn assert_is_not[ """ if lhs is rhs: raise _assert_cmp_error["`left is not right` identification"]( - str(lhs), str(rhs), msg=msg, loc=location.or_else(__call_location()) + String(lhs), + String(rhs), + msg=msg, + loc=location.or_else(__call_location()), ) @@ -644,7 +662,7 @@ struct assert_raises: AssertionError: Always. The block must raise to pass the test. """ raise Error( - "AssertionError: Didn't raise at " + str(self.call_location) + "AssertionError: Didn't raise at " + String(self.call_location) ) fn __exit__(self, error: Error) raises -> Bool: @@ -660,5 +678,5 @@ struct assert_raises: True if the error message contained the expected string. """ if self.message_contains: - return self.message_contains.value() in str(error) + return self.message_contains.value() in String(error) return True diff --git a/stdlib/src/time/time.mojo b/stdlib/src/time/time.mojo index 5ace9e42ce..561179f9f0 100644 --- a/stdlib/src/time/time.mojo +++ b/stdlib/src/time/time.mojo @@ -78,7 +78,7 @@ struct _CTimeSpec(Stringable): @no_inline fn __str__(self) -> String: - return str(self.as_nanoseconds()) + "ns" + return String(self.as_nanoseconds()) + "ns" @value diff --git a/stdlib/src/utils/_serialize.mojo b/stdlib/src/utils/_serialize.mojo index f6e5baf18c..e013cc6ea8 100644 --- a/stdlib/src/utils/_serialize.mojo +++ b/stdlib/src/utils/_serialize.mojo @@ -170,7 +170,7 @@ fn _serialize[ for i in range(len(shape)): if i: shape_str += "x" - shape_str += str(shape[i]) + shape_str += String(shape[i]) serialize_fn(shape_str) if serialize_end_line: diff --git a/stdlib/src/utils/index.mojo b/stdlib/src/utils/index.mojo index 27dc95bbb3..5a1d0c1aed 100644 --- a/stdlib/src/utils/index.mojo +++ b/stdlib/src/utils/index.mojo @@ -517,9 +517,7 @@ struct IndexList[ The resulting index tuple. """ - # FIXME(#53331) - nodebug is required otherwise we crash in debug - # information generation. - @always_inline("nodebug") + @always_inline fn apply_fn[ type: DType ](a: Scalar[type], b: Scalar[type]) -> Scalar[type]: diff --git a/stdlib/src/utils/stringref.mojo b/stdlib/src/utils/stringref.mojo index 5bdb71d0b2..1b3666a52a 100644 --- a/stdlib/src/utils/stringref.mojo +++ b/stdlib/src/utils/stringref.mojo @@ -14,14 +14,13 @@ """ from collections.string import StringSlice -from collections.string.string import _isspace from hashlib._hasher import _HashableWithHasher, _Hasher from sys import simdwidthof from sys.ffi import c_char from bit import count_trailing_zeros from builtin.dtype import _uint_type_of_width -from memory import UnsafePointer, memcmp, pack_bits, Span +from memory import UnsafePointer, memcmp, pack_bits, Span, memcpy from memory.memory import _memcmp_impl_unconstrained @@ -401,7 +400,12 @@ struct StringRef( Returns: A new string. """ - return String.write(self) + var length = len(self) + var buffer = String._buffer_type() + # +1 for null terminator, initialized to 0 + buffer.resize(length + 1, 0) + memcpy(dest=buffer.data, src=self.data, count=length) + return String(buffer^) @no_inline fn __repr__(self) -> String: @@ -410,7 +414,7 @@ struct StringRef( Returns: The String representation of the StringRef. """ - return String.write("StringRef(", repr(str(self)), ")") + return String("StringRef(", repr(String(self)), ")") @no_inline fn write_to[W: Writer](self, mut writer: W): diff --git a/stdlib/src/utils/variant.mojo b/stdlib/src/utils/variant.mojo index 60d9279a30..0a9b66979d 100644 --- a/stdlib/src/utils/variant.mojo +++ b/stdlib/src/utils/variant.mojo @@ -22,7 +22,7 @@ fn to_string(mut x: IntOrString) -> String: if x.isa[String](): return x[String] # x.isa[Int]() - return str(x[Int]) + return String(x[Int]) # They have to be mutable for now, and implement CollectionElement var an_int = IntOrString(4) @@ -85,7 +85,7 @@ struct Variant[*Ts: CollectionElement]( if x.isa[String](): return x[String] # x.isa[Int]() - return str(x[Int]) + return String(x[Int]) # They have to be mutable for now, and implement CollectionElement var an_int = IntOrString(4) diff --git a/stdlib/src/utils/write.mojo b/stdlib/src/utils/write.mojo index f2a5172d2f..a022102d36 100644 --- a/stdlib/src/utils/write.mojo +++ b/stdlib/src/utils/write.mojo @@ -68,14 +68,14 @@ trait Writer: fn write_to[W: Writer](self, mut writer: W): writer.write("Point(", self.x, ", ", self.y, ")") - # Enable conversion to a String using `str(point)` + # Enable conversion to a String using `String(point)` fn __str__(self) -> String: return String.write(self) fn main(): var point = Point(1, 2) - var new_string = NewString(str(point)) + var new_string = NewString(String(point)) new_string.write("\\n", Point(3, 4)) print(new_string) ``` @@ -217,12 +217,6 @@ fn write_args[ end.write_to(writer) -trait MovableWriter(Movable, Writer): - """Allows moving a Writer into a buffer.""" - - ... - - struct _WriteBufferHeap(Writer): var data: UnsafePointer[UInt8] var pos: Int @@ -272,19 +266,21 @@ struct _ArgBytes(Writer): args.each[write_arg]() -struct _WriteBufferStack[W: MovableWriter, //, capacity: Int](Writer): +struct _WriteBufferStack[origin: MutableOrigin, W: Writer, //, capacity: Int]( + Writer +): var data: InlineArray[UInt8, capacity] var pos: Int - var writer: W + var writer: Pointer[W, origin] @implicit - fn __init__(out self, owned writer: W): + fn __init__(out self, ref [origin]writer: W): self.data = InlineArray[UInt8, capacity](unsafe_uninitialized=True) self.pos = 0 - self.writer = writer^ + self.writer = Pointer.address_of(writer) fn flush(mut self): - self.writer.write_bytes( + self.writer[].write_bytes( Span[Byte, ImmutableAnyOrigin]( ptr=self.data.unsafe_ptr(), length=self.pos ) @@ -299,7 +295,7 @@ struct _WriteBufferStack[W: MovableWriter, //, capacity: Int](Writer): # If span is too large to fit in buffer, write directly and return if len_bytes > capacity: self.flush() - self.writer.write_bytes(bytes) + self.writer[].write_bytes(bytes) return # If buffer would overflow, flush writer and reset pos to 0. if self.pos + len_bytes > capacity: @@ -317,11 +313,11 @@ struct _WriteBufferStack[W: MovableWriter, //, capacity: Int](Writer): fn write_buffered[ - W: MovableWriter, //, + W: Writer, //, *Ts: Writable, - buffer_size: Int, + buffer_size: Int = 4096, ]( - owned writer: W, + mut writer: W, args: VariadicPack[_, Writable, *Ts], *, sep: StaticString = "", @@ -332,11 +328,11 @@ fn write_buffered[ the buffer would overflow it writes to the `writer` passed in. You can also add seperators between the args, and end characters. - Parameters: W: The type of the `Writer` to write to. Ts: The types of each arg to write. Each type must satisfy `Writable`. - buffer_size: How many bytes to write to a buffer before writing out. + buffer_size: How many bytes to write to a buffer before writing out to + the `writer` (default `4096`). Args: writer: The `Writer` to write to. @@ -353,8 +349,13 @@ fn write_buffered[ fn print_err_buffered[*Ts: Writable]( *args: *Ts, sep: StringLiteral, end: StringLiteral ): - var stdout = sys.stderr - write_buffered[buffer_size=4096](stdout, args, sep=sep, end=end) + var stderr = sys.stderr + write_buffered(stdout, args, sep=sep, end=end) + + # Buffer before allocating a string + var string = String() + write_buffered(string, args, sep=sep, end=end) + print_err_buffered(3, "total", "args", sep=",", end="[end]") ``` @@ -367,11 +368,11 @@ fn write_buffered[ @parameter if is_nvidia_gpu(): - # Stack space is very small on GPU due to many threads, so use heap # Count the total length of bytes to allocate only once var arg_bytes = _ArgBytes() write_args(arg_bytes, args, sep=sep, end=end) + # Stack space is very small on GPU due to many threads, so use heap var buffer = _WriteBufferHeap(arg_bytes.size + 1) write_args(buffer, args, sep=sep, end=end) buffer.data[buffer.pos] = 0 @@ -379,6 +380,6 @@ fn write_buffered[ Span[Byte, ImmutableAnyOrigin](ptr=buffer.data, length=buffer.pos) ) else: - var buffer = _WriteBufferStack[buffer_size](writer^) + var buffer = _WriteBufferStack[buffer_size](writer) write_args(buffer, args, sep=sep, end=end) buffer.flush() diff --git a/stdlib/test/bit/test_bit.mojo b/stdlib/test/bit/test_bit.mojo index 489976fdeb..ff6e99752f 100644 --- a/stdlib/test/bit/test_bit.mojo +++ b/stdlib/test/bit/test_bit.mojo @@ -506,7 +506,7 @@ def test_rotate_bits_simd(): fn _log2_floor(n: Int) -> Int: - return Int(floor(log2(float(n)))) + return Int(floor(log2(Float64(n)))) def test_log2_floor(): @@ -515,7 +515,7 @@ def test_log2_floor(): assert_equal( log2_floor(i), _log2_floor(i), - msg="mismatching value for the input value of " + str(i), + msg="mismatching value for the input value of " + String(i), ) fn _check_alias[n: Int](expected: Int) raises: diff --git a/stdlib/test/builtin/test_bfloat16.mojo b/stdlib/test/builtin/test_bfloat16.mojo index 1b01473741..8295f30970 100644 --- a/stdlib/test/builtin/test_bfloat16.mojo +++ b/stdlib/test/builtin/test_bfloat16.mojo @@ -68,7 +68,7 @@ def check_float64_values(): ) assert_equal( - str( + String( Float64( __mlir_op.`pop.cast`[_type = __mlir_type[`!pop.scalar`]]( __mlir_op.`kgen.param.constant`[ diff --git a/stdlib/test/builtin/test_bool.mojo b/stdlib/test/builtin/test_bool.mojo index 2225b795bf..081a31bc38 100644 --- a/stdlib/test/builtin/test_bool.mojo +++ b/stdlib/test/builtin/test_bool.mojo @@ -29,8 +29,8 @@ def test_bool_cast_to_int(): def test_bool_none(): var test = None - assert_equal(bool(None), False) - assert_equal(bool(test), False) + assert_equal(Bool(None), False) + assert_equal(Bool(test), False) @value @@ -48,12 +48,12 @@ fn takes_bool(cond: Bool) -> Bool: def test_convert_from_implicitly_boolable(): assert_true(takes_bool(MyTrue())) - assert_true(bool(MyTrue())) + assert_true(Bool(MyTrue())) -def test_bool_to_string(): - assert_equal(str(True), "True") - assert_equal(str(False), "False") +# def test_bool_to_string(): +# assert_equal(String(True), "True") +# assert_equal(String(False), "False") def test_bool_representation(): @@ -159,7 +159,7 @@ def main(): test_bool_cast_to_int() test_bool_none() test_convert_from_implicitly_boolable() - test_bool_to_string() + # test_bool_to_string() test_bool_representation() test_bitwise() test_neg() diff --git a/stdlib/test/builtin/test_char.mojo b/stdlib/test/builtin/test_char.mojo index 97c2a56978..ce52119ad1 100644 --- a/stdlib/test/builtin/test_char.mojo +++ b/stdlib/test/builtin/test_char.mojo @@ -12,13 +12,13 @@ # ===----------------------------------------------------------------------=== # # RUN: %mojo %s -from testing import assert_true, assert_false, assert_equal +from testing import assert_true, assert_false, assert_equal, assert_not_equal def test_char_validity(): # Check that basic unchecked constructor behaves as expected. var c1 = Char(unsafe_unchecked_codepoint=32) - assert_equal(c1._codepoint, 32) + assert_equal(c1._scalar_value, 32) assert_true(Char.from_u32(0)) @@ -41,5 +41,203 @@ def test_char_validity(): assert_false(Char.from_u32(0x10FFFF + 1)) +def test_char_from_u8(): + var c1 = Char(UInt8(0)) + assert_true(c1.is_ascii()) + + # All non-negative 8-bit integers are codepoints, but not all are ASCII. + var c2 = Char(UInt8(255)) + assert_false(c2.is_ascii()) + + +def test_char_comparison(): + assert_equal(Char(0), Char(0)) + assert_not_equal(Char(0), Char(1)) + + +def test_char_formatting(): + assert_equal(String(Char(0)), "\0") + assert_equal(String(Char(32)), " ") + assert_equal(String(Char(97)), "a") + assert_equal(String(Char.from_u32(0x00BE).value()), "¾") + assert_equal(String(Char.from_u32(0x1F642).value()), "🙂") + + +def test_char_properties(): + assert_true(Char.from_u32(0).value().is_ascii()) + # Last ASCII codepoint. + assert_true(Char.from_u32(0b0111_1111).value().is_ascii()) # ASCII 127 0x7F + + # First non-ASCII codepoint. + assert_false(Char.from_u32(0b1000_0000).value().is_ascii()) + assert_false(Char.from_u32(0b1111_1111).value().is_ascii()) + + +def test_char_is_posix_space(): + # checking true cases + assert_true(Char.ord(" ").is_posix_space()) + assert_true(Char.ord("\n").is_posix_space()) + assert_true(Char.ord("\n").is_posix_space()) + assert_true(Char.ord("\t").is_posix_space()) + assert_true(Char.ord("\r").is_posix_space()) + assert_true(Char.ord("\v").is_posix_space()) + assert_true(Char.ord("\f").is_posix_space()) + + # Checking false cases + assert_false(Char.ord("a").is_posix_space()) + assert_false(Char.ord("a").is_posix_space()) + assert_false(Char.ord("u").is_posix_space()) + assert_false(Char.ord("s").is_posix_space()) + assert_false(Char.ord("t").is_posix_space()) + assert_false(Char.ord("i").is_posix_space()) + assert_false(Char.ord("n").is_posix_space()) + assert_false(Char.ord("z").is_posix_space()) + assert_false(Char.ord(".").is_posix_space()) + + +def test_char_is_lower(): + assert_true(Char.ord("a").is_ascii_lower()) + assert_true(Char.ord("b").is_ascii_lower()) + assert_true(Char.ord("y").is_ascii_lower()) + assert_true(Char.ord("z").is_ascii_lower()) + + assert_false(Char.from_u32(ord("a") - 1).value().is_ascii_lower()) + assert_false(Char.from_u32(ord("z") + 1).value().is_ascii_lower()) + + assert_false(Char.ord("!").is_ascii_lower()) + assert_false(Char.ord("0").is_ascii_lower()) + + +def test_char_is_upper(): + assert_true(Char.ord("A").is_ascii_upper()) + assert_true(Char.ord("B").is_ascii_upper()) + assert_true(Char.ord("Y").is_ascii_upper()) + assert_true(Char.ord("Z").is_ascii_upper()) + + assert_false(Char.from_u32(ord("A") - 1).value().is_ascii_upper()) + assert_false(Char.from_u32(ord("Z") + 1).value().is_ascii_upper()) + + assert_false(Char.ord("!").is_ascii_upper()) + assert_false(Char.ord("0").is_ascii_upper()) + + +def test_char_is_digit(): + assert_true(Char.ord("1").is_ascii_digit()) + assert_false(Char.ord("g").is_ascii_digit()) + + # Devanagari Digit 6 — non-ASCII digits are not "ascii digit". + assert_false(Char.ord("६").is_ascii_digit()) + + +def test_char_is_printable(): + assert_true(Char.ord("a").is_ascii_printable()) + assert_false(Char.ord("\n").is_ascii_printable()) + assert_false(Char.ord("\t").is_ascii_printable()) + + # Non-ASCII characters are not considered "ascii printable". + assert_false(Char.ord("स").is_ascii_printable()) + + +alias SIGNIFICANT_CODEPOINTS = List[Tuple[Int, List[Byte]]]( + # -------------------------- + # 1-byte (ASCII) codepoints + # -------------------------- + # Smallest 1-byte codepoint value + (0, List[Byte](0)), + (1, List[Byte](1)), + (32, List[Byte](32)), # First non-control character + (0b0111_1111, List[Byte](127)), # 127 + # ------------------ + # 2-byte codepoints -- 0b110x_xxxx 0b10xx_xxxx (11 x's) + # ------------------ + # Smallest 2-byte codepoint + (128, List[Byte](0b1100_0010, 0b1000_0000)), + # Largest 2-byte codepoint -- 2^11 - 1 == 2047 + (2**11 - 1, List[Byte](0b1101_1111, 0b1011_1111)), + # ------------------ + # 3-byte codepoints -- 0b1110_xxxx 0b10xx_xxxx 0b10xx_xxxx (16 x's) + # ------------------ + # Smallest 3-byte codepoint -- 2^11 == 2048 + (2**11, List[Byte](0b1110_0000, 0b1010_0000, 0b1000_0000)), + # Largest 3-byte codepoint -- 2^16 - 1 == 65535 == 0xFFFF + (2**16 - 1, List[Byte](0b1110_1111, 0b1011_1111, 0b1011_1111)), + # ------------------ + # 4-byte codepoints 0b1111_0xxx 0b10xx_xxxx 0b10xx_xxxx 0b10xx_xxxx (21 x's) + # ------------------ + # Smallest 4-byte codepoint + (2**16, List[Byte](0b1111_0000, 0b1001_0000, 0b1000_0000, 0b1000_0000)), + # Largest 4-byte codepoint -- Maximum Unicode codepoint + ( + 0x10FFFF, + List[Byte](0b1111_0100, 0b1000_1111, 0b1011_1111, 0b1011_1111), + ), +) + + +fn assert_utf8_bytes(codepoint: UInt32, owned expected: List[Byte]) raises: + var char_opt = Char.from_u32(codepoint) + var char = char_opt.value() + + # Allocate a length-4 buffer to write to. + var buffer = List[Byte](0, 0, 0, 0) + var written = char.unsafe_write_utf8(buffer.unsafe_ptr()) + + # Check that the number of bytes written was as expected. + assert_equal( + written, + len(expected), + "wrong byte count written encoding codepoint: {}".format(codepoint), + ) + + # Normalize `expected` to length 4 so we can compare the written byte + # values with `buffer`. + for _ in range(4 - len(expected)): + expected.append(0) + + assert_equal( + buffer, + expected, + "wrong byte values written encoding codepoint: {}".format(codepoint), + ) + + +def test_char_utf8_encoding(): + for entry in SIGNIFICANT_CODEPOINTS: + var codepoint = entry[][0] + var expected_utf8 = entry[][1] + + assert_utf8_bytes(codepoint, expected_utf8) + + +def test_char_utf8_byte_length(): + for entry in SIGNIFICANT_CODEPOINTS: + var codepoint = entry[][0] + var expected_utf8 = entry[][1] + + var computed_len = Char.from_u32(codepoint).value().utf8_byte_length() + + assert_equal(computed_len, len(expected_utf8)) + + +def test_char_comptime(): + alias c1 = Char.from_u32(32).value() + + # Test that `utf8_byte_length()` works at compile time. + alias c1_bytes = c1.utf8_byte_length() + assert_equal(c1_bytes, 1) + + def main(): test_char_validity() + test_char_from_u8() + test_char_comparison() + test_char_formatting() + test_char_properties() + test_char_is_posix_space() + test_char_is_lower() + test_char_is_upper() + test_char_is_digit() + test_char_is_printable() + test_char_utf8_encoding() + test_char_utf8_byte_length() + test_char_comptime() diff --git a/stdlib/test/builtin/test_deprecation_warnings.mojo b/stdlib/test/builtin/test_deprecation_warnings.mojo new file mode 100644 index 0000000000..46499a0d89 --- /dev/null +++ b/stdlib/test/builtin/test_deprecation_warnings.mojo @@ -0,0 +1,25 @@ +# ===----------------------------------------------------------------------=== # +# Copyright (c) 2024, Modular Inc. All rights reserved. +# +# Licensed under the Apache License v2.0 with LLVM Exceptions: +# https://llvm.org/LICENSE.txt +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ===----------------------------------------------------------------------=== # +# RUN: %mojo %s 2>&1 1>/dev/null | FileCheck %s --check-prefix=CHECK-STDERR + + +fn main(): + # FIXME(25.2): Move deprecation warnings to compiler errors + # CHECK-STDERR: warning: the `int` function is deprecated, use the `Int` constructor instead + _ = int(42) + # CHECK-STDERR: warning: the `str` function is deprecated, use the `String` constructor instead + _ = str(0) + # CHECK-STDERR: warning: the `bool` function is deprecated, use the `Bool` constructor instead + _ = bool(False) + # CHECK-STDERR: warning: the `float` function is deprecated, use the `Float64` constructor instead + _ = float(42.4) diff --git a/stdlib/test/builtin/test_dtype.mojo b/stdlib/test/builtin/test_dtype.mojo index d941ab794a..eba0e13117 100644 --- a/stdlib/test/builtin/test_dtype.mojo +++ b/stdlib/test/builtin/test_dtype.mojo @@ -24,8 +24,8 @@ fn test_equality() raises: fn test_stringable() raises: - assert_equal("float32", str(DType.float32)) - assert_equal("int64", str(DType.int64)) + assert_equal("float32", String(DType.float32)) + assert_equal("int64", String(DType.int64)) fn test_representable() raises: diff --git a/stdlib/test/builtin/test_error.mojo b/stdlib/test/builtin/test_error.mojo index eb24ee7e4b..70dea916e7 100644 --- a/stdlib/test/builtin/test_error.mojo +++ b/stdlib/test/builtin/test_error.mojo @@ -23,15 +23,15 @@ def test_error_raising(): try: raise_an_error() except e: - assert_equal(str(e), "MojoError: This is an error!") + assert_equal(String(e), "MojoError: This is an error!") def test_from_and_to_string(): var my_string: String = "FOO" var error = Error(my_string) - assert_equal(str(error), "FOO") + assert_equal(String(error), "FOO") - assert_equal(str(Error("bad")), "bad") + assert_equal(String(Error("bad")), "bad") assert_equal(repr(Error("err")), "Error('err')") diff --git a/stdlib/test/builtin/test_file.mojo b/stdlib/test/builtin/test_file.mojo index 96043d9952..7b23687430 100644 --- a/stdlib/test/builtin/test_file.mojo +++ b/stdlib/test/builtin/test_file.mojo @@ -52,7 +52,7 @@ def test_file_read_bytes_multi(): assert_equal(len(bytes1), 12, "12 bytes") # we add the null terminator bytes1.append(0) - var string1 = String(bytes1) + var string1 = String(buffer=bytes1) assert_equal(len(string1), 12, "12 chars") assert_equal(string1, String("Lorem ipsum ")) @@ -60,7 +60,7 @@ def test_file_read_bytes_multi(): assert_equal(len(bytes2), 6, "6 bytes") # we add the null terminator bytes2.append(0) - var string2 = String(bytes2) + var string2 = String(buffer=bytes2) assert_equal(len(string2), 6, "6 chars") assert_equal(string2, "dolor ") @@ -164,7 +164,7 @@ def test_file_seek(): _ = f.seek(-12) except e: alias expected_msg = "seek error" - assert_equal(str(e)[: len(expected_msg)], expected_msg) + assert_equal(String(e)[: len(expected_msg)], expected_msg) def test_file_open_nodir(): @@ -224,7 +224,7 @@ struct Word: word.append(self.fourth_letter) word.append(self.fith_letter) word.append(0) - return String(word) + return String(buffer=word) def test_file_read_to_dtype_pointer(): @@ -232,14 +232,14 @@ def test_file_read_to_dtype_pointer(): var ptr = UnsafePointer[UInt8].alloc(8) var data = f.read(ptr, 8) assert_equal( - str(ptr.load[width=8](0)), + String(ptr.load[width=8](0)), "[76, 111, 114, 101, 109, 32, 105, 112]", ) var ptr2 = UnsafePointer[Int8].alloc(8) var data2 = f.read(ptr2, 8) assert_equal( - str(ptr2.load[width=8](0)), + String(ptr2.load[width=8](0)), "[115, 117, 109, 32, 100, 111, 108, 111]", ) diff --git a/stdlib/test/builtin/test_format_float.mojo b/stdlib/test/builtin/test_format_float.mojo index 3bf820543d..7c022ec74b 100644 --- a/stdlib/test/builtin/test_format_float.mojo +++ b/stdlib/test/builtin/test_format_float.mojo @@ -93,7 +93,7 @@ def test_float64(): var mojo_f64_str = String() _write_float(mojo_f64_str, f[]) - var py_f64_str = str(PythonObject(f[])) + var py_f64_str = String(PythonObject(f[])) assert_equal(py_f64_str, mojo_f64_str) @@ -188,7 +188,7 @@ def test_float32(): var mojo_f32_str = String() _write_float(mojo_f32_str, f[]) - var py_f32_str = str(np.float32(f[])) + var py_f32_str = String(np.float32(f[])) assert_equal(py_f32_str, mojo_f32_str) @@ -198,7 +198,7 @@ def test_random_floats(): var f64 = random_float64() var mojo_f64_str = String() _write_float(mojo_f64_str, f64) - var py_f64_str = str(PythonObject(f64)) + var py_f64_str = String(PythonObject(f64)) assert_equal(py_f64_str, mojo_f64_str) diff --git a/stdlib/test/builtin/test_int.mojo b/stdlib/test/builtin/test_int.mojo index ad487d7241..d2d0149413 100644 --- a/stdlib/test/builtin/test_int.mojo +++ b/stdlib/test/builtin/test_int.mojo @@ -230,7 +230,7 @@ def test_comparison(): def test_float_conversion(): - assert_equal(float(Int(45)), Float64(45)) + assert_equal(Float64(Int(45)), Float64(45)) def test_conversion_from_python(): diff --git a/stdlib/test/builtin/test_issue_1004.mojo b/stdlib/test/builtin/test_issue_1004.mojo index 15e0c9f41c..db6ed5f61d 100644 --- a/stdlib/test/builtin/test_issue_1004.mojo +++ b/stdlib/test/builtin/test_issue_1004.mojo @@ -24,4 +24,4 @@ def main(): try: foo("Hello") except e: - assert_equal(str(e), "Failed on: Hello") + assert_equal(String(e), "Failed on: Hello") diff --git a/stdlib/test/builtin/test_issue_3908.mojo b/stdlib/test/builtin/test_issue_3908.mojo new file mode 100644 index 0000000000..3e468a428f --- /dev/null +++ b/stdlib/test/builtin/test_issue_3908.mojo @@ -0,0 +1,28 @@ +# ===----------------------------------------------------------------------=== # +# Copyright (c) 2024, Modular Inc. All rights reserved. +# +# Licensed under the Apache License v2.0 with LLVM Exceptions: +# https://llvm.org/LICENSE.txt +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ===----------------------------------------------------------------------=== # +# RUN: echo -n | %mojo %s + +from builtin.io import _fdopen +from testing import testing + + +fn test_read_until_delimiter_raises_eof() raises: + var stdin = _fdopen["r"](0) + with testing.assert_raises(contains="EOF"): + # Assign to a variable to silence a warning about unused String value + # if an error wasn't raised. + var unused = stdin.read_until_delimiter("\n") + + +fn main() raises: + test_read_until_delimiter_raises_eof() diff --git a/stdlib/test/builtin/test_location.mojo b/stdlib/test/builtin/test_location.mojo index cc9a706249..29c7e40401 100644 --- a/stdlib/test/builtin/test_location.mojo +++ b/stdlib/test/builtin/test_location.mojo @@ -239,7 +239,7 @@ fn source_loc_with_debug() -> _SourceLocation: fn test_source_location_struct() raises: var source_loc = _SourceLocation(50, 60, "/path/to/some_file.mojo") - assert_equal(str(source_loc), "/path/to/some_file.mojo:50:60") + assert_equal(String(source_loc), "/path/to/some_file.mojo:50:60") fn main() raises: diff --git a/stdlib/test/builtin/test_math.mojo b/stdlib/test/builtin/test_math.mojo index 430d0ffde9..ec1304b926 100644 --- a/stdlib/test/builtin/test_math.mojo +++ b/stdlib/test/builtin/test_math.mojo @@ -59,6 +59,10 @@ def test_min(): assert_equal(min(i, I(-9, -6, -4, 11)), I(-10, -6, -4, 10)) assert_equal(min(i, -4), I(-10, -5, -4, -4)) + assert_equal(min(1), 1) + assert_equal(min(1, 2, 3, 4), 1) + assert_equal(min(500, 1, 2, 3, 4), 1) + def test_max(): assert_equal(-1, max(-2, -1)) @@ -79,6 +83,10 @@ def test_max(): assert_equal(max(i, I(-9, -6, -4, 11)), I(-9, -5, 5, 11)) assert_equal(max(i, -4), I(-4, -4, 5, 10)) + assert_equal(max(1), 1) + assert_equal(max(1, 2, 3, 4), 4) + assert_equal(max(-10, 2, 3, 4, -10), 4) + def test_round(): assert_equal(0, round(0.0)) diff --git a/stdlib/test/builtin/test_object.mojo b/stdlib/test/builtin/test_object.mojo index 899c75da17..848fdbbb76 100644 --- a/stdlib/test/builtin/test_object.mojo +++ b/stdlib/test/builtin/test_object.mojo @@ -191,8 +191,8 @@ def test_function_raises(a) -> object: def test_object_function(): var a: object = test_function - assert_true(str(a).startswith("Function at address 0x")) - assert_equal(str(a(1, 2)), str(3)) + assert_true(String(a).startswith("Function at address 0x")) + assert_equal(String(a(1, 2)), String(3)) a = test_function_raises with assert_raises(contains="Error from function type"): a(1) @@ -254,22 +254,22 @@ def test_matrix(): C.append(row_zero) matmul_untyped(C, A, B) - assert_equal(str(C[0]), "[5, 8, 11]") - assert_equal(str(C[1]), "[8, 14, 20]") - assert_equal(str(C[2]), "[11, 20, 29]") + assert_equal(String(C[0]), "[5, 8, 11]") + assert_equal(String(C[1]), "[8, 14, 20]") + assert_equal(String(C[2]), "[11, 20, 29]") def test_convert_to_string(): var a: object = True - assert_equal(str(a), "True") + assert_equal(String(a), "True") a = 42 - assert_equal(str(a), "42") + assert_equal(String(a), "42") a = 2.5 - assert_equal(str(a), "2.5") + assert_equal(String(a), "2.5") a = "hello" - assert_equal(str(a), "'hello'") + assert_equal(String(a), "'hello'") a = [] - assert_equal(str(a), "[]") + assert_equal(String(a), "[]") a.append(3) a.append(False) a.append(5.5) @@ -277,30 +277,32 @@ def test_convert_to_string(): b.append("foo") b.append("baz") a.append(b) - assert_equal(str(a), "[3, False, 5.5, ['foo', 'baz']]") - assert_equal(str(a[3, 1]), "'baz'") + assert_equal(String(a), "[3, False, 5.5, ['foo', 'baz']]") + assert_equal(String(a[3, 1]), "'baz'") a[3, 1] = "bar" - assert_equal(str(a[3, 1]), "'bar'") + assert_equal(String(a[3, 1]), "'bar'") var c = a + b - assert_equal(str(c), "[3, False, 5.5, ['foo', 'bar'], 'foo', 'bar']") + assert_equal(String(c), "[3, False, 5.5, ['foo', 'bar'], 'foo', 'bar']") b.append(False) - assert_equal(str(c), "[3, False, 5.5, ['foo', 'bar', False], 'foo', 'bar']") - assert_equal(str(a), "[3, False, 5.5, ['foo', 'bar', False]]") - assert_equal(str(c[3]), "['foo', 'bar', False]") + assert_equal( + String(c), "[3, False, 5.5, ['foo', 'bar', False], 'foo', 'bar']" + ) + assert_equal(String(a), "[3, False, 5.5, ['foo', 'bar', False]]") + assert_equal(String(c[3]), "['foo', 'bar', False]") b[1] = object() - assert_equal(str(a), "[3, False, 5.5, ['foo', None, False]]") + assert_equal(String(a), "[3, False, 5.5, ['foo', None, False]]") a = "abc" b = a[True] - assert_equal(str(b), "'b'") + assert_equal(String(b), "'b'") b = a[2] - assert_equal(str(b), "'c'") + assert_equal(String(b), "'c'") a = [1, 1.2, False, "true"] - assert_equal(str(a), "[1, 1.2, False, 'true']") + assert_equal(String(a), "[1, 1.2, False, 'true']") a = object(Attr("foo", 5), Attr("bar", "hello"), Attr("baz", False)) - assert_equal(str(a.bar), "'hello'") + assert_equal(String(a.bar), "'hello'") a.bar = [1, 2] - assert_equal(str(a), "{'foo' = 5, 'bar' = [1, 2], 'baz' = False}") + assert_equal(String(a), "{'foo' = 5, 'bar' = [1, 2], 'baz' = False}") assert_equal(repr(a), "{'foo' = 5, 'bar' = [1, 2], 'baz' = False}") diff --git a/stdlib/test/builtin/test_print.mojo b/stdlib/test/builtin/test_print.mojo index 4ace3a30c1..a16e54c918 100644 --- a/stdlib/test/builtin/test_print.mojo +++ b/stdlib/test/builtin/test_print.mojo @@ -24,7 +24,7 @@ from utils import IndexList, StringRef @always_inline fn _assert_error[T: Stringable](msg: T, loc: _SourceLocation) -> String: - return loc.prefix("AssertionError: " + str(msg)) + return loc.prefix("AssertionError: " + String(msg)) fn _assert_equal_error( diff --git a/stdlib/test/builtin/test_simd.mojo b/stdlib/test/builtin/test_simd.mojo index 4871fcaca2..eb92b4f886 100644 --- a/stdlib/test/builtin/test_simd.mojo +++ b/stdlib/test/builtin/test_simd.mojo @@ -69,33 +69,69 @@ def test_cast(): ) +def test_cast_init(): + # Basic casting preserves value within range + assert_equal(Int8(UInt8(127)), Int8(127)) + + # Numbers above signed max wrap to negative using two's complement + assert_equal(Int8(UInt8(128)), Int8(-128)) + assert_equal(Int8(UInt8(129)), Int8(-127)) + assert_equal(Int8(UInt8(256)), Int8(0)) + + # Negative signed convert to unsigned using two's complement + assert_equal(UInt8(Int8(-128)), UInt8(128)) + assert_equal(UInt8(Int8(-127)), UInt8(129)) + assert_equal(UInt8(Int8(-1)), UInt8(255)) + + # Truncate precision after downcast and upcast + assert_equal( + Float64(Float32(Float64(123456789.123456789))), Float64(123456792.0) + ) + + # Rightmost bits of significand become 0's on upcast + assert_equal(Float64(Float32(0.3)), Float64(0.30000001192092896)) + + # Numbers equal after truncation of float literal and cast truncation + assert_equal( + Float32(Float64(123456789.123456789)), Float32(123456789.123456789) + ) + + # Float to int/uint floors + assert_equal(Int64(Float64(42.2)), Int64(42)) + + # Pass a scalar to initialize a SIMD vector with more elements + assert_equal( + SIMD[DType.float64, 4](Float32(21.5)), SIMD[DType.float64, 4](21.5) + ) + + def test_simd_variadic(): - assert_equal(str(SIMD[DType.index, 4](52, 12, 43, 5)), "[52, 12, 43, 5]") + assert_equal(String(SIMD[DType.index, 4](52, 12, 43, 5)), "[52, 12, 43, 5]") def test_convert_simd_to_string(): var a: SIMD[DType.float32, 2] = 5 - assert_equal(str(a), "[5.0, 5.0]") + assert_equal(String(a), "[5.0, 5.0]") var b: SIMD[DType.float64, 4] = 6 - assert_equal(str(b), "[6.0, 6.0, 6.0, 6.0]") + assert_equal(String(b), "[6.0, 6.0, 6.0, 6.0]") var c: SIMD[DType.index, 8] = 7 - assert_equal(str(c), "[7, 7, 7, 7, 7, 7, 7, 7]") + assert_equal(String(c), "[7, 7, 7, 7, 7, 7, 7, 7]") # TODO: uncomment when https://github.com/modularml/mojo/issues/2353 is fixed - # assert_equal(str(UInt32(-1)), "4294967295") - assert_equal(str(UInt64(-1)), "18446744073709551615") + # assert_equal(String(UInt32(-1)), "4294967295") + assert_equal(String(UInt64(-1)), "18446744073709551615") - assert_equal(str((UInt16(32768))), "32768") - assert_equal(str((UInt16(65535))), "65535") - assert_equal(str((Int16(-2))), "-2") + assert_equal(String((UInt16(32768))), "32768") + assert_equal(String((UInt16(65535))), "65535") + assert_equal(String((Int16(-2))), "-2") - assert_equal(str(UInt64(16646288086500911323)), "16646288086500911323") + assert_equal(String(UInt64(16646288086500911323)), "16646288086500911323") # https://github.com/modularml/mojo/issues/556 assert_equal( - str( + String( SIMD[DType.uint64, 4]( 0xA0761D6478BD642F, 0xE7037ED1A0B428DB, @@ -110,7 +146,7 @@ def test_convert_simd_to_string(): ) assert_equal( - str( + String( SIMD[DType.int32, 4](-943274556, -875902520, -808530484, -741158448) ), "[-943274556, -875902520, -808530484, -741158448]", @@ -159,12 +195,12 @@ def test_issue_1625(): # FIXME (40568) should directly use the SIMD assert_equal assert_equal( - str(evens_and_odds[0]), - str(SIMD[DType.int64, 8](0, 2, 4, 6, 8, 10, 12, 14)), + String(evens_and_odds[0]), + String(SIMD[DType.int64, 8](0, 2, 4, 6, 8, 10, 12, 14)), ) assert_equal( - str(evens_and_odds[1]), - str(SIMD[DType.int64, 8](1, 3, 5, 7, 9, 11, 13, 15)), + String(evens_and_odds[1]), + String(SIMD[DType.int64, 8](1, 3, 5, 7, 9, 11, 13, 15)), ) ptr.free() @@ -269,7 +305,7 @@ def test_truthy(): @parameter fn test_dtype_unrolled[i: Int]() raises: - alias type = dtypes.get[i, DType]() + alias type = dtypes[i] test_dtype[type]() unroll[test_dtype_unrolled, dtypes.__len__()]() @@ -1016,7 +1052,8 @@ def test_join(): def test_interleave(): assert_equal( - str(Int32(0).interleave(Int32(1))), str(SIMD[DType.index, 2](0, 1)) + String(Int32(0).interleave(Int32(1))), + String(SIMD[DType.index, 2](0, 1)), ) assert_equal( @@ -1801,7 +1838,7 @@ def test_comparison(): @parameter fn test_dtype_unrolled[i: Int]() raises: - alias type = dtypes.get[i, DType]() + alias type = dtypes[i] test_dtype[type]() unroll[test_dtype_unrolled, dtypes.__len__()]() @@ -1813,9 +1850,9 @@ def test_comparison(): def test_float_conversion(): - assert_almost_equal(float(Int32(45)), 45.0) - assert_almost_equal(float(Float32(34.32)), 34.32) - assert_almost_equal(float(UInt64(36)), 36.0) + assert_almost_equal(Float64(Int32(45)), 45.0) + assert_almost_equal(Float64(Float32(34.32)), 34.32) + assert_almost_equal(Float64(UInt64(36)), 36.0) def test_reversed(): @@ -1839,6 +1876,7 @@ def main(): test_abs() test_add() test_cast() + test_cast_init() test_ceil() test_convert_simd_to_string() test_simd_repr() diff --git a/stdlib/test/builtin/test_slice.mojo b/stdlib/test/builtin/test_slice.mojo index 2208a5bf3a..da32ed9903 100644 --- a/stdlib/test/builtin/test_slice.mojo +++ b/stdlib/test/builtin/test_slice.mojo @@ -67,7 +67,7 @@ struct SliceStringable: pass fn __getitem__(self, a: Slice) -> String: - return str(a) + return String(a) def test_slice_stringable(): diff --git a/stdlib/test/builtin/test_sort.mojo b/stdlib/test/builtin/test_sort.mojo index 5c9e9a253d..edba5a03d1 100644 --- a/stdlib/test/builtin/test_sort.mojo +++ b/stdlib/test/builtin/test_sort.mojo @@ -49,14 +49,15 @@ fn random_numbers[ # sort[dtype](list) # for i in range(1, len(list)): # assert_true( -# list[i] >= list[i - 1], str(list[i - 1]) + " > " + str(list[i]) +# list[i] >= list[i - 1], String(list[i - 1]) + " > " + String(list[i]) # ) fn assert_sorted_string(mut list: List[String]) raises: for i in range(1, len(list)): assert_true( - list[i] >= list[i - 1], str(list[i - 1]) + " > " + str(list[i]) + list[i] >= list[i - 1], + String(list[i - 1]) + " > " + String(list[i]), ) @@ -64,7 +65,7 @@ fn assert_sorted[ type: ComparableCollectionElement ](mut list: List[type]) raises: for i in range(1, len(list)): - assert_true(list[i] >= list[i - 1], "error at index: " + str(i)) + assert_true(list[i] >= list[i - 1], "error at index: " + String(i)) fn test_sort_small_3() raises: @@ -522,7 +523,7 @@ def test_sort_string_small_list(): var list = random_numbers[DType.int32](10) var string_list = List[String]() for n in list: - string_list.append(str(Int(n[]))) + string_list.append(String(Int(n[]))) sort(string_list) assert_sorted_string(string_list) @@ -531,7 +532,7 @@ def test_sort_string_big_list(): var list = random_numbers[DType.int32](1000) var string_list = List[String]() for n in list: - string_list.append(str(Int(n[]))) + string_list.append(String(Int(n[]))) sort(string_list) assert_sorted_string(string_list) diff --git a/stdlib/test/builtin/test_str.mojo b/stdlib/test/builtin/test_str.mojo index 434915d8b3..594777287f 100644 --- a/stdlib/test/builtin/test_str.mojo +++ b/stdlib/test/builtin/test_str.mojo @@ -16,7 +16,7 @@ from testing import assert_equal def test_str_none(): - assert_equal(str(None), "None") + assert_equal(String(None), "None") def main(): diff --git a/stdlib/test/builtin/test_string_literal.mojo b/stdlib/test/builtin/test_string_literal.mojo index b0782481f3..24193369e0 100644 --- a/stdlib/test/builtin/test_string_literal.mojo +++ b/stdlib/test/builtin/test_string_literal.mojo @@ -66,7 +66,7 @@ def test_equality(): assert_true(StringLiteral.__ne__("five", "six")) assert_false(StringLiteral.__ne__("six", "six")) - var hello = str("hello") + var hello = String("hello") var hello_ref = hello.as_string_slice() assert_false(StringLiteral.__eq__("goodbye", hello)) @@ -481,7 +481,7 @@ def test_splitlines(): def test_float_conversion(): assert_equal(("4.5").__float__(), 4.5) - assert_equal(float("4.5"), 4.5) + assert_equal(Float64("4.5"), 4.5) with assert_raises(): _ = ("not a float").__float__() diff --git a/stdlib/test/builtin/test_uint.mojo b/stdlib/test/builtin/test_uint.mojo index 005c7ee43f..2f15a1c9ad 100644 --- a/stdlib/test/builtin/test_uint.mojo +++ b/stdlib/test/builtin/test_uint.mojo @@ -19,12 +19,12 @@ from testing import assert_equal, assert_false, assert_not_equal, assert_true def test_simple_uint(): - assert_equal(str(UInt(32)), "32") + assert_equal(String(UInt(32)), "32") - assert_equal(str(UInt(0)), "0") - assert_equal(str(UInt()), "0") + assert_equal(String(UInt(0)), "0") + assert_equal(String(UInt()), "0") - assert_equal(str(UInt(18446744073709551615)), "18446744073709551615") + assert_equal(String(UInt(18446744073709551615)), "18446744073709551615") def test_uint_representation(): diff --git a/stdlib/test/collections/string/test_inlined_string.mojo b/stdlib/test/collections/string/test_inlined_string.mojo index 027ef84fd2..672a25ecfe 100644 --- a/stdlib/test/collections/string/test_inlined_string.mojo +++ b/stdlib/test/collections/string/test_inlined_string.mojo @@ -35,7 +35,7 @@ def test_fixed_string(): var s = _FixedString[50]("hello world") # Test conversion to String - assert_equal(str(s), "hello world") + assert_equal(String(s), "hello world") # Test comparison with StringLiteral assert_equal(s, "hello world") @@ -55,7 +55,7 @@ def test_fixed_string(): var s3 = _FixedString[1]("") assert_equal(len(s3), 0) - assert_equal(str(s3), "") + assert_equal(String(s3), "") def test_fixed_string_growth(): @@ -65,7 +65,7 @@ def test_fixed_string_growth(): s1 += "hello " assert_equal(len(s1), 6) - assert_equal(str(s1), "hello ") + assert_equal(String(s1), "hello ") try: s1 += "world" @@ -80,7 +80,7 @@ def test_fixed_string_growth(): ) # s1 should be unchanged by the failed append - assert_equal(str(s1), "hello ") + assert_equal(String(s1), "hello ") def test_small_string_construction(): @@ -149,7 +149,7 @@ def test_small_string_iadd(): assert_equal(len(s1), 37) assert_true(not s1._is_small()) - assert_equal(str(s1), "Hello world, how's it going? The End.") + assert_equal(String(s1), "Hello world, how's it going? The End.") # ================================== # Test appending String to InlineString @@ -158,7 +158,7 @@ def test_small_string_iadd(): var s2 = InlineString("") s2 += String("Hello, World!") - assert_equal(str(s2), "Hello, World!") + assert_equal(String(s2), "Hello, World!") assert_equal(len(s2), 13) @@ -169,7 +169,7 @@ def test_small_string_add(): var s1: InlineString = InlineString("hello") + " world" - assert_equal(str(s1), "hello world") + assert_equal(String(s1), "hello world") assert_equal(len(s1), "11") # @@ -178,7 +178,7 @@ def test_small_string_add(): var s2: InlineString = InlineString("hello") + InlineString(" world") - assert_equal(str(s2), "hello world") + assert_equal(String(s2), "hello world") assert_equal(len(s2), "11") # @@ -187,5 +187,5 @@ def test_small_string_add(): var s3: InlineString = InlineString("hello") + String(" world") - assert_equal(str(s3), "hello world") + assert_equal(String(s3), "hello world") assert_equal(len(s3), "11") diff --git a/stdlib/test/collections/string/test_string.mojo b/stdlib/test/collections/string/test_string.mojo index aa4c130ddc..c2f563cd2e 100644 --- a/stdlib/test/collections/string/test_string.mojo +++ b/stdlib/test/collections/string/test_string.mojo @@ -24,7 +24,6 @@ from collections.string import StringSlice from collections.string.string import ( _calc_initial_buffer_size_int32, _calc_initial_buffer_size_int64, - _isspace, ) from memory import UnsafePointer from python import Python @@ -38,10 +37,10 @@ struct AString(Stringable): def test_stringable(): - assert_equal("hello", str("hello")) - assert_equal("0", str(0)) - assert_equal("AAA", str(StringRef("AAA"))) - assert_equal("a string", str(AString())) + assert_equal("hello", String("hello")) + assert_equal("0", String(0)) + assert_equal("AAA", String(StringRef("AAA"))) + assert_equal("a string", String(AString())) def test_constructors(): @@ -50,17 +49,17 @@ def test_constructors(): assert_true(not String()) # Construction from Int - var s0 = str(0) - assert_equal("0", str(0)) + var s0 = String(0) + assert_equal("0", String(0)) assert_equal(1, len(s0)) - var s1 = str(123) - assert_equal("123", str(123)) + var s1 = String(123) + assert_equal("123", String(123)) assert_equal(3, len(s1)) # Construction from StringLiteral var s2 = String("abc") - assert_equal("abc", str(s2)) + assert_equal("abc", String(s2)) assert_equal(3, len(s2)) # Construction from UnsafePointer @@ -76,15 +75,34 @@ def test_constructors(): var s4 = String(capacity=1) assert_equal(s4._buffer.capacity, 1) + # Construction from Char + var s5 = String(Char(65)) + assert_equal(s4._buffer.capacity, 1) + assert_equal(s5, "A") + def test_copy(): var s0 = String("find") - var s1 = str(s0) + var s1 = String(s0) s1._buffer[3] = ord("e") assert_equal("find", s0) assert_equal("fine", s1) +def test_len(): + # String length is in bytes, not codepoints. + var s0 = String("ನಮಸ್ಕಾರ") + + assert_equal(len(s0), 21) + assert_equal(len(s0.chars()), 7) + + # For ASCII string, the byte and codepoint length are the same: + var s1 = String("abc") + + assert_equal(len(s1), 3) + assert_equal(len(s1.chars()), 3) + + def test_equality_operators(): var s0 = String("abc") var s1 = String("def") @@ -167,7 +185,7 @@ def test_add(): var s8 = String("abc is ") var s9 = AString() - assert_equal("abc is a string", str(s8) + str(s9)) + assert_equal("abc is a string", String(s8) + String(s9)) def test_add_string_slice(): @@ -638,9 +656,9 @@ def test_split(): + String("\x1c") + String("\x1d") + String("\x1e") - + String(next_line) - + String(unicode_line_sep) - + String(unicode_paragraph_sep) + + String(buffer=next_line) + + String(buffer=unicode_line_sep) + + String(buffer=unicode_paragraph_sep) ) var s = univ_sep_var + "hello" + univ_sep_var + "world" + univ_sep_var d = s.split() @@ -800,7 +818,7 @@ def test_splitlines(): """TODO: \\u2029""" for i in List(next_line, unicode_line_sep, unicode_paragraph_sep): - u = String(i[]) + u = String(buffer=i[]) item = String("").join("hello", u, "world", u, "mojo", u, "language", u) assert_equal(item.splitlines(), hello_mojo) assert_equal( @@ -810,17 +828,6 @@ def test_splitlines(): def test_isupper(): - assert_true(isupper(ord("A"))) - assert_true(isupper(ord("B"))) - assert_true(isupper(ord("Y"))) - assert_true(isupper(ord("Z"))) - - assert_false(isupper(ord("A") - 1)) - assert_false(isupper(ord("Z") + 1)) - - assert_false(isupper(ord("!"))) - assert_false(isupper(ord("0"))) - assert_true(String("ASDG").isupper()) assert_false(String("AsDG").isupper()) assert_true(String("ABC123").isupper()) @@ -830,17 +837,6 @@ def test_isupper(): def test_islower(): - assert_true(islower(ord("a"))) - assert_true(islower(ord("b"))) - assert_true(islower(ord("y"))) - assert_true(islower(ord("z"))) - - assert_false(islower(ord("a") - 1)) - assert_false(islower(ord("z") + 1)) - - assert_false(islower(ord("!"))) - assert_false(islower(ord("0"))) - assert_true(String("asdfg").islower()) assert_false(String("asdFDg").islower()) assert_true(String("abc123").islower()) @@ -872,25 +868,7 @@ def test_upper(): def test_isspace(): - # checking true cases - assert_true(_isspace(ord(" "))) - assert_true(_isspace(ord("\n"))) - assert_true(_isspace("\n")) - assert_true(_isspace(ord("\t"))) - assert_true(_isspace(ord("\r"))) - assert_true(_isspace(ord("\v"))) - assert_true(_isspace(ord("\f"))) - - # Checking false cases - assert_false(_isspace(ord("a"))) - assert_false(_isspace("a")) - assert_false(_isspace(ord("u"))) - assert_false(_isspace(ord("s"))) - assert_false(_isspace(ord("t"))) - assert_false(_isspace(ord("i"))) - assert_false(_isspace(ord("n"))) - assert_false(_isspace(ord("z"))) - assert_false(_isspace(ord("."))) + assert_false(String("").isspace()) # test all utf8 and unicode separators # 0 is to build a String with null terminator @@ -912,9 +890,9 @@ def test_isspace(): String("\x1c"), String("\x1d"), String("\x1e"), - String(next_line), - String(unicode_line_sep), - String(unicode_paragraph_sep), + String(buffer=next_line), + String(buffer=unicode_line_sep), + String(buffer=unicode_paragraph_sep), ) for i in univ_sep_var: @@ -1151,13 +1129,29 @@ def test_indexing(): assert_equal(a[2], "c") -def test_string_iter(): +def test_string_chars_iter(): + var s = String("abc") + var iter = s.chars() + assert_equal(iter.__next__(), Char.ord("a")) + assert_equal(iter.__next__(), Char.ord("b")) + assert_equal(iter.__next__(), Char.ord("c")) + assert_equal(iter.__has_next__(), False) + + +def test_string_char_slices_iter(): + var s0 = String("abc") + var s0_iter = s0.char_slices() + assert_true(s0_iter.__next__() == "a") + assert_true(s0_iter.__next__() == "b") + assert_true(s0_iter.__next__() == "c") + assert_equal(s0_iter.__has_next__(), False) + var vs = String("123") # Borrow immutably fn conc(vs: String) -> String: var c = String("") - for v in vs: + for v in vs.char_slices(): c += v return c @@ -1168,18 +1162,18 @@ def test_string_iter(): concat += v assert_equal(321, atol(concat)) - for v in vs: + for v in vs.char_slices(): v.unsafe_ptr().origin_cast[mut=True]()[] = ord("1") # Borrow immutably - for v in vs: + for v in vs.char_slices(): concat += v assert_equal(321111, atol(concat)) var idx = -1 vs = String("mojo🔥") - var iterator = vs.__iter__() + var iterator = vs.char_slices() assert_equal(5, len(iterator)) var item = iterator.__next__() assert_equal(String("m"), String(item)) @@ -1229,7 +1223,7 @@ def test_string_iter(): var ptr = item.unsafe_ptr() var amnt_characters = 0 var byte_idx = 0 - for v in item: + for v in item.char_slices(): var byte_len = v.byte_length() for i in range(byte_len): assert_equal(ptr[byte_idx + i], v.unsafe_ptr()[i]) @@ -1439,9 +1433,6 @@ def test_format_conversion_flags(): def test_isdigit(): - assert_true(isdigit(ord("1"))) - assert_false(isdigit(ord("g"))) - assert_false(String("").isdigit()) assert_true(String("123").isdigit()) assert_false(String("asdg").isdigit()) @@ -1449,10 +1440,6 @@ def test_isdigit(): def test_isprintable(): - assert_true(isprintable(ord("a"))) - assert_false(isprintable(ord("\n"))) - assert_false(isprintable(ord("\t"))) - assert_true(String("aasdg").isprintable()) assert_false(String("aa\nae").isprintable()) assert_false(String("aa\tae").isprintable()) @@ -1480,9 +1467,9 @@ def test_float_conversion(): # This is basically just a wrapper around atof which is # more throughouly tested above assert_equal(String("4.5").__float__(), 4.5) - assert_equal(float(String("4.5")), 4.5) + assert_equal(Float64(String("4.5")), 4.5) with assert_raises(): - _ = float(String("not a float")) + _ = Float64(String("not a float")) def test_slice_contains(): @@ -1499,9 +1486,26 @@ def test_reserve(): assert_equal(s._buffer.capacity, 1) +def test_variadic_ctors(): + var s = String("message", 42, 42.2, True, sep=", ") + assert_equal(s, "message, 42, 42.2, True") + + var s2 = String.write("message", 42, 42.2, True, sep=", ") + assert_equal(s2, "message, 42, 42.2, True") + + fn forward_variadic_pack[ + *Ts: Writable, + ](*args: *Ts) -> String: + return String(args) + + var s3 = forward_variadic_pack(1, ", ", 2.0, ", ", "three") + assert_equal(s3, "1, 2.0, three") + + def main(): test_constructors() test_copy() + test_len() test_equality_operators() test_comparison_operators() test_add() @@ -1539,7 +1543,8 @@ def main(): test_intable() test_string_mul() test_indexing() - test_string_iter() + test_string_chars_iter() + test_string_char_slices_iter() test_format_args() test_format_conversion_flags() test_isdigit() @@ -1549,3 +1554,4 @@ def main(): test_center() test_float_conversion() test_slice_contains() + test_variadic_ctors() diff --git a/stdlib/test/collections/string/test_string_slice.mojo b/stdlib/test/collections/string/test_string_slice.mojo index 4b4618bd11..14dae2dde2 100644 --- a/stdlib/test/collections/string/test_string_slice.mojo +++ b/stdlib/test/collections/string/test_string_slice.mojo @@ -151,23 +151,49 @@ fn test_heap_string_from_string_slice() raises: fn test_slice_len() raises: - alias str1: StringLiteral = "12345" - alias str2: StringLiteral = "1234" - alias str3: StringLiteral = "123" - alias str4: StringLiteral = "12" - alias str5: StringLiteral = "1" - - alias slice1 = str1.as_string_slice() - alias slice2 = str2.as_string_slice() - alias slice3 = str3.as_string_slice() - alias slice4 = str4.as_string_slice() - alias slice5 = str5.as_string_slice() - - assert_equal(5, len(slice1)) - assert_equal(4, len(slice2)) - assert_equal(3, len(slice3)) - assert_equal(2, len(slice4)) - assert_equal(1, len(slice5)) + assert_equal(5, len(StringSlice("12345"))) + assert_equal(4, len(StringSlice("1234"))) + assert_equal(3, len(StringSlice("123"))) + assert_equal(2, len(StringSlice("12"))) + assert_equal(1, len(StringSlice("1"))) + assert_equal(0, len(StringSlice(""))) + + # String length is in bytes, not codepoints. + var s0 = String("ನಮಸ್ಕಾರ") + assert_equal(len(s0), 21) + assert_equal(len(s0.chars()), 7) + + # For ASCII string, the byte and codepoint length are the same: + var s1 = String("abc") + assert_equal(len(s1), 3) + assert_equal(len(s1.chars()), 3) + + +fn test_slice_char_length() raises: + var s0 = StringSlice("") + assert_equal(s0.byte_length(), 0) + assert_equal(s0.char_length(), 0) + + var s1 = StringSlice("foo") + assert_equal(s1.byte_length(), 3) + assert_equal(s1.char_length(), 3) + + # This string contains 1-, 2-, 3-, and 4-byte codepoint sequences. + var s2 = StringSlice("߷കൈ🔄!") + assert_equal(s2.byte_length(), 13) + assert_equal(s2.char_length(), 5) + + # Just a bit of Zalgo text. + var s3 = StringSlice("H̵͙̖̼̬̬̲̱͊̇̅͂̍͐͌͘͜͝") + assert_equal(s3.byte_length(), 37) + assert_equal(s3.char_length(), 19) + + # Character length is codepoints, not graphemes + # This is thumbs up + a skin tone modifier codepoint. + var s4 = StringSlice("👍🏻") + assert_equal(s4.byte_length(), 8) + assert_equal(s4.char_length(), 2) + # TODO: assert_equal(s4.grapheme_count(), 1) fn test_slice_eq() raises: @@ -205,7 +231,7 @@ fn test_slice_bool() raises: def test_slice_repr(): # Standard single-byte characters assert_equal(StringSlice.__repr__("hello"), "'hello'") - assert_equal(StringSlice.__repr__(str(0)), "'0'") + assert_equal(StringSlice.__repr__(String(0)), "'0'") assert_equal(StringSlice.__repr__("A"), "'A'") assert_equal(StringSlice.__repr__(" "), "' '") assert_equal(StringSlice.__repr__("~"), "'~'") @@ -314,34 +340,40 @@ fn test_utf8_validation() raises: def test_find(): - haystack = str("abcdefg").as_string_slice() - haystack_with_special_chars = str("abcdefg@#$").as_string_slice() - haystack_repeated_chars = str("aaaaaaaaaaaaaaaaaaaaaaaa").as_string_slice() - - assert_equal(haystack.find(str("a").as_string_slice()), 0) - assert_equal(haystack.find(str("ab").as_string_slice()), 0) - assert_equal(haystack.find(str("abc").as_string_slice()), 0) - assert_equal(haystack.find(str("bcd").as_string_slice()), 1) - assert_equal(haystack.find(str("de").as_string_slice()), 3) - assert_equal(haystack.find(str("fg").as_string_slice()), 5) - assert_equal(haystack.find(str("g").as_string_slice()), 6) - assert_equal(haystack.find(str("z").as_string_slice()), -1) - assert_equal(haystack.find(str("zzz").as_string_slice()), -1) - - assert_equal(haystack.find(str("@#$").as_string_slice()), -1) + haystack = String("abcdefg").as_string_slice() + haystack_with_special_chars = String("abcdefg@#$").as_string_slice() + haystack_repeated_chars = String( + "aaaaaaaaaaaaaaaaaaaaaaaa" + ).as_string_slice() + + assert_equal(haystack.find(String("a").as_string_slice()), 0) + assert_equal(haystack.find(String("ab").as_string_slice()), 0) + assert_equal(haystack.find(String("abc").as_string_slice()), 0) + assert_equal(haystack.find(String("bcd").as_string_slice()), 1) + assert_equal(haystack.find(String("de").as_string_slice()), 3) + assert_equal(haystack.find(String("fg").as_string_slice()), 5) + assert_equal(haystack.find(String("g").as_string_slice()), 6) + assert_equal(haystack.find(String("z").as_string_slice()), -1) + assert_equal(haystack.find(String("zzz").as_string_slice()), -1) + + assert_equal(haystack.find(String("@#$").as_string_slice()), -1) assert_equal( - haystack_with_special_chars.find(str("@#$").as_string_slice()), 7 + haystack_with_special_chars.find(String("@#$").as_string_slice()), 7 ) - assert_equal(haystack_repeated_chars.find(str("aaa").as_string_slice()), 0) - assert_equal(haystack_repeated_chars.find(str("AAa").as_string_slice()), -1) + assert_equal( + haystack_repeated_chars.find(String("aaa").as_string_slice()), 0 + ) + assert_equal( + haystack_repeated_chars.find(String("AAa").as_string_slice()), -1 + ) assert_equal( - haystack.find(str("hijklmnopqrstuvwxyz").as_string_slice()), -1 + haystack.find(String("hijklmnopqrstuvwxyz").as_string_slice()), -1 ) assert_equal( - str("").as_string_slice().find(str("abc").as_string_slice()), -1 + String("").as_string_slice().find(String("abc").as_string_slice()), -1 ) @@ -460,9 +492,10 @@ def test_count_utf8_continuation_bytes(): alias b4 = UInt8(0b1111_0000) def _test(amnt: Int, items: List[UInt8]): - p = items.unsafe_ptr() - span = Span[Byte, StaticConstantOrigin](ptr=p, length=len(items)) - assert_equal(amnt, _count_utf8_continuation_bytes(span)) + var p = items.unsafe_ptr() + var span = Span[Byte, StaticConstantOrigin](ptr=p, length=len(items)) + var str_slice = StringSlice(unsafe_from_utf8=span) + assert_equal(amnt, _count_utf8_continuation_bytes(str_slice)) _test(5, List[UInt8](c, c, c, c, c)) _test(2, List[UInt8](b2, c, b2, c, b1)) @@ -489,7 +522,7 @@ def test_splitlines(): ](l1: List[StringSlice[O1]], l2: List[String]) raises: assert_equal(len(l1), len(l2)) for i in range(len(l1)): - assert_equal(str(l1[i]), l2[i]) + assert_equal(String(l1[i]), l2[i]) # Test with no line breaks assert_equal(S("hello world").splitlines(), L("hello world")) @@ -527,11 +560,11 @@ def test_splitlines(): ) # test \x85 \u2028 \u2029 - var next_line = String(List[UInt8](0xC2, 0x85, 0)) + var next_line = String(buffer=List[UInt8](0xC2, 0x85, 0)) """TODO: \\x85""" - var unicode_line_sep = String(List[UInt8](0xE2, 0x80, 0xA8, 0)) + var unicode_line_sep = String(buffer=List[UInt8](0xE2, 0x80, 0xA8, 0)) """TODO: \\u2028""" - var unicode_paragraph_sep = String(List[UInt8](0xE2, 0x80, 0xA9, 0)) + var unicode_paragraph_sep = String(buffer=List[UInt8](0xE2, 0x80, 0xA9, 0)) """TODO: \\u2029""" for i in List(next_line, unicode_line_sep, unicode_paragraph_sep): @@ -693,12 +726,86 @@ def test_count(): assert_equal(StringSlice("aaaaaa").count("aa"), 3) +def test_chars_iter(): + # Test `for` loop iteration support + for char in StringSlice("abc").chars(): + assert_true(char in (Char.ord("a"), Char.ord("b"), Char.ord("c"))) + + # Test empty string chars + var s0 = StringSlice("") + var s0_iter = s0.chars() + + assert_false(s0_iter.__has_next__()) + assert_true(s0_iter.peek_next() is None) + assert_true(s0_iter.next() is None) + + # Test simple ASCII string chars + var s1 = StringSlice("abc") + var s1_iter = s1.chars() + + assert_equal(s1_iter.next().value(), Char.ord("a")) + assert_equal(s1_iter.next().value(), Char.ord("b")) + assert_equal(s1_iter.next().value(), Char.ord("c")) + assert_true(s1_iter.next() is None) + + # Multibyte character decoding: A visual character composed of a combining + # sequence of 2 codepoints. + var s2 = StringSlice("á") + assert_equal(s2.byte_length(), 3) + assert_equal(s2.char_length(), 2) + + var iter = s2.chars() + assert_equal(iter.__next__(), Char.ord("a")) + # U+0301 Combining Acute Accent + assert_equal(iter.__next__().to_u32(), 0x0301) + assert_equal(iter.__has_next__(), False) + + # A piece of text containing, 1-byte, 2-byte, 3-byte, and 4-byte codepoint + # sequences. + # For a visualization of this sequence, see: + # https://connorgray.com/ephemera/project-log#2025-01-13 + var s3 = StringSlice("߷കൈ🔄!") + assert_equal(s3.byte_length(), 13) + assert_equal(s3.char_length(), 5) + var s3_iter = s3.chars() + + # Iterator __len__ returns length in codepoints, not bytes. + assert_equal(s3_iter.__len__(), 5) + assert_equal(s3_iter._slice.byte_length(), 13) + assert_equal(s3_iter.__has_next__(), True) + assert_equal(s3_iter.__next__(), Char.ord("߷")) + + assert_equal(s3_iter.__len__(), 4) + assert_equal(s3_iter._slice.byte_length(), 11) + assert_equal(s3_iter.__next__(), Char.ord("ക")) + + # Combining character, visually comes first, but codepoint-wise comes + # after the character it combines with. + assert_equal(s3_iter.__len__(), 3) + assert_equal(s3_iter._slice.byte_length(), 8) + assert_equal(s3_iter.__next__(), Char.ord("ൈ")) + + assert_equal(s3_iter.__len__(), 2) + assert_equal(s3_iter._slice.byte_length(), 5) + assert_equal(s3_iter.__next__(), Char.ord("🔄")) + + assert_equal(s3_iter.__len__(), 1) + assert_equal(s3_iter._slice.byte_length(), 1) + assert_equal(s3_iter.__has_next__(), True) + assert_equal(s3_iter.__next__(), Char.ord("!")) + + assert_equal(s3_iter.__len__(), 0) + assert_equal(s3_iter._slice.byte_length(), 0) + assert_equal(s3_iter.__has_next__(), False) + + def main(): test_string_slice_layout() test_string_literal_byte_span() test_string_byte_span() test_heap_string_from_string_slice() test_slice_len() + test_slice_char_length() test_slice_eq() test_slice_bool() test_slice_repr() @@ -720,3 +827,4 @@ def main(): test_strip() test_startswith() test_endswith() + test_chars_iter() diff --git a/stdlib/test/collections/string/test_unicode.mojo b/stdlib/test/collections/string/test_unicode.mojo new file mode 100644 index 0000000000..142962118c --- /dev/null +++ b/stdlib/test/collections/string/test_unicode.mojo @@ -0,0 +1,47 @@ +# ===----------------------------------------------------------------------=== # +# Copyright (c) 2024, Modular Inc. All rights reserved. +# +# Licensed under the Apache License v2.0 with LLVM Exceptions: +# https://llvm.org/LICENSE.txt +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ===----------------------------------------------------------------------=== # +# RUN: %mojo %s + +from collections import InlineArray +from collections.string._unicode import _get_uppercase_mapping + +from testing import assert_equal + + +def test_uppercase_conversion(): + # a -> A + count1, chars1 = _get_uppercase_mapping(Char(97)).value() + assert_equal(count1, 1) + assert_equal(chars1[0], Char(65)) + assert_equal(chars1[1], Char(0)) + assert_equal(chars1[2], Char(0)) + + # ß -> SS + count2, chars2 = _get_uppercase_mapping(Char.from_u32(0xDF).value()).value() + assert_equal(count2, 2) + assert_equal(chars2[0], Char.from_u32(0x53).value()) + assert_equal(chars2[1], Char.from_u32(0x53).value()) + assert_equal(chars2[2], Char(0)) + + # ΐ -> Ϊ́ + count3, chars3 = _get_uppercase_mapping( + Char.from_u32(0x390).value() + ).value() + assert_equal(count3, 3) + assert_equal(chars3[0], Char.from_u32(0x0399).value()) + assert_equal(chars3[1], Char.from_u32(0x0308).value()) + assert_equal(chars3[2], Char.from_u32(0x0301).value()) + + +def main(): + test_uppercase_conversion() diff --git a/stdlib/test/collections/test_dict.mojo b/stdlib/test/collections/test_dict.mojo index d9252d8f3d..6fb74b3d29 100644 --- a/stdlib/test/collections/test_dict.mojo +++ b/stdlib/test/collections/test_dict.mojo @@ -78,7 +78,7 @@ def test_basic_no_copies(): def test_multiple_resizes(): var dict = Dict[String, Int]() for i in range(20): - dict["key" + str(i)] = i + 1 + dict["key" + String(i)] = i + 1 assert_equal(11, dict["key10"]) assert_equal(20, dict["key19"]) @@ -99,7 +99,7 @@ def test_bool_conversion(): def test_big_dict(): var dict = Dict[String, Int]() for i in range(2000): - dict["key" + str(i)] = i + 1 + dict["key" + String(i)] = i + 1 assert_equal(2000, len(dict)) @@ -132,7 +132,7 @@ def test_dict_string_representation_int_int(): def test_compact(): var dict = Dict[String, Int]() for i in range(20): - var key = "key" + str(i) + var key = "key" + String(i) dict[key] = i + 1 _ = dict.pop(key) assert_equal(0, len(dict)) @@ -141,10 +141,10 @@ def test_compact(): def test_compact_with_elements(): var dict = Dict[String, Int]() for i in range(5): - var key = "key" + str(i) + var key = "key" + String(i) dict[key] = i + 1 for i in range(5, 20): - var key = "key" + str(i) + var key = "key" + String(i) dict[key] = i + 1 _ = dict.pop(key) assert_equal(5, len(dict)) @@ -270,7 +270,7 @@ def test_dict_copy_add_new_item(): # test there are two copies of dict and # they don't share underlying memory copy["b"] = 2 - assert_false(str(2) in orig) + assert_false(String(2) in orig) def test_dict_copy_calls_copy_constructor(): @@ -608,14 +608,14 @@ def test_compile_time_dict(): fn _get_dict() -> Dict[String, Int32]: var res = Dict[String, Int32]() for i in range(N): - res[str(i)] = i + res[String(i)] = i return res alias my_dict = _get_dict() @parameter for i in range(N): - alias val = my_dict.get(str(i)).value() + alias val = my_dict.get(String(i)).value() assert_equal(val, i) diff --git a/stdlib/test/collections/test_inline_array.mojo b/stdlib/test/collections/test_inline_array.mojo index 29268017ba..2f311931de 100644 --- a/stdlib/test/collections/test_inline_array.mojo +++ b/stdlib/test/collections/test_inline_array.mojo @@ -187,8 +187,8 @@ def test_array_unsafe_assume_initialized_constructor_string(): def test_array_contains(): var arr = InlineArray[String, 3]("hi", "hello", "hey") - assert_true(str("hi") in arr) - assert_true(not str("greetings") in arr) + assert_true(String("hi") in arr) + assert_true(not String("greetings") in arr) def test_inline_array_runs_destructors(): diff --git a/stdlib/test/collections/test_linked_list.mojo b/stdlib/test/collections/test_linked_list.mojo new file mode 100644 index 0000000000..1375def212 --- /dev/null +++ b/stdlib/test/collections/test_linked_list.mojo @@ -0,0 +1,122 @@ +# ===----------------------------------------------------------------------=== # +# Copyright (c) 2024, Modular Inc. All rights reserved. +# +# Licensed under the Apache License v2.0 with LLVM Exceptions: +# https://llvm.org/LICENSE.txt +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ===----------------------------------------------------------------------=== # +# RUN: %mojo-no-debug %s + +from collections import LinkedList +from testing import assert_equal + + +def test_construction(): + var l1 = LinkedList[Int]() + assert_equal(len(l1), 0) + + var l2 = LinkedList[Int](1, 2, 3) + assert_equal(len(l2), 3) + assert_equal(l2[0], 1) + assert_equal(l2[1], 2) + assert_equal(l2[2], 3) + + +def test_append(): + var l1 = LinkedList[Int]() + l1.append(1) + l1.append(2) + l1.append(3) + assert_equal(len(l1), 3) + assert_equal(l1[0], 1) + assert_equal(l1[1], 2) + assert_equal(l1[2], 3) + + +def test_prepend(): + var l1 = LinkedList[Int]() + l1.prepend(1) + l1.prepend(2) + l1.prepend(3) + assert_equal(len(l1), 3) + assert_equal(l1[0], 3) + assert_equal(l1[1], 2) + assert_equal(l1[2], 1) + + +def test_copy(): + var l1 = LinkedList[Int](1, 2, 3) + var l2 = l1.copy() + assert_equal(len(l2), 3) + assert_equal(l2[0], 1) + assert_equal(l2[1], 2) + assert_equal(l2[2], 3) + + +def test_reverse(): + var l1 = LinkedList[Int](1, 2, 3) + l1.reverse() + assert_equal(len(l1), 3) + assert_equal(l1[0], 3) + assert_equal(l1[1], 2) + assert_equal(l1[2], 1) + + +def test_pop(): + var l1 = LinkedList[Int](1, 2, 3) + assert_equal(l1.pop(), 3) + assert_equal(len(l1), 2) + assert_equal(l1[0], 1) + assert_equal(l1[1], 2) + + +def test_getitem(): + var l1 = LinkedList[Int](1, 2, 3) + assert_equal(l1[0], 1) + assert_equal(l1[1], 2) + assert_equal(l1[2], 3) + + assert_equal(l1[-1], 3) + assert_equal(l1[-2], 2) + assert_equal(l1[-3], 1) + + +def test_setitem(): + var l1 = LinkedList[Int](1, 2, 3) + l1[0] = 4 + assert_equal(l1[0], 4) + assert_equal(l1[1], 2) + assert_equal(l1[2], 3) + + l1[-1] = 5 + assert_equal(l1[0], 4) + assert_equal(l1[1], 2) + assert_equal(l1[2], 5) + + +def test_str(): + var l1 = LinkedList[Int](1, 2, 3) + assert_equal(String(l1), "[1, 2, 3]") + + +def test_repr(): + var l1 = LinkedList[Int](1, 2, 3) + assert_equal(repr(l1), "LinkedList(1, 2, 3)") + + +def main(): + test_construction() + test_append() + test_prepend() + test_copy() + test_reverse() + test_pop() + test_getitem() + test_setitem() + test_str() + test_repr() diff --git a/stdlib/test/hashlib/test_ahash.mojo b/stdlib/test/hashlib/test_ahash.mojo index 9a58a753b2..4fa20d1571 100644 --- a/stdlib/test/hashlib/test_ahash.mojo +++ b/stdlib/test/hashlib/test_ahash.mojo @@ -577,7 +577,7 @@ fn gen_word_pairs[words: String = words_en]() -> List[String]: try: var list = words.split(", ") for w in list: - var w1 = str(w[].strip()) + var w1 = String(w[].strip()) for w in list: var w2 = w[].strip() result.append(w1 + " " + w2) @@ -597,7 +597,7 @@ def assert_dif_hashes(hashes: List[UInt64], upper_bound: Int): var diff = dif_bits(hashes[i], hashes[j]) assert_true( diff > upper_bound, - str("Index: {}:{}, diff between: {} and {} is: {}").format( + String("Index: {}:{}, diff between: {} and {} is: {}").format( i, j, hashes[i], hashes[j], diff ), location=__call_location(), @@ -653,7 +653,7 @@ def test_avalanche(): var diff = dif_bits(hashes0[i], hashes1[i]) assert_true( diff > 16, - str("Index: {}, diff between: {} and {} is: {}").format( + String("Index: {}, diff between: {} and {} is: {}").format( i, hashes0[i], hashes1[i], diff ), ) @@ -678,7 +678,7 @@ def test_trailing_zeros(): var diff = dif_bits(hashes0[i], hashes1[i]) assert_true( diff > 18, - str("Index: {}, diff between: {} and {} is: {}").format( + String("Index: {}, diff between: {} and {} is: {}").format( i, hashes0[i], hashes1[i], diff ), ) @@ -705,7 +705,7 @@ def assert_fill_factor[ var fill_factor = 1 - unfilled / num_buckets assert_true( fill_factor >= lower_bound, - str("Fill factor for {} is {}, provided lower boound was {}").format( + String("Fill factor for {} is {}, provided lower boound was {}").format( label, fill_factor, lower_bound ), location=__call_location(), @@ -730,7 +730,7 @@ def assert_fill_factor_old_hash[ var fill_factor = 1 - unfilled / num_buckets assert_true( fill_factor >= lower_bound, - str("Fill factor for {} is {}, provided lower bound was {}").format( + String("Fill factor for {} is {}, provided lower bound was {}").format( label, fill_factor, lower_bound ), location=__call_location(), diff --git a/stdlib/test/hashlib/test_hasher.mojo b/stdlib/test/hashlib/test_hasher.mojo index 4c10ac50a5..c60032b2e1 100644 --- a/stdlib/test/hashlib/test_hasher.mojo +++ b/stdlib/test/hashlib/test_hasher.mojo @@ -156,7 +156,7 @@ def test_with_ahasher(): def test_hash_hashable_with_hasher_types(): assert_equal(_hash_with_hasher(DType.uint64), 6529703120343940753) assert_equal(_hash_with_hasher(""), 11583516797109448887) - assert_equal(_hash_with_hasher(str("")), 11583516797109448887) + assert_equal(_hash_with_hasher(String("")), 11583516797109448887) assert_equal(_hash_with_hasher(StringRef("")), 11583516797109448887) assert_equal(_hash_with_hasher(Int(-123)), 4720193641311814362) assert_equal(_hash_with_hasher(UInt(123)), 4498397628805512285) diff --git a/stdlib/test/memory/test_memory.mojo b/stdlib/test/memory/test_memory.mojo index 26d12e1d03..48b77fdc74 100644 --- a/stdlib/test/memory/test_memory.mojo +++ b/stdlib/test/memory/test_memory.mojo @@ -198,48 +198,48 @@ def test_memcmp_extensive[ assert_equal( memcmp(ptr1, ptr1, count), 0, - "for dtype=" + str(type) + ";count=" + str(count), + "for dtype=" + String(type) + ";count=" + String(count), ) assert_equal( memcmp(ptr1, ptr2, count), -1, - "for dtype=" + str(type) + ";count=" + str(count), + "for dtype=" + String(type) + ";count=" + String(count), ) assert_equal( memcmp(ptr2, ptr1, count), 1, - "for dtype=" + str(type) + ";count=" + str(count), + "for dtype=" + String(type) + ";count=" + String(count), ) assert_equal( memcmp(dptr1, dptr1, count), 0, "for dtype=" - + str(type) + + String(type) + ";extremes=" - + str(extermes) + + String(extermes) + ";count=" - + str(count), + + String(count), ) assert_equal( memcmp(dptr1, dptr2, count), -1, "for dtype=" - + str(type) + + String(type) + ";extremes=" - + str(extermes) + + String(extermes) + ";count=" - + str(count), + + String(count), ) assert_equal( memcmp(dptr2, dptr1, count), 1, "for dtype=" - + str(type) + + String(type) + ";extremes=" - + str(extermes) + + String(extermes) + ";count=" - + str(count), + + String(count), ) ptr1.free() @@ -313,21 +313,21 @@ def test_memset(): def test_pointer_string(): var nullptr = UnsafePointer[Int]() - assert_equal(str(nullptr), "0x0") + assert_equal(String(nullptr), "0x0") var ptr = UnsafePointer[Int].alloc(1) - assert_true(str(ptr).startswith("0x")) - assert_not_equal(str(ptr), "0x0") + assert_true(String(ptr).startswith("0x")) + assert_not_equal(String(ptr), "0x0") ptr.free() def test_dtypepointer_string(): var nullptr = UnsafePointer[Float32]() - assert_equal(str(nullptr), "0x0") + assert_equal(String(nullptr), "0x0") var ptr = UnsafePointer[Float32].alloc(1) - assert_true(str(ptr).startswith("0x")) - assert_not_equal(str(ptr), "0x0") + assert_true(String(ptr).startswith("0x")) + assert_not_equal(String(ptr), "0x0") ptr.free() @@ -367,8 +367,8 @@ def test_pointer_refitem_pair(): def test_address_space_str(): - assert_equal(str(AddressSpace.GENERIC), "AddressSpace.GENERIC") - assert_equal(str(AddressSpace(17)), "AddressSpace(17)") + assert_equal(String(AddressSpace.GENERIC), "AddressSpace.GENERIC") + assert_equal(String(AddressSpace(17)), "AddressSpace(17)") def test_dtypepointer_gather(): diff --git a/stdlib/test/memory/test_reference.mojo b/stdlib/test/memory/test_reference.mojo index 6b84cbc900..746c7e8fbf 100644 --- a/stdlib/test/memory/test_reference.mojo +++ b/stdlib/test/memory/test_reference.mojo @@ -38,7 +38,7 @@ def test_equality(): def test_str(): var a = Int(42) var a_ref = Pointer.address_of(a) - assert_true(str(a_ref).startswith("0x")) + assert_true(String(a_ref).startswith("0x")) def main(): diff --git a/stdlib/test/memory/test_unsafepointer.mojo b/stdlib/test/memory/test_unsafepointer.mojo index 5e8fefc1f5..5bf8837422 100644 --- a/stdlib/test/memory/test_unsafepointer.mojo +++ b/stdlib/test/memory/test_unsafepointer.mojo @@ -142,11 +142,11 @@ def test_bitcast(): def test_unsafepointer_string(): var nullptr = UnsafePointer[Int]() - assert_equal(str(nullptr), "0x0") + assert_equal(String(nullptr), "0x0") var ptr = UnsafePointer[Int].alloc(1) - assert_true(str(ptr).startswith("0x")) - assert_not_equal(str(ptr), "0x0") + assert_true(String(ptr).startswith("0x")) + assert_not_equal(String(ptr), "0x0") ptr.free() diff --git a/stdlib/test/os/path/test_isdir.mojo b/stdlib/test/os/path/test_isdir.mojo index 74e4b3e7fc..eb87a671b3 100644 --- a/stdlib/test/os/path/test_isdir.mojo +++ b/stdlib/test/os/path/test_isdir.mojo @@ -21,6 +21,6 @@ from testing import assert_false, assert_true def main(): assert_true(isdir(Path())) - assert_true(isdir(str(cwd()))) - assert_false(isdir(str(cwd() / "nonexistent"))) + assert_true(isdir(String(cwd()))) + assert_false(isdir(String(cwd() / "nonexistent"))) assert_false(isdir(__source_location().file_name)) diff --git a/stdlib/test/os/path/test_islink.mojo b/stdlib/test/os/path/test_islink.mojo index 9e6cac2153..c8b3af2e57 100644 --- a/stdlib/test/os/path/test_islink.mojo +++ b/stdlib/test/os/path/test_islink.mojo @@ -29,4 +29,4 @@ def main(): assert_true(isdir(Path(TEMP_DIR))) assert_true(isdir(TEMP_DIR)) assert_true(islink(TEMP_DIR)) - assert_false(islink(str(Path(TEMP_DIR) / "nonexistent"))) + assert_false(islink(String(Path(TEMP_DIR) / "nonexistent"))) diff --git a/stdlib/test/os/test_mkdir_and_rmdir.mojo b/stdlib/test/os/test_mkdir_and_rmdir.mojo index f2fd2171ee..4fef85d336 100644 --- a/stdlib/test/os/test_mkdir_and_rmdir.mojo +++ b/stdlib/test/os/test_mkdir_and_rmdir.mojo @@ -43,7 +43,7 @@ fn test_mkdir_and_rmdir(path: String) raises: # verify that the test dir does not exist before starting the test assert_false( exists(path), - "Unexpected dir " + str(path) + " it should not exist", + "Unexpected dir " + String(path) + " it should not exist", ) os.mkdir(path, 0o777) @@ -63,7 +63,7 @@ fn test_mkdir_and_rmdir(path: Path) raises: # verify that the test dir does not exist before starting the test assert_false( exists(path), - "Unexpected dir " + str(path) + " it should not exist", + "Unexpected dir " + String(path) + " it should not exist", ) os.mkdir(path, 0o777) @@ -83,7 +83,7 @@ fn test_makedirs_and_removedirs(path: Path) raises: # verify that the test dir does not exist before starting the test assert_false( exists(path), - "Unexpected dir " + str(path) + " it should not exist", + "Unexpected dir " + String(path) + " it should not exist", ) os.makedirs(path, exist_ok=True) assert_true(exists(path)) diff --git a/stdlib/test/os/test_remove.mojo b/stdlib/test/os/test_remove.mojo index ccd9382ad3..5d1506abdb 100644 --- a/stdlib/test/os/test_remove.mojo +++ b/stdlib/test/os/test_remove.mojo @@ -37,7 +37,7 @@ fn create_file_and_test_delete_path[ fn test_remove() raises: var cwd_path = Path() var my_file_path = cwd_path / "my_file.test" - var my_file_name = str(my_file_path) + var my_file_name = String(my_file_path) # verify that the test file does not exist before starting the test assert_false( @@ -57,7 +57,7 @@ fn test_remove() raises: create_file_and_test_delete_path[unlink, "unlink"](my_file_path) # test with relative path - my_file_name = str(Path("my_relative_file.test")) + my_file_name = String(Path("my_relative_file.test")) create_file_and_test_delete_path[remove, "remove"](my_file_name) diff --git a/stdlib/test/os/test_stat.mojo b/stdlib/test/os/test_stat.mojo index c6be572d9c..67a738e040 100644 --- a/stdlib/test/os/test_stat.mojo +++ b/stdlib/test/os/test_stat.mojo @@ -21,5 +21,5 @@ from testing import assert_not_equal, assert_true def main(): var st = stat(__source_location().file_name) - assert_not_equal(str(st), "") + assert_not_equal(String(st), "") assert_true(S_ISREG(st.st_mode)) diff --git a/stdlib/test/pathlib/test_pathlib.mojo b/stdlib/test/pathlib/test_pathlib.mojo index d57c149e0f..e13a4abf1b 100644 --- a/stdlib/test/pathlib/test_pathlib.mojo +++ b/stdlib/test/pathlib/test_pathlib.mojo @@ -23,16 +23,16 @@ alias TEMP_FILE = env_get_string["TEMP_FILE"]() def test_cwd(): - assert_true(str(cwd()).startswith("/")) + assert_true(String(cwd()).startswith("/")) def test_path(): - assert_true(str(Path() / "some" / "dir").endswith("/some/dir")) + assert_true(String(Path() / "some" / "dir").endswith("/some/dir")) - assert_equal(str(Path("/foo") / "bar" / "jar"), "/foo/bar/jar") + assert_equal(String(Path("/foo") / "bar" / "jar"), "/foo/bar/jar") assert_equal( - str(Path("/foo" + DIR_SEPARATOR) / "bar" / "jar"), "/foo/bar/jar" + String(Path("/foo" + DIR_SEPARATOR) / "bar" / "jar"), "/foo/bar/jar" ) assert_not_equal(Path().stat().st_mode, 0) @@ -102,7 +102,7 @@ fn get_current_home() -> String: def set_home(path: Path): - path_str = str(path) + path_str = String(path) @parameter if os_is_windows(): @@ -152,7 +152,7 @@ def test_stat(): var path = Path(__source_location().file_name) var stat = path.stat() assert_equal( - str(stat), + String(stat), "os.stat_result(st_mode={}, st_ino={}, st_dev={}, st_nlink={}," " st_uid={}, st_gid={}, st_size={}, st_atime={}, st_mtime={}," " st_ctime={}, st_birthtime={}, st_blocks={}, st_blksize={}," @@ -164,10 +164,10 @@ def test_stat(): stat.st_uid, stat.st_gid, stat.st_size, - str(stat.st_atimespec), - str(stat.st_mtimespec), - str(stat.st_ctimespec), - str(stat.st_birthtimespec), + String(stat.st_atimespec), + String(stat.st_mtimespec), + String(stat.st_ctimespec), + String(stat.st_birthtimespec), stat.st_blocks, stat.st_blksize, stat.st_rdev, diff --git a/stdlib/test/python/test_ownership.mojo b/stdlib/test/python/test_ownership.mojo index ec7a71d89e..4411185e77 100644 --- a/stdlib/test/python/test_ownership.mojo +++ b/stdlib/test/python/test_ownership.mojo @@ -27,27 +27,27 @@ fn test_import(mut python: Python) raises: fn test_list(mut python: Python) raises: var b: PythonObject = Python.import_module("builtins") var my_list = PythonObject([1, 2.34, "False"]) - var py_string = str(my_list) + var py_string = String(my_list) assert_equal(py_string, "[1, 2.34, 'False']") fn test_tuple(mut python: Python) raises: var b: PythonObject = Python.import_module("builtins") var my_tuple = PythonObject((1, 2.34, "False")) - var py_string = str(my_tuple) + var py_string = String(my_tuple) assert_equal(py_string, "(1, 2.34, 'False')") fn test_call_ownership(mut python: Python) raises: var obj: PythonObject = [1, "5"] - var py_string = str(obj) + var py_string = String(obj) var string = python.__str__(py_string) assert_equal(string, "[1, '5']") fn test_getitem_ownership(mut python: Python) raises: var obj: PythonObject = [1, "5"] - var py_string = str(obj[1]) + var py_string = String(obj[1]) var string = python.__str__(py_string) assert_equal(string, "5") @@ -55,7 +55,7 @@ fn test_getitem_ownership(mut python: Python) raises: fn test_getattr_ownership(mut python: Python) raises: var my_module: PythonObject = Python.import_module("my_module") var obj = my_module.Foo(4) - var py_string = str(obj.bar) + var py_string = String(obj.bar) var string = python.__str__(py_string) assert_equal(string, "4") diff --git a/stdlib/test/python/test_python_error_handling.mojo b/stdlib/test/python/test_python_error_handling.mojo index d74ed3b429..5659f2abf9 100644 --- a/stdlib/test/python/test_python_error_handling.mojo +++ b/stdlib/test/python/test_python_error_handling.mojo @@ -21,7 +21,7 @@ fn test_python_exception_import() raises: try: var sys = Python.import_module("my_uninstalled_module") except e: - assert_equal(str(e), "No module named 'my_uninstalled_module'") + assert_equal(String(e), "No module named 'my_uninstalled_module'") fn test_python_exception_getattr() raises: @@ -31,7 +31,7 @@ fn test_python_exception_getattr() raises: var person = my_module.Person() var expec_fail = person.undefined() except e: - assert_equal(str(e), "'Person' object has no attribute 'undefined'") + assert_equal(String(e), "'Person' object has no attribute 'undefined'") fn test_python_exception_getitem() raises: @@ -39,7 +39,7 @@ fn test_python_exception_getitem() raises: var list = PythonObject([1, 2, 3]) var should_fail = list[13] except e: - assert_equal(str(e), "list index out of range") + assert_equal(String(e), "list index out of range") fn test_python_exception_call() raises: diff --git a/stdlib/test/python/test_python_interop.mojo b/stdlib/test/python/test_python_interop.mojo index 3e1a465628..80fe6ea3d9 100644 --- a/stdlib/test/python/test_python_interop.mojo +++ b/stdlib/test/python/test_python_interop.mojo @@ -20,9 +20,9 @@ from testing import assert_equal fn test_execute_python_string(mut python: Python) -> String: try: _ = Python.evaluate("print('evaluated by PyRunString')") - return str(Python.evaluate("'a' + 'b'")) + return String(Python.evaluate("'a' + 'b'")) except e: - return str(e) + return String(e) fn test_local_import(mut python: Python) -> String: @@ -31,10 +31,10 @@ fn test_local_import(mut python: Python) -> String: if my_module: var foo = my_module.Foo("apple") foo.bar = "orange" - return str(foo.bar) + return String(foo.bar) return "no module, no fruit" except e: - return str(e) + return String(e) fn test_dynamic_import(mut python: Python, times: Int = 1) -> String: @@ -51,15 +51,15 @@ def hello(name): var mod = Python.evaluate(INLINE_MODULE, file=True) for _ in range(times - 1): mod.hello("world") - return str(mod.hello("world")) + return String(mod.hello("world")) except e: - return str(e) + return String(e) fn test_call(mut python: Python) -> String: try: var my_module: PythonObject = Python.import_module("my_module") - return str( + return String( my_module.eat_it_all( "carrot", "bread", @@ -70,7 +70,7 @@ fn test_call(mut python: Python) -> String: ) ) except e: - return str(e) + return String(e) def main(): @@ -93,12 +93,12 @@ def main(): ) var obj: PythonObject = [1, 2.4, True, "False"] - assert_equal(str(obj), "[1, 2.4, True, 'False']") + assert_equal(String(obj), "[1, 2.4, True, 'False']") obj = (1, 2.4, True, "False") - assert_equal(str(obj), "(1, 2.4, True, 'False')") + assert_equal(String(obj), "(1, 2.4, True, 'False')") obj = None - assert_equal(str(obj), "None") + assert_equal(String(obj), "None") assert_equal(test_execute_python_string(python), "ab") diff --git a/stdlib/test/python/test_python_object.mojo b/stdlib/test/python/test_python_object.mojo index 50540361ef..fe15369e5f 100644 --- a/stdlib/test/python/test_python_object.mojo +++ b/stdlib/test/python/test_python_object.mojo @@ -290,7 +290,7 @@ fn test_string_conversions() raises -> None: var py = Python() var py_float = PythonObject(3.14) var type_obj = py.type(py_float) - assert_equal(str(type_obj), "") + assert_equal(String(type_obj), "") test_string_literal() test_string() @@ -334,8 +334,8 @@ def test_nested_object(): var nested_list = PythonObject([a, b]) var nested_tuple = PythonObject((a, b)) - assert_equal(str(nested_list), "[[1, 2, 3], [4, 5, 6]]") - assert_equal(str(nested_tuple), "([1, 2, 3], [4, 5, 6])") + assert_equal(String(nested_list), "[[1, 2, 3], [4, 5, 6]]") + assert_equal(String(nested_tuple), "([1, 2, 3], [4, 5, 6])") fn test_iter() raises: @@ -368,9 +368,9 @@ fn test_iter() raises: fn test_setitem() raises: var ll = PythonObject([1, 2, 3, "food"]) - assert_equal(str(ll), "[1, 2, 3, 'food']") + assert_equal(String(ll), "[1, 2, 3, 'food']") ll[1] = "nomnomnom" - assert_equal(str(ll), "[1, 'nomnomnom', 3, 'food']") + assert_equal(String(ll), "[1, 'nomnomnom', 3, 'food']") fn test_dict() raises: @@ -380,20 +380,20 @@ fn test_dict() raises: d["food"] = 123 # intentionally replace to ensure keys stay in order var dd = PythonObject(d) - assert_equal(str(dd), "{'food': 123, 'fries': 'yes'}") + assert_equal(String(dd), "{'food': 123, 'fries': 'yes'}") dd["food"] = "salad" dd[42] = Python.evaluate("[4, 2]") - assert_equal(str(dd), "{'food': 'salad', 'fries': 'yes', 42: [4, 2]}") + assert_equal(String(dd), "{'food': 'salad', 'fries': 'yes', 42: [4, 2]}") # Also test that Python.dict() creates the right object. var empty = Python.dict() - assert_equal(str(empty), "{}") + assert_equal(String(empty), "{}") fn test_none() raises: var n = Python.none() - assert_equal(str(n), "None") + assert_equal(String(n), "None") assert_true(n is None) @@ -425,9 +425,9 @@ fn test_getitem_raises() raises: _ = d[0, 0] with_get = custom_indexable.WithGetItem() - assert_equal("Key: 0", str(with_get[0])) - assert_equal("Keys: 0, 0", str(with_get[0, 0])) - assert_equal("Keys: 0, 0, 0", str(with_get[0, 0, 0])) + assert_equal("Key: 0", String(with_get[0])) + assert_equal("Keys: 0, 0", String(with_get[0, 0])) + assert_equal("Keys: 0, 0, 0", String(with_get[0, 0, 0])) var without_get = custom_indexable.Simple() with assert_raises(contains="'Simple' object is not subscriptable"): @@ -441,7 +441,7 @@ fn test_getitem_raises() raises: _ = with_get_exception[1] with_2d = custom_indexable.With2DGetItem() - assert_equal("[1, 2, 3]", str(with_2d[0])) + assert_equal("[1, 2, 3]", String(with_2d[0])) assert_equal(2, with_2d[0, 1]) assert_equal(6, with_2d[1, 2]) @@ -487,43 +487,43 @@ def test_setitem_raises(): fn test_py_slice() raises: custom_indexable = Python.import_module("custom_indexable") var a = PythonObject([1, 2, 3, 4, 5]) - assert_equal("[2, 3]", str(a[1:3])) - assert_equal("[1, 2, 3, 4, 5]", str(a[:])) - assert_equal("[1, 2, 3]", str(a[:3])) - assert_equal("[3, 4, 5]", str(a[2:])) - assert_equal("[1, 3, 5]", str(a[::2])) - assert_equal("[2, 4]", str(a[1::2])) - assert_equal("[4, 5]", str(a[-2:])) - assert_equal("[1, 2, 3]", str(a[:-2])) - assert_equal("[5, 4, 3, 2, 1]", str(a[::-1])) - assert_equal("[1, 2, 3, 4, 5]", str(a[-10:10])) # out of bounds - assert_equal("[1, 2, 3, 4, 5]", str(a[::])) - assert_equal("[1, 2, 3, 4, 5]", str(a[:100])) - assert_equal("[]", str(a[5:])) - assert_equal("[5, 4, 3, 2]", str(a[:-5:-1])) + assert_equal("[2, 3]", String(a[1:3])) + assert_equal("[1, 2, 3, 4, 5]", String(a[:])) + assert_equal("[1, 2, 3]", String(a[:3])) + assert_equal("[3, 4, 5]", String(a[2:])) + assert_equal("[1, 3, 5]", String(a[::2])) + assert_equal("[2, 4]", String(a[1::2])) + assert_equal("[4, 5]", String(a[-2:])) + assert_equal("[1, 2, 3]", String(a[:-2])) + assert_equal("[5, 4, 3, 2, 1]", String(a[::-1])) + assert_equal("[1, 2, 3, 4, 5]", String(a[-10:10])) # out of bounds + assert_equal("[1, 2, 3, 4, 5]", String(a[::])) + assert_equal("[1, 2, 3, 4, 5]", String(a[:100])) + assert_equal("[]", String(a[5:])) + assert_equal("[5, 4, 3, 2]", String(a[:-5:-1])) var b = Python.evaluate("[i for i in range(1000)]") - assert_equal("[0, 250, 500, 750]", str(b[::250])) + assert_equal("[0, 250, 500, 750]", String(b[::250])) with assert_raises(contains="slice step cannot be zero"): _ = b[::0] # Negative cases such as `b[1.3:10]` or `b["1":10]` are handled by parser # which would normally throw a TypeError in Python var s = PythonObject("Hello, World!") - assert_equal("Hello", str(s[:5])) - assert_equal("World!", str(s[7:])) - assert_equal("!dlroW ,olleH", str(s[::-1])) - assert_equal("Hello, World!", str(s[:])) - assert_equal("Hlo ol!", str(s[::2])) - assert_equal("Hlo ol!", str(s[None:None:2])) + assert_equal("Hello", String(s[:5])) + assert_equal("World!", String(s[7:])) + assert_equal("!dlroW ,olleH", String(s[::-1])) + assert_equal("Hello, World!", String(s[:])) + assert_equal("Hlo ol!", String(s[::2])) + assert_equal("Hlo ol!", String(s[None:None:2])) var t = PythonObject((1, 2, 3, 4, 5)) - assert_equal("(2, 3, 4)", str(t[1:4])) - assert_equal("(4, 3, 2)", str(t[3:0:-1])) + assert_equal("(2, 3, 4)", String(t[1:4])) + assert_equal("(4, 3, 2)", String(t[3:0:-1])) var empty = PythonObject([]) - assert_equal("[]", str(empty[:])) - assert_equal("[]", str(empty[1:2:3])) + assert_equal("[]", String(empty[:])) + assert_equal("[]", String(empty[1:2:3])) # TODO: enable this test. Currently it fails with error: unhashable type: 'slice' # var d = Python.dict() @@ -533,31 +533,31 @@ fn test_py_slice() raises: # _ = d[1:3] var custom = custom_indexable.Sliceable() - assert_equal("slice(1, 3, None)", str(custom[1:3])) + assert_equal("slice(1, 3, None)", String(custom[1:3])) var i = PythonObject(1) with assert_raises(contains="'int' object is not subscriptable"): _ = i[0:1] with_2d = custom_indexable.With2DGetItem() - assert_equal("[1, 2]", str(with_2d[0, PythonObject(Slice(0, 2))])) - assert_equal("[1, 2]", str(with_2d[0][0:2])) + assert_equal("[1, 2]", String(with_2d[0, PythonObject(Slice(0, 2))])) + assert_equal("[1, 2]", String(with_2d[0][0:2])) - assert_equal("[4, 5, 6]", str(with_2d[PythonObject(Slice(0, 2)), 1])) - assert_equal("[4, 5, 6]", str(with_2d[0:2][1])) + assert_equal("[4, 5, 6]", String(with_2d[PythonObject(Slice(0, 2)), 1])) + assert_equal("[4, 5, 6]", String(with_2d[0:2][1])) assert_equal( - "[[1, 2, 3], [4, 5, 6]]", str(with_2d[PythonObject(Slice(0, 2))]) + "[[1, 2, 3], [4, 5, 6]]", String(with_2d[PythonObject(Slice(0, 2))]) ) - assert_equal("[[1, 2, 3], [4, 5, 6]]", str(with_2d[0:2])) - assert_equal("[[1, 3], [4, 6]]", str(with_2d[0:2, ::2])) + assert_equal("[[1, 2, 3], [4, 5, 6]]", String(with_2d[0:2])) + assert_equal("[[1, 3], [4, 6]]", String(with_2d[0:2, ::2])) assert_equal( - "[6, 5, 4]", str(with_2d[1, PythonObject(Slice(None, None, -1))]) + "[6, 5, 4]", String(with_2d[1, PythonObject(Slice(None, None, -1))]) ) - assert_equal("[6, 5, 4]", str(with_2d[1][::-1])) + assert_equal("[6, 5, 4]", String(with_2d[1][::-1])) - assert_equal("[7, 9]", str(with_2d[2][::2])) + assert_equal("[7, 9]", String(with_2d[2][::2])) with assert_raises(contains="list index out of range"): _ = with_2d[0:1][4] diff --git a/stdlib/test/python/test_python_to_mojo.mojo b/stdlib/test/python/test_python_to_mojo.mojo index d621943f9c..a8dc7aca97 100644 --- a/stdlib/test/python/test_python_to_mojo.mojo +++ b/stdlib/test/python/test_python_to_mojo.mojo @@ -21,7 +21,7 @@ fn test_string_to_python_to_mojo(mut python: Python) raises: var py_string = PythonObject("mojo") var py_string_capitalized = py_string.capitalize() - var cap_mojo_string = str(py_string_capitalized) + var cap_mojo_string = String(py_string_capitalized) assert_equal(cap_mojo_string, "Mojo") @@ -54,7 +54,7 @@ fn test_range() raises: fn test_python_to_string() raises: var os = Python.import_module("os") - assert_true(str(os.environ).startswith("environ({")) + assert_true(String(os.environ).startswith("environ({")) def main(): diff --git a/stdlib/test/random/test_random.mojo b/stdlib/test/random/test_random.mojo index 0a90b5ae89..384a2f4ed6 100644 --- a/stdlib/test/random/test_random.mojo +++ b/stdlib/test/random/test_random.mojo @@ -29,24 +29,24 @@ def test_random(): var random_float = random_float64(0, 1) assert_true( random_float >= 0, - "Value " + str(random_float) + " is not above or equal to 0", + "Value " + String(random_float) + " is not above or equal to 0", ) assert_true( random_float <= 1, - "Value " + str(random_float) + " is not below or equal to 1", + "Value " + String(random_float) + " is not below or equal to 1", ) var random_signed = random_si64(-255, 255) assert_true( random_signed >= -255, "Signed value " - + str(random_signed) + + String(random_signed) + " is not above or equal to -255", ) assert_true( random_signed <= 255, "Signed value " - + str(random_signed) + + String(random_signed) + " is not below or equal to 255", ) @@ -54,13 +54,13 @@ def test_random(): assert_true( random_unsigned >= 0, "Unsigned value " - + str(random_unsigned) + + String(random_unsigned) + " is not above or equal to 0", ) assert_true( random_unsigned <= 255, "Unsigned value " - + str(random_unsigned) + + String(random_unsigned) + " is not below or equal to 255", ) @@ -135,14 +135,14 @@ def test_shuffle(): var i = L_l_s() var j = L_l_s() for x in range(10): - i.append(L_s(str(x), str(x + 1), str(x + 3))) - j.append(L_s(str(x), str(x + 1), str(x + 3))) + i.append(L_s(String(x), String(x + 1), String(x + 3))) + j.append(L_s(String(x), String(x + 1), String(x + 3))) shuffle(i) # TODO: Uncomment when possible # assert_true(g != h) assert_equal(len(i), len(j)) for x in range(10): - var target: List[String] = L_s(str(x), str(x + 1), str(x + 3)) + var target: List[String] = L_s(String(x), String(x + 1), String(x + 3)) var found = False for y in range(len(i)): if j[y] == target: diff --git a/stdlib/test/tempfile/test_tempfile.mojo b/stdlib/test/tempfile/test_tempfile.mojo index d84ac25554..6f8fcf8b17 100644 --- a/stdlib/test/tempfile/test_tempfile.mojo +++ b/stdlib/test/tempfile/test_tempfile.mojo @@ -101,7 +101,7 @@ def _set_up_gettempdir_test( os.rmdir(dir_with_writing_access) raise Error( "Failed to setup test, couldn't create " - + str(dir_without_writing_access) + + String(dir_without_writing_access) ) @@ -109,7 +109,7 @@ def test_gettempdir(): var non_existing_dir = Path() / "non_existing_dir" assert_false( exists(non_existing_dir), - "Unexpected dir" + str(non_existing_dir), + "Unexpected dir" + String(non_existing_dir), ) var dir_without_writing_access = Path() / "dir_without_writing_access" var dir_with_writing_access = Path() / "dir_with_writing_access" @@ -119,7 +119,7 @@ def test_gettempdir(): var vars_to_set = Dict[String, String]() # test TMPDIR is used first - vars_to_set["TMPDIR"] = str(dir_with_writing_access) + vars_to_set["TMPDIR"] = String(dir_with_writing_access) with TempEnvWithCleanup( vars_to_set, _clean_up_gettempdir_test, @@ -128,13 +128,13 @@ def test_gettempdir(): assert_true(tmpdir_result, "Failed to get temporary directory") assert_equal( tmpdir_result.value(), - str(dir_with_writing_access), - "expected to get:" + str(dir_with_writing_access), + String(dir_with_writing_access), + "expected to get:" + String(dir_with_writing_access), ) # test gettempdir falls back to TEMP - vars_to_set["TMPDIR"] = str(non_existing_dir) - vars_to_set["TEMP"] = str(dir_with_writing_access) + vars_to_set["TMPDIR"] = String(non_existing_dir) + vars_to_set["TEMP"] = String(dir_with_writing_access) with TempEnvWithCleanup( vars_to_set, _clean_up_gettempdir_test, @@ -143,14 +143,14 @@ def test_gettempdir(): assert_true(tmpdir_result, "Failed to get temporary directory") assert_equal( tmpdir_result.value(), - str(dir_with_writing_access), - "expected to get:" + str(dir_with_writing_access), + String(dir_with_writing_access), + "expected to get:" + String(dir_with_writing_access), ) # test gettempdir falls back to TMP - vars_to_set["TMPDIR"] = str(non_existing_dir) - vars_to_set["TEMP"] = str(non_existing_dir) - vars_to_set["TMP"] = str(dir_with_writing_access) + vars_to_set["TMPDIR"] = String(non_existing_dir) + vars_to_set["TEMP"] = String(non_existing_dir) + vars_to_set["TMP"] = String(dir_with_writing_access) with TempEnvWithCleanup( vars_to_set, _clean_up_gettempdir_test, @@ -159,8 +159,8 @@ def test_gettempdir(): assert_true(tmpdir_result, "Failed to get temporary directory") assert_equal( tmpdir_result.value(), - str(dir_with_writing_access), - "expected to get:" + str(dir_with_writing_access), + String(dir_with_writing_access), + "expected to get:" + String(dir_with_writing_access), ) _clean_up_gettempdir_test() diff --git a/stdlib/test/testing/test_assert_raises.mojo b/stdlib/test/testing/test_assert_raises.mojo index 4dda27ca87..50c1c17326 100644 --- a/stdlib/test/testing/test_assert_raises.mojo +++ b/stdlib/test/testing/test_assert_raises.mojo @@ -39,9 +39,9 @@ fn test_assert_raises_no_error() raises: pass raise Error("This should not be reachable.") except e: - assert_true(str(e).startswith("AssertionError: Didn't raise")) - assert_true(str(e).endswith(":27")) # col 27 - assert_true(str(e) != "This should not be reachable.") + assert_true(String(e).startswith("AssertionError: Didn't raise")) + assert_true(String(e).endswith(":27")) # col 27 + assert_true(String(e) != "This should not be reachable.") fn test_assert_raises_no_match() raises: @@ -50,7 +50,7 @@ fn test_assert_raises_no_match() raises: raise "OtherError" raise Error("This should not be reachable.") except e: - assert_equal(str(e), "OtherError") + assert_equal(String(e), "OtherError") def main(): diff --git a/stdlib/test/testing/test_assertion.mojo b/stdlib/test/testing/test_assertion.mojo index c9aaaf6d9d..c7153040fb 100644 --- a/stdlib/test/testing/test_assertion.mojo +++ b/stdlib/test/testing/test_assertion.mojo @@ -35,22 +35,22 @@ def test_assert_messages(): try: assert_true(False) except e: - assert_true(assertion in str(e) and assertion_error in str(e)) + assert_true(assertion in String(e) and assertion_error in String(e)) try: assert_false(True) except e: - assert_true(assertion in str(e) and assertion_error in str(e)) + assert_true(assertion in String(e) and assertion_error in String(e)) try: assert_equal(1, 0) except e: - assert_true(assertion in str(e) and assertion_error in str(e)) + assert_true(assertion in String(e) and assertion_error in String(e)) try: assert_not_equal(0, 0) except e: - assert_true(assertion in str(e) and assertion_error in str(e)) + assert_true(assertion in String(e) and assertion_error in String(e)) @value @@ -236,8 +236,8 @@ def test_assert_custom_location(): location=location, ) except e: - assert_true(str(location) in str(e)) - assert_true("always_false" in str(e)) + assert_true(String(location) in String(e)) + assert_true("always_false" in String(e)) def test_assert_equal_stringslice(): diff --git a/stdlib/test/utils/test_index.mojo b/stdlib/test/utils/test_index.mojo index 500fdcf259..ff5236890c 100644 --- a/stdlib/test/utils/test_index.mojo +++ b/stdlib/test/utils/test_index.mojo @@ -20,38 +20,38 @@ from utils import Index, IndexList def test_basics(): assert_equal(IndexList[2](1, 2), IndexList[2](1, 2)) assert_equal(IndexList[3](1, 2, 3), IndexList[3](1, 2, 3)) - assert_equal(str(IndexList[3](1, 2, 3)), "(1, 2, 3)") + assert_equal(String(IndexList[3](1, 2, 3)), "(1, 2, 3)") assert_equal(IndexList[3](1, 2, 3)[2], 3) def test_cast(): assert_equal( - str(IndexList[1](1)), + String(IndexList[1](1)), "(1,)", ) assert_equal( - str(IndexList[2](1, 2).cast[DType.int32]()), + String(IndexList[2](1, 2).cast[DType.int32]()), "(1, 2)", ) assert_equal( - str(IndexList[2, element_bitwidth=64](1, 2).cast[DType.int32]()), + String(IndexList[2, element_bitwidth=64](1, 2).cast[DType.int32]()), "(1, 2)", ) assert_equal( - str(IndexList[2, element_bitwidth=32](1, 2).cast[DType.int64]()), + String(IndexList[2, element_bitwidth=32](1, 2).cast[DType.int64]()), "(1, 2)", ) assert_equal( - str( + String( IndexList[2, element_bitwidth=32](1, -2).cast[element_bitwidth=64]() ), "(1, -2)", ) assert_equal( - str(IndexList[2, element_bitwidth=32](1, 2)), + String(IndexList[2, element_bitwidth=32](1, 2)), "(1, 2)", ) - alias s = str( + alias s = String( IndexList[2, element_bitwidth=32](1, 2).cast[ element_bitwidth=64, unsigned=True ]() @@ -61,10 +61,10 @@ def test_cast(): def test_index(): - assert_equal(str(Index[element_bitwidth=64](1, 2, 3)), "(1, 2, 3)") - assert_equal(str(Index[element_bitwidth=32](1, 2, 3)), "(1, 2, 3)") + assert_equal(String(Index[element_bitwidth=64](1, 2, 3)), "(1, 2, 3)") + assert_equal(String(Index[element_bitwidth=32](1, 2, 3)), "(1, 2, 3)") assert_equal( - str(Index[element_bitwidth=32, unsigned=True](1, 2, 3)), "(1, 2, 3)" + String(Index[element_bitwidth=32, unsigned=True](1, 2, 3)), "(1, 2, 3)" ) diff --git a/stdlib/test/utils/test_tuple.mojo b/stdlib/test/utils/test_tuple.mojo index 0748552be0..1feb95f50a 100644 --- a/stdlib/test/utils/test_tuple.mojo +++ b/stdlib/test/utils/test_tuple.mojo @@ -20,21 +20,21 @@ from utils import IndexList, StaticTuple def test_static_int_tuple(): - assert_equal(str(IndexList[1](1)), "(1,)") + assert_equal(String(IndexList[1](1)), "(1,)") - assert_equal(str(IndexList[3](2)), "(2, 2, 2)") + assert_equal(String(IndexList[3](2)), "(2, 2, 2)") assert_equal( - str(IndexList[3](1, 2, 3) * IndexList[3](4, 5, 6)), + String(IndexList[3](1, 2, 3) * IndexList[3](4, 5, 6)), "(4, 10, 18)", ) assert_equal( - str(IndexList[4](1, 2, 3, 4) - IndexList[4](4, 5, 6, 7)), + String(IndexList[4](1, 2, 3, 4) - IndexList[4](4, 5, 6, 7)), "(-3, -3, -3, -3)", ) - assert_equal(str(IndexList[2](10, 11) // IndexList[2](3, 4)), "(3, 2)") + assert_equal(String(IndexList[2](10, 11) // IndexList[2](3, 4)), "(3, 2)") # Note: index comparison is intended for access bound checking, which is # usually all-element semantic, i.e. true if true for all positions. @@ -44,9 +44,9 @@ def test_static_int_tuple(): assert_equal(len(IndexList[4](3, 5, -1, -2)), 4) - assert_equal(str(IndexList[2]((1, 2))), "(1, 2)") + assert_equal(String(IndexList[2]((1, 2))), "(1, 2)") - assert_equal(str(IndexList[4]((1, 2, 3, 4))), "(1, 2, 3, 4)") + assert_equal(String(IndexList[4]((1, 2, 3, 4))), "(1, 2, 3, 4)") def test_tuple_literal(): diff --git a/stdlib/test/utils/test_write.mojo b/stdlib/test/utils/test_write.mojo index 579b573892..77bb3fb5a9 100644 --- a/stdlib/test/utils/test_write.mojo +++ b/stdlib/test/utils/test_write.mojo @@ -70,13 +70,13 @@ fn test_string_format_seq() raises: fn test_stringable_based_on_format() raises: - assert_equal(str(Point(10, 11)), "Point(10, 11)") + assert_equal(String(Point(10, 11)), "Point(10, 11)") fn test_writer_of_fixed_string() raises: var s1 = _FixedString[100]() s1.write("Hello, World!") - assert_equal(str(s1), "Hello, World!") + assert_equal(String(s1), "Hello, World!") fn test_write_int_padded() raises: