From 96599ca3a51474f243922b83f56e526366215b2c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 21 Dec 2024 03:44:03 +0000 Subject: [PATCH] Update rustdoc 2024-12-21 162e49cf8a8cf944cded7f775d6f78afe4a89837 --- doc/crates.js | 4 +- .../__staged/builder/macro.q!.html | 0 doc/hydro_lang/__staged/builder/macro.q.html | 11 + .../__staged/deploy_runtime/macro.q!.html | 0 .../__staged/deploy_runtime/macro.q.html | 11 + .../__staged/location/macro.q!.html | 0 doc/hydro_lang/__staged/location/macro.q.html | 11 + .../__staged/location/tick/macro.q!.html | 0 .../__staged/location/tick/macro.q.html | 11 + .../__staged/macro.q!.html | 0 doc/hydro_lang/__staged/macro.q.html | 11 + .../__staged/optional/macro.q!.html | 0 doc/hydro_lang/__staged/optional/macro.q.html | 11 + .../__staged/rewrites/profiler/macro.q!.html | 0 .../__staged/rewrites/profiler/macro.q.html | 11 + .../rewrites/profiler/myself/macro.q!.html | 0 .../rewrites/profiler/myself/macro.q.html | 11 + .../rewrites/properties/macro.q!.html | 0 .../__staged/rewrites/properties/macro.q.html | 11 + .../__staged/singleton/macro.q!.html | 0 .../__staged/singleton/macro.q.html | 11 + .../__staged/stream/macro.q!.html | 0 doc/hydro_lang/__staged/stream/macro.q.html | 11 + doc/hydro_lang/all.html | 1 + .../boundedness/enum.Bounded.html} | 8 +- .../boundedness/enum.Unbounded.html} | 8 +- doc/hydro_lang/boundedness/index.html | 3 + .../boundedness/sidebar-items.js | 0 doc/hydro_lang/builder/built/index.html | 1 + .../builder/built/sidebar-items.js | 0 .../builder/built/struct.BuiltFlow.html | 36 +-- doc/hydro_lang/builder/compiled/index.html | 1 + .../builder/compiled/sidebar-items.js | 0 .../builder/compiled/struct.CompiledFlow.html | 10 +- .../compiled/struct.CompiledFlowWithId.html | 6 +- .../builder/constant.FLOW_USED_MESSAGE.html | 1 + doc/hydro_lang/builder/deploy/index.html | 1 + .../builder/deploy/sidebar-items.js | 0 .../builder/deploy/struct.DeployFlow.html | 28 +- .../builder/deploy/struct.DeployResult.html | 50 +-- doc/hydro_lang/builder/index.html | 1 + .../builder/sidebar-items.js | 0 .../builder/struct.FlowBuilder.html | 36 +-- .../builder/struct.FlowStateInner.html} | 4 +- doc/hydro_lang/builder/type.FlowState.html | 1 + .../cycle/enum.ForwardRefMarker.html | 23 ++ .../cycle/enum.TickCycleMarker.html | 4 +- doc/hydro_lang/cycle/index.html | 2 + .../cycle/sidebar-items.js | 0 .../cycle/struct.ForwardRef.html | 12 +- .../cycle/struct.TickCycle.html | 8 +- .../cycle/trait.CycleCollection.html | 6 + .../trait.CycleCollectionWithInitial.html | 10 + doc/hydro_lang/cycle/trait.CycleComplete.html | 4 + doc/hydro_lang/cycle/trait.DeferTick.html | 4 + .../deploy/in_memory_graph/index.html | 1 + .../deploy/in_memory_graph/sidebar-items.js | 0 .../in_memory_graph/struct.MultiGraph.html | 23 ++ .../in_memory_graph/struct.MultiNode.html | 10 +- .../in_memory_graph/struct.SingleNode.html | 10 +- .../struct.SingleProcessGraph.html | 23 ++ doc/hydro_lang/deploy/index.html | 1 + .../deploy/macro_runtime/index.html | 1 + .../deploy/macro_runtime/sidebar-items.js | 0 .../macro_runtime/struct.DeployRuntime.html | 114 +++++++ .../struct.DeployRuntimeCluster.html | 10 +- .../struct.DeployRuntimeNode.html | 20 +- .../deploy/sidebar-items.js | 0 doc/hydro_lang/deploy/trait.ClusterSpec.html | 4 + doc/hydro_lang/deploy/trait.Deploy.html | 178 +++++++++++ doc/hydro_lang/deploy/trait.ExternalSpec.html | 4 + .../deploy/trait.IntoProcessSpec.html | 6 + doc/hydro_lang/deploy/trait.LocalDeploy.html | 12 + doc/hydro_lang/deploy/trait.Node.html | 22 ++ doc/hydro_lang/deploy/trait.ProcessSpec.html | 4 + .../deploy/trait.RegisterPort.html | 16 +- .../deploy_runtime/fn.cluster_members.html | 4 + .../deploy_runtime/fn.cluster_self_id.html | 3 + .../deploy_runtime/fn.deploy_e2o.html | 5 + .../deploy_runtime/fn.deploy_m2m.html | 5 + .../deploy_runtime/fn.deploy_m2o.html | 5 + .../deploy_runtime/fn.deploy_o2e.html | 5 + .../deploy_runtime/fn.deploy_o2m.html | 5 + .../deploy_runtime/fn.deploy_o2o.html | 5 + doc/hydro_lang/deploy_runtime/index.html | 1 + .../deploy_runtime/sidebar-items.js | 0 .../struct.HydroflowPlusMeta.html | 10 +- doc/hydro_lang/index.html | 1 + .../ir/enum.DebugInstantiate.html | 6 +- .../ir/enum.HydroLeaf.html} | 42 +-- doc/hydro_lang/ir/enum.HydroNode.html | 123 ++++++++ .../ir/enum.HydroSource.html} | 12 +- doc/hydro_lang/ir/fn.dbg_dedup_tee.html | 1 + doc/hydro_lang/ir/index.html | 4 + doc/hydro_lang/ir/sidebar-items.js | 1 + .../ir/struct.DebugExpr.html | 6 +- .../ir/struct.TeeNode.html | 4 +- doc/hydro_lang/ir/type.SeenTees.html | 1 + doc/hydro_lang/location/can_send/index.html | 1 + .../location/can_send/sidebar-items.js | 0 .../location/can_send/trait.CanSend.html | 11 + .../location/cluster/cluster_id/index.html | 1 + .../cluster/cluster_id/sidebar-items.js | 0 .../cluster/cluster_id/struct.ClusterId.html | 26 +- doc/hydro_lang/location/cluster/index.html | 2 + .../location/cluster/sidebar-items.js | 0 .../cluster/static.CLUSTER_SELF_ID.html | 3 + .../location/cluster/struct.Cluster.html | 44 +-- .../location/cluster/struct.ClusterIds.html | 16 +- .../cluster/struct.ClusterSelfId.html | 12 +- .../location/cluster/trait.IsCluster.html | 3 + .../location/enum.LocationId.html | 10 +- .../location/external_process/index.html | 1 + .../external_process/sidebar-items.js | 0 .../struct.ExternalBincodeSink.html | 12 +- .../struct.ExternalBincodeStream.html | 12 +- .../struct.ExternalBytesPort.html} | 4 +- .../struct.ExternalProcess.html | 12 +- .../location/fn.check_matching_location.html | 1 + doc/hydro_lang/location/index.html | 1 + doc/hydro_lang/location/process/index.html | 1 + .../location/process/sidebar-items.js | 0 .../location/process/struct.Process.html | 46 +-- .../location/sidebar-items.js | 0 doc/hydro_lang/location/tick/index.html | 1 + .../location/tick/sidebar-items.js | 0 .../location/tick/struct.Tick.html | 44 +-- .../location/tick/struct.Timestamped.html | 46 +-- .../location/tick/trait.NoTick.html | 1 + .../location/tick/trait.NoTimestamp.html | 1 + doc/hydro_lang/location/trait.Location.html | 86 ++++++ .../macro.q!.html | 0 doc/hydro_lang/macro.q.html | 7 + doc/hydro_lang/optional/index.html | 1 + .../optional/sidebar-items.js | 0 doc/hydro_lang/optional/struct.Optional.html | 82 +++++ doc/hydro_lang/rewrites/index.html | 1 + .../persist_pullup/fn.persist_pullup.html | 1 + .../rewrites/persist_pullup/index.html | 1 + .../rewrites/persist_pullup/sidebar-items.js | 0 .../profiler/fn.increment_counter.html | 1 + .../rewrites/profiler/fn.profiling.html | 6 + doc/hydro_lang/rewrites/profiler/index.html | 1 + .../rewrites/profiler/sidebar-items.js | 0 .../properties/fn.properties_optimize.html | 4 + doc/hydro_lang/rewrites/properties/index.html | 1 + .../rewrites/properties/sidebar-items.js | 0 .../properties/struct.PropertyDatabase.html | 10 +- .../rewrites/sidebar-items.js | 0 doc/hydro_lang/runtime_context/index.html | 1 + .../runtime_context/sidebar-items.js | 0 .../static.RUNTIME_CONTEXT.html | 1 + .../struct.RuntimeContext.html | 4 +- .../sidebar-items.js | 0 doc/hydro_lang/singleton/index.html | 1 + .../singleton/sidebar-items.js | 0 .../singleton/struct.Singleton.html | 77 +++++ doc/hydro_lang/singleton/trait.ZipResult.html | 9 + doc/hydro_lang/stream/index.html | 4 + .../stream/sidebar-items.js | 0 .../stream/struct.NoOrder.html | 6 +- doc/hydro_lang/stream/struct.Stream.html | 264 ++++++++++++++++ .../stream/struct.TotalOrder.html | 6 +- doc/hydro_lang/stream/trait.MinOrder.html | 5 + doc/hydro_std/all.html | 1 + doc/hydro_std/index.html | 1 + doc/hydro_std/quorum/fn.collect_quorum.html | 5 + .../fn.collect_quorum_with_response.html | 5 + doc/hydro_std/quorum/index.html | 1 + .../quorum/sidebar-items.js | 0 .../request_response/fn.join_responses.html | 10 + doc/hydro_std/request_response/index.html | 2 + .../request_response/sidebar-items.js | 0 .../sidebar-items.js | 0 doc/hydro_test/all.html | 1 + .../cluster/compute_pi/fn.compute_pi.html | 4 + doc/hydro_test/cluster/compute_pi/index.html | 1 + .../cluster/compute_pi/sidebar-items.js | 0 .../cluster/compute_pi/struct.Leader.html | 2 +- .../cluster/compute_pi/struct.Worker.html | 2 +- doc/hydro_test/cluster/index.html | 1 + .../cluster/many_to_many/fn.many_to_many.html | 1 + .../cluster/many_to_many/index.html | 1 + .../cluster/many_to_many/sidebar-items.js | 0 .../cluster/map_reduce/fn.map_reduce.html | 3 + doc/hydro_test/cluster/map_reduce/index.html | 1 + .../cluster/map_reduce/sidebar-items.js | 0 .../cluster/map_reduce/struct.Leader.html | 24 ++ .../cluster/map_reduce/struct.Worker.html | 2 +- .../cluster/paxos/fn.paxos_core.html | 23 ++ doc/hydro_test/cluster/paxos/index.html | 2 + .../cluster/paxos/sidebar-items.js | 0 .../cluster/paxos/struct.Acceptor.html | 2 +- .../cluster/paxos/struct.Ballot.html | 24 +- .../cluster/paxos/struct.Proposer.html | 2 +- .../cluster/paxos/trait.PaxosPayload.html | 7 + .../cluster/paxos_bench/fn.paxos_bench.html | 10 + doc/hydro_test/cluster/paxos_bench/index.html | 1 + .../cluster/paxos_bench/sidebar-items.js | 0 .../cluster/paxos_bench/struct.Client.html | 2 +- .../cluster/paxos_kv/fn.paxos_kv.html | 15 + .../cluster/paxos_kv/fn.replica.html | 5 + doc/hydro_test/cluster/paxos_kv/index.html | 1 + .../cluster/paxos_kv/sidebar-items.js | 0 .../cluster/paxos_kv/struct.KvPayload.html | 28 +- .../cluster/paxos_kv/struct.Replica.html} | 2 +- .../cluster/paxos_kv/struct.SequencedKv.html | 34 +-- .../cluster/paxos_kv/trait.KvKey.html | 7 + .../cluster/paxos_kv/trait.KvValue.html | 6 + .../cluster/sidebar-items.js | 0 .../simple_cluster/fn.decouple_cluster.html | 3 + .../simple_cluster/fn.decouple_process.html | 3 + .../simple_cluster/fn.simple_cluster.html | 3 + .../cluster/simple_cluster/index.html | 1 + .../cluster/simple_cluster/sidebar-items.js | 0 doc/hydro_test/cluster/two_pc/fn.two_pc.html | 4 + doc/hydro_test/cluster/two_pc/index.html | 1 + .../cluster/two_pc/sidebar-items.js | 0 .../cluster/two_pc/struct.Client.html | 2 +- .../cluster/two_pc/struct.Coordinator.html | 2 +- .../cluster/two_pc/struct.Participants.html} | 2 +- .../first_ten/fn.first_ten_distributed.html | 5 + .../distributed/first_ten/index.html | 1 + .../distributed/first_ten/sidebar-items.js | 0 .../distributed/first_ten/struct.P1.html | 2 +- .../distributed/first_ten/struct.P2.html | 2 +- doc/hydro_test/distributed/index.html | 1 + .../distributed/sidebar-items.js | 0 doc/hydro_test/index.html | 1 + .../sidebar-items.js | 0 doc/hydro_test_local/all.html | 1 + doc/hydro_test_local/index.html | 1 + .../local/chat_app/index.html | 1 + .../local/chat_app/macro.chat_app!.html | 0 .../local/chat_app/macro.chat_app.html | 1 + .../local/chat_app/sidebar-items.js | 0 .../local/compute_pi/fn.compute_pi.html | 4 + .../local/compute_pi/index.html | 1 + .../compute_pi/macro.compute_pi_runtime!.html | 0 .../compute_pi/macro.compute_pi_runtime.html | 1 + .../local/compute_pi/sidebar-items.js | 0 .../count_elems/fn.count_elems_generic.html | 5 + .../local/count_elems/index.html | 1 + .../local/count_elems/macro.count_elems!.html | 0 .../local/count_elems/macro.count_elems.html | 1 + .../local/count_elems/sidebar-items.js | 0 .../local/first_ten/fn.first_ten.html | 1 + .../local/first_ten/index.html | 1 + .../first_ten/macro.first_ten_runtime!.html | 0 .../first_ten/macro.first_ten_runtime.html | 1 + .../local/first_ten/sidebar-items.js | 0 .../local/graph_reachability/index.html | 1 + .../macro.graph_reachability!.html | 0 .../macro.graph_reachability.html | 1 + .../local/graph_reachability/sidebar-items.js | 0 doc/hydro_test_local/local/index.html | 1 + .../local/negation/index.html | 1 + .../local/negation/macro.test_anti_join!.html | 0 .../local/negation/macro.test_anti_join.html | 1 + .../negation/macro.test_difference!.html | 0 .../local/negation/macro.test_difference.html | 1 + .../local/negation/sidebar-items.js | 0 .../local/sidebar-items.js | 0 .../local/teed_join/index.html | 1 + .../local/teed_join/macro.teed_join!.html | 0 .../local/teed_join/macro.teed_join.html | 1 + .../local/teed_join/sidebar-items.js | 0 .../sidebar-items.js | 0 doc/hydro_test_local_macro/all.html | 1 + doc/hydro_test_local_macro/index.html | 1 + ...749D52C4408A36766C2EA4952E8548FDF2CF!.html | 0 ...5749D52C4408A36766C2EA4952E8548FDF2CF.html | 1 + ...DC55F81545A0CB32FC13A73E2E0B86C69967!.html | 0 ...EDC55F81545A0CB32FC13A73E2E0B86C69967.html | 1 + ...BBB5A0E778C545379CD74D8134F1BDE2467B!.html | 0 ...3BBB5A0E778C545379CD74D8134F1BDE2467B.html | 1 + ...8B3BB603ECEE77232C187CB7749C8C3633D4!.html | 0 ...38B3BB603ECEE77232C187CB7749C8C3633D4.html | 1 + ...04553FF74D0CDA5EC33E48C8D94A09338A20!.html | 0 ...404553FF74D0CDA5EC33E48C8D94A09338A20.html | 1 + ...A072229E6DD9B20D78BFFDFDF0B90F8550E2!.html | 0 ...5A072229E6DD9B20D78BFFDFDF0B90F8550E2.html | 1 + ...3AE1C491601401B080576A445697B5F5D872!.html | 0 ...13AE1C491601401B080576A445697B5F5D872.html | 1 + ...53802F7DE61514FE27DB041B53B7578FA011!.html | 0 ...C53802F7DE61514FE27DB041B53B7578FA011.html | 1 + .../sidebar-items.js | 0 .../__staged/builder/macro.q.html | 11 - .../__staged/deploy_runtime/macro.q.html | 11 - .../__staged/location/macro.q.html | 11 - .../__staged/location/tick/macro.q.html | 11 - doc/hydroflow_plus/__staged/macro.q.html | 11 - .../__staged/optional/macro.q.html | 11 - .../__staged/rewrites/profiler/macro.q.html | 11 - .../rewrites/profiler/myself/macro.q.html | 11 - .../__staged/rewrites/properties/macro.q.html | 11 - .../__staged/singleton/macro.q.html | 11 - .../__staged/stream/macro.q.html | 11 - doc/hydroflow_plus/all.html | 1 - doc/hydroflow_plus/boundedness/index.html | 3 - doc/hydroflow_plus/builder/built/index.html | 1 - .../builder/compiled/index.html | 1 - .../builder/constant.FLOW_USED_MESSAGE.html | 1 - doc/hydroflow_plus/builder/deploy/index.html | 1 - doc/hydroflow_plus/builder/index.html | 1 - .../builder/type.FlowState.html | 1 - .../cycle/enum.ForwardRefMarker.html | 23 -- doc/hydroflow_plus/cycle/index.html | 2 - .../cycle/trait.CycleCollection.html | 6 - .../trait.CycleCollectionWithInitial.html | 10 - .../cycle/trait.CycleComplete.html | 4 - doc/hydroflow_plus/cycle/trait.DeferTick.html | 4 - .../deploy/in_memory_graph/index.html | 1 - .../in_memory_graph/struct.MultiGraph.html | 23 -- .../struct.SingleProcessGraph.html | 23 -- doc/hydroflow_plus/deploy/index.html | 1 - .../deploy/macro_runtime/index.html | 1 - .../macro_runtime/struct.DeployRuntime.html | 114 ------- .../deploy/trait.ClusterSpec.html | 4 - doc/hydroflow_plus/deploy/trait.Deploy.html | 178 ----------- .../deploy/trait.ExternalSpec.html | 4 - .../deploy/trait.IntoProcessSpec.html | 6 - .../deploy/trait.LocalDeploy.html | 12 - doc/hydroflow_plus/deploy/trait.Node.html | 22 -- .../deploy/trait.ProcessSpec.html | 4 - .../deploy_runtime/fn.cluster_members.html | 4 - .../deploy_runtime/fn.cluster_self_id.html | 3 - .../deploy_runtime/fn.deploy_e2o.html | 5 - .../deploy_runtime/fn.deploy_m2m.html | 5 - .../deploy_runtime/fn.deploy_m2o.html | 5 - .../deploy_runtime/fn.deploy_o2e.html | 5 - .../deploy_runtime/fn.deploy_o2m.html | 5 - .../deploy_runtime/fn.deploy_o2o.html | 5 - doc/hydroflow_plus/deploy_runtime/index.html | 1 - doc/hydroflow_plus/index.html | 1 - doc/hydroflow_plus/ir/enum.HfPlusNode.html | 123 -------- doc/hydroflow_plus/ir/fn.dbg_dedup_tee.html | 1 - doc/hydroflow_plus/ir/index.html | 4 - doc/hydroflow_plus/ir/sidebar-items.js | 1 - doc/hydroflow_plus/ir/type.SeenTees.html | 1 - .../location/can_send/index.html | 1 - .../location/can_send/trait.CanSend.html | 11 - .../location/cluster/cluster_id/index.html | 1 - .../location/cluster/index.html | 2 - .../cluster/static.CLUSTER_SELF_ID.html | 3 - .../location/cluster/trait.IsCluster.html | 3 - .../location/external_process/index.html | 1 - .../location/fn.check_matching_location.html | 1 - doc/hydroflow_plus/location/index.html | 1 - .../location/process/index.html | 1 - doc/hydroflow_plus/location/tick/index.html | 1 - .../location/tick/trait.NoTick.html | 1 - .../location/tick/trait.NoTimestamp.html | 1 - .../location/trait.Location.html | 86 ------ doc/hydroflow_plus/macro.q.html | 7 - doc/hydroflow_plus/optional/index.html | 1 - .../optional/struct.Optional.html | 82 ----- doc/hydroflow_plus/rewrites/index.html | 1 - .../persist_pullup/fn.persist_pullup.html | 1 - .../rewrites/persist_pullup/index.html | 1 - .../profiler/fn.increment_counter.html | 1 - .../rewrites/profiler/fn.profiling.html | 6 - .../rewrites/profiler/index.html | 1 - .../properties/fn.properties_optimize.html | 4 - .../rewrites/properties/index.html | 1 - doc/hydroflow_plus/runtime_context/index.html | 1 - .../static.RUNTIME_CONTEXT.html | 1 - doc/hydroflow_plus/singleton/index.html | 1 - .../singleton/struct.Singleton.html | 77 ----- .../singleton/trait.ZipResult.html | 9 - doc/hydroflow_plus/stream/index.html | 4 - doc/hydroflow_plus/stream/struct.Stream.html | 264 ---------------- doc/hydroflow_plus/stream/trait.MinOrder.html | 5 - doc/hydroflow_plus_std/all.html | 1 - doc/hydroflow_plus_std/index.html | 1 - .../quorum/fn.collect_quorum.html | 5 - .../fn.collect_quorum_with_response.html | 5 - doc/hydroflow_plus_std/quorum/index.html | 1 - .../request_response/fn.join_responses.html | 10 - .../request_response/index.html | 2 - doc/hydroflow_plus_test/all.html | 1 - .../cluster/compute_pi/fn.compute_pi.html | 4 - .../cluster/compute_pi/index.html | 1 - doc/hydroflow_plus_test/cluster/index.html | 1 - .../cluster/many_to_many/fn.many_to_many.html | 1 - .../cluster/many_to_many/index.html | 1 - .../cluster/map_reduce/fn.map_reduce.html | 3 - .../cluster/map_reduce/index.html | 1 - .../cluster/paxos/fn.paxos_core.html | 23 -- .../cluster/paxos/index.html | 2 - .../cluster/paxos/trait.PaxosPayload.html | 7 - .../cluster/paxos_bench/fn.paxos_bench.html | 10 - .../cluster/paxos_bench/index.html | 1 - .../cluster/paxos_kv/fn.paxos_kv.html | 15 - .../cluster/paxos_kv/fn.replica.html | 5 - .../cluster/paxos_kv/index.html | 1 - .../cluster/paxos_kv/struct.Replica.html | 24 -- .../cluster/paxos_kv/trait.KvKey.html | 7 - .../cluster/paxos_kv/trait.KvValue.html | 6 - .../simple_cluster/fn.decouple_cluster.html | 3 - .../simple_cluster/fn.decouple_process.html | 3 - .../simple_cluster/fn.simple_cluster.html | 3 - .../cluster/simple_cluster/index.html | 1 - .../cluster/two_pc/fn.two_pc.html | 4 - .../cluster/two_pc/index.html | 1 - .../first_ten/fn.first_ten_distributed.html | 5 - .../distributed/first_ten/index.html | 1 - .../distributed/index.html | 1 - doc/hydroflow_plus_test/index.html | 1 - doc/hydroflow_plus_test_local/all.html | 1 - doc/hydroflow_plus_test_local/index.html | 1 - .../local/chat_app/index.html | 1 - .../local/chat_app/macro.chat_app.html | 1 - .../local/compute_pi/fn.compute_pi.html | 4 - .../local/compute_pi/index.html | 1 - .../compute_pi/macro.compute_pi_runtime.html | 1 - .../count_elems/fn.count_elems_generic.html | 5 - .../local/count_elems/index.html | 1 - .../local/count_elems/macro.count_elems.html | 1 - .../local/first_ten/fn.first_ten.html | 1 - .../local/first_ten/index.html | 1 - .../first_ten/macro.first_ten_runtime.html | 1 - .../local/graph_reachability/index.html | 1 - .../macro.graph_reachability.html | 1 - .../local/index.html | 1 - .../local/negation/index.html | 1 - .../local/negation/macro.test_anti_join.html | 1 - .../local/negation/macro.test_difference.html | 1 - .../local/teed_join/index.html | 1 - .../local/teed_join/macro.teed_join.html | 1 - doc/hydroflow_plus_test_local_macro/all.html | 1 - .../index.html | 1 - ...5749D52C4408A36766C2EA4952E8548FDF2CF.html | 1 - ...EDC55F81545A0CB32FC13A73E2E0B86C69967.html | 1 - ...3BBB5A0E778C545379CD74D8134F1BDE2467B.html | 1 - ...38B3BB603ECEE77232C187CB7749C8C3633D4.html | 1 - ...404553FF74D0CDA5EC33E48C8D94A09338A20.html | 1 - ...5A072229E6DD9B20D78BFFDFDF0B90F8550E2.html | 1 - ...13AE1C491601401B080576A445697B5F5D872.html | 1 - ...C53802F7DE61514FE27DB041B53B7578FA011.html | 1 - doc/search-index.js | 4 +- .../hydro_lang/hydro_lang-desc-0-.js | 1 + .../hydro_std/hydro_std-desc-0-.js | 1 + .../hydro_test/hydro_test-desc-0-.js | 1 + .../hydro_test_local-desc-0-.js | 1 + .../hydro_test_local_macro-desc-0-.js | 1 + .../hydroflow_plus/hydroflow_plus-desc-0-.js | 1 - .../hydroflow_plus_std-desc-0-.js | 1 - .../hydroflow_plus_test-desc-0-.js | 1 - .../hydroflow_plus_test_local-desc-0-.js | 1 - ...hydroflow_plus_test_local_macro-desc-0-.js | 1 - .../stageleft/stageleft-desc-0-.js | 2 +- .../stageleft_macro-desc-0-.js | 2 +- doc/src-files.js | 4 +- .../boundedness.rs.html} | 26 +- .../builder/built.rs.html | 12 +- .../builder/compiled.rs.html | 14 +- .../builder/deploy.rs.html | 16 +- .../builder/mod.rs.html | 8 +- .../cycle.rs.html | 2 +- .../deploy/in_memory_graph.rs.html | 2 +- .../deploy/macro_runtime.rs.html | 2 +- .../deploy/mod.rs.html | 2 +- .../deploy_runtime.rs.html | 2 +- .../out/lib_pub.rs.html | 2 + .../{hydroflow_plus => hydro_lang}/ir.rs.html | 288 +++++++++--------- .../lib.rs.html | 2 +- .../location/can_send.rs.html | 2 +- .../location/cluster/cluster_id.rs.html | 2 +- .../location/cluster/mod.rs.html | 6 +- .../location/external_process.rs.html | 16 +- .../location/mod.rs.html | 28 +- .../location/process.rs.html | 2 +- .../location/tick.rs.html | 8 +- .../optional.rs.html | 90 +++--- doc/src/hydro_lang/rewrites/mod.rs.html | 7 + .../rewrites/persist_pullup.rs.html | 90 +++--- .../rewrites/profiler.rs.html | 12 +- .../rewrites/properties.rs.html | 18 +- .../runtime_context.rs.html | 2 +- .../singleton.rs.html | 84 ++--- doc/src/hydro_lang/staging_util.rs.html | 37 +++ .../stream.rs.html | 124 ++++---- .../out/lib_pub.rs.html | 2 + doc/src/hydro_std/lib.rs.html | 27 ++ .../quorum.rs.html | 4 +- .../request_response.rs.html | 4 +- .../cluster/compute_pi.rs.html | 8 +- .../cluster/many_to_many.rs.html | 8 +- .../cluster/map_reduce.rs.html | 8 +- doc/src/hydro_test/cluster/mod.rs.html | 17 ++ .../cluster/paxos.rs.html | 8 +- .../cluster/paxos_bench.rs.html | 14 +- .../cluster/paxos_kv.rs.html | 4 +- .../cluster/simple_cluster.rs.html | 12 +- .../cluster/two_pc.rs.html | 6 +- .../distributed/first_ten.rs.html | 8 +- doc/src/hydro_test/distributed/mod.rs.html | 3 + doc/src/hydro_test/lib.rs.html | 23 ++ .../out/lib_pub.rs.html | 2 + doc/src/hydro_test_local/lib.rs.html | 13 + .../local/chat_app.rs.html | 10 +- .../local/compute_pi.rs.html | 8 +- .../local/count_elems.rs.html | 10 +- .../hydro_test_local/local/first_ten.rs.html | 51 ++++ .../local/graph_reachability.rs.html | 10 +- doc/src/hydro_test_local/local/mod.rs.html | 15 + .../local/negation.rs.html | 10 +- .../local/teed_join.rs.html | 10 +- .../out/lib_macro.rs.html | 2 +- doc/src/hydro_test_local_macro/lib.rs.html | 13 + .../local/chat_app.rs.html | 10 +- .../local/compute_pi.rs.html | 8 +- .../local/count_elems.rs.html | 10 +- .../local/first_ten.rs.html | 51 ++++ .../local/graph_reachability.rs.html | 10 +- .../hydro_test_local_macro/local/mod.rs.html | 15 + .../local/negation.rs.html | 10 +- .../local/teed_join.rs.html | 10 +- doc/src/hydroflow_plus/boundedness.rs.html | 15 - .../out/lib_pub.rs.html | 2 - doc/src/hydroflow_plus/rewrites/mod.rs.html | 7 - doc/src/hydroflow_plus/staging_util.rs.html | 37 --- .../out/lib_pub.rs.html | 2 - .../hydroflow_plus_test/cluster/mod.rs.html | 17 -- .../distributed/mod.rs.html | 3 - doc/src/hydroflow_plus_test/lib.rs.html | 23 -- .../out/lib_pub.rs.html | 2 - doc/src/hydroflow_plus_test_local/lib.rs.html | 13 - .../local/first_ten.rs.html | 51 ---- .../local/mod.rs.html | 15 - .../lib.rs.html | 13 - .../local/first_ten.rs.html | 51 ---- .../local/mod.rs.html | 15 - doc/src/stageleft_macro/lib.rs.html | 2 +- doc/stageleft/index.html | 2 +- doc/stageleft/macro.q.html | 2 +- doc/stageleft_macro/index.html | 2 +- doc/stageleft_macro/macro.q.html | 2 +- doc/trait.impl/core/clone/trait.Clone.js | 4 +- doc/trait.impl/core/cmp/trait.Eq.js | 4 +- doc/trait.impl/core/cmp/trait.Ord.js | 4 +- doc/trait.impl/core/cmp/trait.PartialEq.js | 4 +- doc/trait.impl/core/cmp/trait.PartialOrd.js | 4 +- doc/trait.impl/core/convert/trait.From.js | 4 +- doc/trait.impl/core/default/trait.Default.js | 4 +- doc/trait.impl/core/fmt/trait.Debug.js | 4 +- doc/trait.impl/core/fmt/trait.Display.js | 4 +- doc/trait.impl/core/hash/trait.Hash.js | 4 +- doc/trait.impl/core/marker/trait.Copy.js | 4 +- doc/trait.impl/core/marker/trait.Freeze.js | 4 +- doc/trait.impl/core/marker/trait.Send.js | 4 +- .../core/marker/trait.StructuralPartialEq.js | 4 +- doc/trait.impl/core/marker/trait.Sync.js | 4 +- doc/trait.impl/core/marker/trait.Unpin.js | 4 +- doc/trait.impl/core/ops/deref/trait.Deref.js | 4 +- doc/trait.impl/core/ops/drop/trait.Drop.js | 4 +- .../panic/unwind_safe/trait.RefUnwindSafe.js | 4 +- .../panic/unwind_safe/trait.UnwindSafe.js | 4 +- .../cycle/trait.CycleCollection.js | 4 +- .../cycle/trait.CycleCollectionWithInitial.js | 4 +- .../cycle/trait.CycleComplete.js | 4 +- .../cycle/trait.DeferTick.js | 4 +- .../deploy/trait.ClusterSpec.js | 4 +- .../deploy/trait.Deploy.js | 4 +- .../deploy/trait.ExternalSpec.js | 4 +- .../deploy/trait.IntoProcessSpec.js | 4 +- .../deploy/trait.LocalDeploy.js | 4 +- .../deploy/trait.Node.js | 4 +- .../deploy/trait.ProcessSpec.js | 4 +- .../deploy/trait.RegisterPort.js | 4 +- .../location/can_send/trait.CanSend.js | 4 +- .../location/cluster/trait.IsCluster.js | 4 +- .../location/tick/trait.NoTick.js | 4 +- .../location/tick/trait.NoTimestamp.js | 4 +- .../location/trait.Location.js | 4 +- .../singleton/trait.ZipResult.js | 4 +- .../stream/trait.MinOrder.js | 4 +- .../cluster/paxos/trait.PaxosPayload.js | 9 + .../cluster/paxos_kv/trait.KvKey.js | 9 + .../cluster/paxos_kv/trait.KvValue.js | 9 + .../cluster/paxos/trait.PaxosPayload.js | 9 - .../cluster/paxos_kv/trait.KvKey.js | 9 - .../cluster/paxos_kv/trait.KvValue.js | 9 - .../quote/to_tokens/trait.ToTokens.js | 4 +- doc/trait.impl/serde/de/trait.Deserialize.js | 4 +- doc/trait.impl/serde/ser/trait.Serialize.js | 4 +- .../trait.FreeVariableWithContext.js | 4 +- .../stageleft/trait.QuotedContext.js | 4 +- .../stageleft/trait.QuotedWithContext.js | 4 +- doc/type.impl/alloc/rc/struct.Rc.js | 4 +- .../collections/hash/map/struct.HashMap.js | 4 +- 592 files changed, 2841 insertions(+), 2867 deletions(-) rename doc/{hydroflow_plus => hydro_lang}/__staged/builder/macro.q!.html (100%) create mode 100644 doc/hydro_lang/__staged/builder/macro.q.html rename doc/{hydroflow_plus => hydro_lang}/__staged/deploy_runtime/macro.q!.html (100%) create mode 100644 doc/hydro_lang/__staged/deploy_runtime/macro.q.html rename doc/{hydroflow_plus => hydro_lang}/__staged/location/macro.q!.html (100%) create mode 100644 doc/hydro_lang/__staged/location/macro.q.html rename doc/{hydroflow_plus => hydro_lang}/__staged/location/tick/macro.q!.html (100%) create mode 100644 doc/hydro_lang/__staged/location/tick/macro.q.html rename doc/{hydroflow_plus => hydro_lang}/__staged/macro.q!.html (100%) create mode 100644 doc/hydro_lang/__staged/macro.q.html rename doc/{hydroflow_plus => hydro_lang}/__staged/optional/macro.q!.html (100%) create mode 100644 doc/hydro_lang/__staged/optional/macro.q.html rename doc/{hydroflow_plus => hydro_lang}/__staged/rewrites/profiler/macro.q!.html (100%) create mode 100644 doc/hydro_lang/__staged/rewrites/profiler/macro.q.html rename doc/{hydroflow_plus => hydro_lang}/__staged/rewrites/profiler/myself/macro.q!.html (100%) create mode 100644 doc/hydro_lang/__staged/rewrites/profiler/myself/macro.q.html rename doc/{hydroflow_plus => hydro_lang}/__staged/rewrites/properties/macro.q!.html (100%) create mode 100644 doc/hydro_lang/__staged/rewrites/properties/macro.q.html rename doc/{hydroflow_plus => hydro_lang}/__staged/singleton/macro.q!.html (100%) create mode 100644 doc/hydro_lang/__staged/singleton/macro.q.html rename doc/{hydroflow_plus => hydro_lang}/__staged/stream/macro.q!.html (100%) create mode 100644 doc/hydro_lang/__staged/stream/macro.q.html create mode 100644 doc/hydro_lang/all.html rename doc/{hydroflow_plus/boundedness/enum.Unbounded.html => hydro_lang/boundedness/enum.Bounded.html} (71%) rename doc/{hydroflow_plus/boundedness/enum.Bounded.html => hydro_lang/boundedness/enum.Unbounded.html} (75%) create mode 100644 doc/hydro_lang/boundedness/index.html rename doc/{hydroflow_plus => hydro_lang}/boundedness/sidebar-items.js (100%) create mode 100644 doc/hydro_lang/builder/built/index.html rename doc/{hydroflow_plus => hydro_lang}/builder/built/sidebar-items.js (100%) rename doc/{hydroflow_plus => hydro_lang}/builder/built/struct.BuiltFlow.html (57%) create mode 100644 doc/hydro_lang/builder/compiled/index.html rename doc/{hydroflow_plus => hydro_lang}/builder/compiled/sidebar-items.js (100%) rename doc/{hydroflow_plus => hydro_lang}/builder/compiled/struct.CompiledFlow.html (63%) rename doc/{hydroflow_plus => hydro_lang}/builder/compiled/struct.CompiledFlowWithId.html (67%) create mode 100644 doc/hydro_lang/builder/constant.FLOW_USED_MESSAGE.html create mode 100644 doc/hydro_lang/builder/deploy/index.html rename doc/{hydroflow_plus => hydro_lang}/builder/deploy/sidebar-items.js (100%) rename doc/{hydroflow_plus => hydro_lang}/builder/deploy/struct.DeployFlow.html (56%) rename doc/{hydroflow_plus => hydro_lang}/builder/deploy/struct.DeployResult.html (56%) create mode 100644 doc/hydro_lang/builder/index.html rename doc/{hydroflow_plus => hydro_lang}/builder/sidebar-items.js (100%) rename doc/{hydroflow_plus => hydro_lang}/builder/struct.FlowBuilder.html (53%) rename doc/{hydroflow_plus/location/external_process/struct.ExternalBytesPort.html => hydro_lang/builder/struct.FlowStateInner.html} (70%) create mode 100644 doc/hydro_lang/builder/type.FlowState.html create mode 100644 doc/hydro_lang/cycle/enum.ForwardRefMarker.html rename doc/{hydroflow_plus => hydro_lang}/cycle/enum.TickCycleMarker.html (51%) create mode 100644 doc/hydro_lang/cycle/index.html rename doc/{hydroflow_plus => hydro_lang}/cycle/sidebar-items.js (100%) rename doc/{hydroflow_plus => hydro_lang}/cycle/struct.ForwardRef.html (72%) rename doc/{hydroflow_plus => hydro_lang}/cycle/struct.TickCycle.html (72%) create mode 100644 doc/hydro_lang/cycle/trait.CycleCollection.html create mode 100644 doc/hydro_lang/cycle/trait.CycleCollectionWithInitial.html create mode 100644 doc/hydro_lang/cycle/trait.CycleComplete.html create mode 100644 doc/hydro_lang/cycle/trait.DeferTick.html create mode 100644 doc/hydro_lang/deploy/in_memory_graph/index.html rename doc/{hydroflow_plus => hydro_lang}/deploy/in_memory_graph/sidebar-items.js (100%) create mode 100644 doc/hydro_lang/deploy/in_memory_graph/struct.MultiGraph.html rename doc/{hydroflow_plus => hydro_lang}/deploy/in_memory_graph/struct.MultiNode.html (66%) rename doc/{hydroflow_plus => hydro_lang}/deploy/in_memory_graph/struct.SingleNode.html (66%) create mode 100644 doc/hydro_lang/deploy/in_memory_graph/struct.SingleProcessGraph.html create mode 100644 doc/hydro_lang/deploy/index.html create mode 100644 doc/hydro_lang/deploy/macro_runtime/index.html rename doc/{hydroflow_plus => hydro_lang}/deploy/macro_runtime/sidebar-items.js (100%) create mode 100644 doc/hydro_lang/deploy/macro_runtime/struct.DeployRuntime.html rename doc/{hydroflow_plus => hydro_lang}/deploy/macro_runtime/struct.DeployRuntimeCluster.html (66%) rename doc/{hydroflow_plus => hydro_lang}/deploy/macro_runtime/struct.DeployRuntimeNode.html (63%) rename doc/{hydroflow_plus => hydro_lang}/deploy/sidebar-items.js (100%) create mode 100644 doc/hydro_lang/deploy/trait.ClusterSpec.html create mode 100644 doc/hydro_lang/deploy/trait.Deploy.html create mode 100644 doc/hydro_lang/deploy/trait.ExternalSpec.html create mode 100644 doc/hydro_lang/deploy/trait.IntoProcessSpec.html create mode 100644 doc/hydro_lang/deploy/trait.LocalDeploy.html create mode 100644 doc/hydro_lang/deploy/trait.Node.html create mode 100644 doc/hydro_lang/deploy/trait.ProcessSpec.html rename doc/{hydroflow_plus => hydro_lang}/deploy/trait.RegisterPort.html (54%) create mode 100644 doc/hydro_lang/deploy_runtime/fn.cluster_members.html create mode 100644 doc/hydro_lang/deploy_runtime/fn.cluster_self_id.html create mode 100644 doc/hydro_lang/deploy_runtime/fn.deploy_e2o.html create mode 100644 doc/hydro_lang/deploy_runtime/fn.deploy_m2m.html create mode 100644 doc/hydro_lang/deploy_runtime/fn.deploy_m2o.html create mode 100644 doc/hydro_lang/deploy_runtime/fn.deploy_o2e.html create mode 100644 doc/hydro_lang/deploy_runtime/fn.deploy_o2m.html create mode 100644 doc/hydro_lang/deploy_runtime/fn.deploy_o2o.html create mode 100644 doc/hydro_lang/deploy_runtime/index.html rename doc/{hydroflow_plus => hydro_lang}/deploy_runtime/sidebar-items.js (100%) rename doc/{hydroflow_plus => hydro_lang}/deploy_runtime/struct.HydroflowPlusMeta.html (67%) create mode 100644 doc/hydro_lang/index.html rename doc/{hydroflow_plus => hydro_lang}/ir/enum.DebugInstantiate.html (70%) rename doc/{hydroflow_plus/ir/enum.HfPlusLeaf.html => hydro_lang/ir/enum.HydroLeaf.html} (61%) create mode 100644 doc/hydro_lang/ir/enum.HydroNode.html rename doc/{hydroflow_plus/ir/enum.HfPlusSource.html => hydro_lang/ir/enum.HydroSource.html} (66%) create mode 100644 doc/hydro_lang/ir/fn.dbg_dedup_tee.html create mode 100644 doc/hydro_lang/ir/index.html create mode 100644 doc/hydro_lang/ir/sidebar-items.js rename doc/{hydroflow_plus => hydro_lang}/ir/struct.DebugExpr.html (60%) rename doc/{hydroflow_plus => hydro_lang}/ir/struct.TeeNode.html (65%) create mode 100644 doc/hydro_lang/ir/type.SeenTees.html create mode 100644 doc/hydro_lang/location/can_send/index.html rename doc/{hydroflow_plus => hydro_lang}/location/can_send/sidebar-items.js (100%) create mode 100644 doc/hydro_lang/location/can_send/trait.CanSend.html create mode 100644 doc/hydro_lang/location/cluster/cluster_id/index.html rename doc/{hydroflow_plus => hydro_lang}/location/cluster/cluster_id/sidebar-items.js (100%) rename doc/{hydroflow_plus => hydro_lang}/location/cluster/cluster_id/struct.ClusterId.html (63%) create mode 100644 doc/hydro_lang/location/cluster/index.html rename doc/{hydroflow_plus => hydro_lang}/location/cluster/sidebar-items.js (100%) create mode 100644 doc/hydro_lang/location/cluster/static.CLUSTER_SELF_ID.html rename doc/{hydroflow_plus => hydro_lang}/location/cluster/struct.Cluster.html (50%) rename doc/{hydroflow_plus => hydro_lang}/location/cluster/struct.ClusterIds.html (73%) rename doc/{hydroflow_plus => hydro_lang}/location/cluster/struct.ClusterSelfId.html (63%) create mode 100644 doc/hydro_lang/location/cluster/trait.IsCluster.html rename doc/{hydroflow_plus => hydro_lang}/location/enum.LocationId.html (64%) create mode 100644 doc/hydro_lang/location/external_process/index.html rename doc/{hydroflow_plus => hydro_lang}/location/external_process/sidebar-items.js (100%) rename doc/{hydroflow_plus => hydro_lang}/location/external_process/struct.ExternalBincodeSink.html (76%) rename doc/{hydroflow_plus => hydro_lang}/location/external_process/struct.ExternalBincodeStream.html (76%) rename doc/{hydroflow_plus/builder/struct.FlowStateInner.html => hydro_lang/location/external_process/struct.ExternalBytesPort.html} (72%) rename doc/{hydroflow_plus => hydro_lang}/location/external_process/struct.ExternalProcess.html (56%) create mode 100644 doc/hydro_lang/location/fn.check_matching_location.html create mode 100644 doc/hydro_lang/location/index.html create mode 100644 doc/hydro_lang/location/process/index.html rename doc/{hydroflow_plus => hydro_lang}/location/process/sidebar-items.js (100%) rename doc/{hydroflow_plus => hydro_lang}/location/process/struct.Process.html (50%) rename doc/{hydroflow_plus => hydro_lang}/location/sidebar-items.js (100%) create mode 100644 doc/hydro_lang/location/tick/index.html rename doc/{hydroflow_plus => hydro_lang}/location/tick/sidebar-items.js (100%) rename doc/{hydroflow_plus => hydro_lang}/location/tick/struct.Tick.html (61%) rename doc/{hydroflow_plus => hydro_lang}/location/tick/struct.Timestamped.html (64%) create mode 100644 doc/hydro_lang/location/tick/trait.NoTick.html create mode 100644 doc/hydro_lang/location/tick/trait.NoTimestamp.html create mode 100644 doc/hydro_lang/location/trait.Location.html rename doc/{hydroflow_plus => hydro_lang}/macro.q!.html (100%) create mode 100644 doc/hydro_lang/macro.q.html create mode 100644 doc/hydro_lang/optional/index.html rename doc/{hydroflow_plus => hydro_lang}/optional/sidebar-items.js (100%) create mode 100644 doc/hydro_lang/optional/struct.Optional.html create mode 100644 doc/hydro_lang/rewrites/index.html create mode 100644 doc/hydro_lang/rewrites/persist_pullup/fn.persist_pullup.html create mode 100644 doc/hydro_lang/rewrites/persist_pullup/index.html rename doc/{hydroflow_plus => hydro_lang}/rewrites/persist_pullup/sidebar-items.js (100%) create mode 100644 doc/hydro_lang/rewrites/profiler/fn.increment_counter.html create mode 100644 doc/hydro_lang/rewrites/profiler/fn.profiling.html create mode 100644 doc/hydro_lang/rewrites/profiler/index.html rename doc/{hydroflow_plus => hydro_lang}/rewrites/profiler/sidebar-items.js (100%) create mode 100644 doc/hydro_lang/rewrites/properties/fn.properties_optimize.html create mode 100644 doc/hydro_lang/rewrites/properties/index.html rename doc/{hydroflow_plus => hydro_lang}/rewrites/properties/sidebar-items.js (100%) rename doc/{hydroflow_plus => hydro_lang}/rewrites/properties/struct.PropertyDatabase.html (63%) rename doc/{hydroflow_plus => hydro_lang}/rewrites/sidebar-items.js (100%) create mode 100644 doc/hydro_lang/runtime_context/index.html rename doc/{hydroflow_plus => hydro_lang}/runtime_context/sidebar-items.js (100%) create mode 100644 doc/hydro_lang/runtime_context/static.RUNTIME_CONTEXT.html rename doc/{hydroflow_plus => hydro_lang}/runtime_context/struct.RuntimeContext.html (63%) rename doc/{hydroflow_plus => hydro_lang}/sidebar-items.js (100%) create mode 100644 doc/hydro_lang/singleton/index.html rename doc/{hydroflow_plus => hydro_lang}/singleton/sidebar-items.js (100%) create mode 100644 doc/hydro_lang/singleton/struct.Singleton.html create mode 100644 doc/hydro_lang/singleton/trait.ZipResult.html create mode 100644 doc/hydro_lang/stream/index.html rename doc/{hydroflow_plus => hydro_lang}/stream/sidebar-items.js (100%) rename doc/{hydroflow_plus => hydro_lang}/stream/struct.NoOrder.html (67%) create mode 100644 doc/hydro_lang/stream/struct.Stream.html rename doc/{hydroflow_plus => hydro_lang}/stream/struct.TotalOrder.html (67%) create mode 100644 doc/hydro_lang/stream/trait.MinOrder.html create mode 100644 doc/hydro_std/all.html create mode 100644 doc/hydro_std/index.html create mode 100644 doc/hydro_std/quorum/fn.collect_quorum.html create mode 100644 doc/hydro_std/quorum/fn.collect_quorum_with_response.html create mode 100644 doc/hydro_std/quorum/index.html rename doc/{hydroflow_plus_std => hydro_std}/quorum/sidebar-items.js (100%) create mode 100644 doc/hydro_std/request_response/fn.join_responses.html create mode 100644 doc/hydro_std/request_response/index.html rename doc/{hydroflow_plus_std => hydro_std}/request_response/sidebar-items.js (100%) rename doc/{hydroflow_plus_std => hydro_std}/sidebar-items.js (100%) create mode 100644 doc/hydro_test/all.html create mode 100644 doc/hydro_test/cluster/compute_pi/fn.compute_pi.html create mode 100644 doc/hydro_test/cluster/compute_pi/index.html rename doc/{hydroflow_plus_test => hydro_test}/cluster/compute_pi/sidebar-items.js (100%) rename doc/{hydroflow_plus_test => hydro_test}/cluster/compute_pi/struct.Leader.html (72%) rename doc/{hydroflow_plus_test => hydro_test}/cluster/compute_pi/struct.Worker.html (72%) create mode 100644 doc/hydro_test/cluster/index.html create mode 100644 doc/hydro_test/cluster/many_to_many/fn.many_to_many.html create mode 100644 doc/hydro_test/cluster/many_to_many/index.html rename doc/{hydroflow_plus_test => hydro_test}/cluster/many_to_many/sidebar-items.js (100%) create mode 100644 doc/hydro_test/cluster/map_reduce/fn.map_reduce.html create mode 100644 doc/hydro_test/cluster/map_reduce/index.html rename doc/{hydroflow_plus_test => hydro_test}/cluster/map_reduce/sidebar-items.js (100%) create mode 100644 doc/hydro_test/cluster/map_reduce/struct.Leader.html rename doc/{hydroflow_plus_test => hydro_test}/cluster/map_reduce/struct.Worker.html (72%) create mode 100644 doc/hydro_test/cluster/paxos/fn.paxos_core.html create mode 100644 doc/hydro_test/cluster/paxos/index.html rename doc/{hydroflow_plus_test => hydro_test}/cluster/paxos/sidebar-items.js (100%) rename doc/{hydroflow_plus_test => hydro_test}/cluster/paxos/struct.Acceptor.html (72%) rename doc/{hydroflow_plus_test => hydro_test}/cluster/paxos/struct.Ballot.html (60%) rename doc/{hydroflow_plus_test => hydro_test}/cluster/paxos/struct.Proposer.html (72%) create mode 100644 doc/hydro_test/cluster/paxos/trait.PaxosPayload.html create mode 100644 doc/hydro_test/cluster/paxos_bench/fn.paxos_bench.html create mode 100644 doc/hydro_test/cluster/paxos_bench/index.html rename doc/{hydroflow_plus_test => hydro_test}/cluster/paxos_bench/sidebar-items.js (100%) rename doc/{hydroflow_plus_test => hydro_test}/cluster/paxos_bench/struct.Client.html (72%) create mode 100644 doc/hydro_test/cluster/paxos_kv/fn.paxos_kv.html create mode 100644 doc/hydro_test/cluster/paxos_kv/fn.replica.html create mode 100644 doc/hydro_test/cluster/paxos_kv/index.html rename doc/{hydroflow_plus_test => hydro_test}/cluster/paxos_kv/sidebar-items.js (100%) rename doc/{hydroflow_plus_test => hydro_test}/cluster/paxos_kv/struct.KvPayload.html (68%) rename doc/{hydroflow_plus_test/cluster/two_pc/struct.Participants.html => hydro_test/cluster/paxos_kv/struct.Replica.html} (73%) rename doc/{hydroflow_plus_test => hydro_test}/cluster/paxos_kv/struct.SequencedKv.html (65%) create mode 100644 doc/hydro_test/cluster/paxos_kv/trait.KvKey.html create mode 100644 doc/hydro_test/cluster/paxos_kv/trait.KvValue.html rename doc/{hydroflow_plus_test => hydro_test}/cluster/sidebar-items.js (100%) create mode 100644 doc/hydro_test/cluster/simple_cluster/fn.decouple_cluster.html create mode 100644 doc/hydro_test/cluster/simple_cluster/fn.decouple_process.html create mode 100644 doc/hydro_test/cluster/simple_cluster/fn.simple_cluster.html create mode 100644 doc/hydro_test/cluster/simple_cluster/index.html rename doc/{hydroflow_plus_test => hydro_test}/cluster/simple_cluster/sidebar-items.js (100%) create mode 100644 doc/hydro_test/cluster/two_pc/fn.two_pc.html create mode 100644 doc/hydro_test/cluster/two_pc/index.html rename doc/{hydroflow_plus_test => hydro_test}/cluster/two_pc/sidebar-items.js (100%) rename doc/{hydroflow_plus_test => hydro_test}/cluster/two_pc/struct.Client.html (72%) rename doc/{hydroflow_plus_test => hydro_test}/cluster/two_pc/struct.Coordinator.html (72%) rename doc/{hydroflow_plus_test/cluster/map_reduce/struct.Leader.html => hydro_test/cluster/two_pc/struct.Participants.html} (74%) create mode 100644 doc/hydro_test/distributed/first_ten/fn.first_ten_distributed.html create mode 100644 doc/hydro_test/distributed/first_ten/index.html rename doc/{hydroflow_plus_test => hydro_test}/distributed/first_ten/sidebar-items.js (100%) rename doc/{hydroflow_plus_test => hydro_test}/distributed/first_ten/struct.P1.html (73%) rename doc/{hydroflow_plus_test => hydro_test}/distributed/first_ten/struct.P2.html (73%) create mode 100644 doc/hydro_test/distributed/index.html rename doc/{hydroflow_plus_test => hydro_test}/distributed/sidebar-items.js (100%) create mode 100644 doc/hydro_test/index.html rename doc/{hydroflow_plus_test => hydro_test}/sidebar-items.js (100%) create mode 100644 doc/hydro_test_local/all.html create mode 100644 doc/hydro_test_local/index.html create mode 100644 doc/hydro_test_local/local/chat_app/index.html rename doc/{hydroflow_plus_test_local => hydro_test_local}/local/chat_app/macro.chat_app!.html (100%) create mode 100644 doc/hydro_test_local/local/chat_app/macro.chat_app.html rename doc/{hydroflow_plus_test_local => hydro_test_local}/local/chat_app/sidebar-items.js (100%) create mode 100644 doc/hydro_test_local/local/compute_pi/fn.compute_pi.html create mode 100644 doc/hydro_test_local/local/compute_pi/index.html rename doc/{hydroflow_plus_test_local => hydro_test_local}/local/compute_pi/macro.compute_pi_runtime!.html (100%) create mode 100644 doc/hydro_test_local/local/compute_pi/macro.compute_pi_runtime.html rename doc/{hydroflow_plus_test_local => hydro_test_local}/local/compute_pi/sidebar-items.js (100%) create mode 100644 doc/hydro_test_local/local/count_elems/fn.count_elems_generic.html create mode 100644 doc/hydro_test_local/local/count_elems/index.html rename doc/{hydroflow_plus_test_local => hydro_test_local}/local/count_elems/macro.count_elems!.html (100%) create mode 100644 doc/hydro_test_local/local/count_elems/macro.count_elems.html rename doc/{hydroflow_plus_test_local => hydro_test_local}/local/count_elems/sidebar-items.js (100%) create mode 100644 doc/hydro_test_local/local/first_ten/fn.first_ten.html create mode 100644 doc/hydro_test_local/local/first_ten/index.html rename doc/{hydroflow_plus_test_local => hydro_test_local}/local/first_ten/macro.first_ten_runtime!.html (100%) create mode 100644 doc/hydro_test_local/local/first_ten/macro.first_ten_runtime.html rename doc/{hydroflow_plus_test_local => hydro_test_local}/local/first_ten/sidebar-items.js (100%) create mode 100644 doc/hydro_test_local/local/graph_reachability/index.html rename doc/{hydroflow_plus_test_local => hydro_test_local}/local/graph_reachability/macro.graph_reachability!.html (100%) create mode 100644 doc/hydro_test_local/local/graph_reachability/macro.graph_reachability.html rename doc/{hydroflow_plus_test_local => hydro_test_local}/local/graph_reachability/sidebar-items.js (100%) create mode 100644 doc/hydro_test_local/local/index.html create mode 100644 doc/hydro_test_local/local/negation/index.html rename doc/{hydroflow_plus_test_local => hydro_test_local}/local/negation/macro.test_anti_join!.html (100%) create mode 100644 doc/hydro_test_local/local/negation/macro.test_anti_join.html rename doc/{hydroflow_plus_test_local => hydro_test_local}/local/negation/macro.test_difference!.html (100%) create mode 100644 doc/hydro_test_local/local/negation/macro.test_difference.html rename doc/{hydroflow_plus_test_local => hydro_test_local}/local/negation/sidebar-items.js (100%) rename doc/{hydroflow_plus_test_local => hydro_test_local}/local/sidebar-items.js (100%) create mode 100644 doc/hydro_test_local/local/teed_join/index.html rename doc/{hydroflow_plus_test_local => hydro_test_local}/local/teed_join/macro.teed_join!.html (100%) create mode 100644 doc/hydro_test_local/local/teed_join/macro.teed_join.html rename doc/{hydroflow_plus_test_local => hydro_test_local}/local/teed_join/sidebar-items.js (100%) rename doc/{hydroflow_plus_test_local => hydro_test_local}/sidebar-items.js (100%) create mode 100644 doc/hydro_test_local_macro/all.html create mode 100644 doc/hydro_test_local_macro/index.html rename doc/{hydroflow_plus_test_local_macro => hydro_test_local_macro}/macro.macro_0317123C21A365AAC8F7C904D715749D52C4408A36766C2EA4952E8548FDF2CF!.html (100%) create mode 100644 doc/hydro_test_local_macro/macro.macro_0317123C21A365AAC8F7C904D715749D52C4408A36766C2EA4952E8548FDF2CF.html rename doc/{hydroflow_plus_test_local_macro => hydro_test_local_macro}/macro.macro_1C0FE8523A30CEE48113F7CA958EDC55F81545A0CB32FC13A73E2E0B86C69967!.html (100%) create mode 100644 doc/hydro_test_local_macro/macro.macro_1C0FE8523A30CEE48113F7CA958EDC55F81545A0CB32FC13A73E2E0B86C69967.html rename doc/{hydroflow_plus_test_local_macro => hydro_test_local_macro}/macro.macro_88FF4FF66B42C3C3EA6A3A776AD3BBB5A0E778C545379CD74D8134F1BDE2467B!.html (100%) create mode 100644 doc/hydro_test_local_macro/macro.macro_88FF4FF66B42C3C3EA6A3A776AD3BBB5A0E778C545379CD74D8134F1BDE2467B.html rename doc/{hydroflow_plus_test_local_macro => hydro_test_local_macro}/macro.macro_B8B04B5C82DD37E36A884DD155638B3BB603ECEE77232C187CB7749C8C3633D4!.html (100%) create mode 100644 doc/hydro_test_local_macro/macro.macro_B8B04B5C82DD37E36A884DD155638B3BB603ECEE77232C187CB7749C8C3633D4.html rename doc/{hydroflow_plus_test_local_macro => hydro_test_local_macro}/macro.macro_DBD6835F761FB7B759E0367E64D404553FF74D0CDA5EC33E48C8D94A09338A20!.html (100%) create mode 100644 doc/hydro_test_local_macro/macro.macro_DBD6835F761FB7B759E0367E64D404553FF74D0CDA5EC33E48C8D94A09338A20.html rename doc/{hydroflow_plus_test_local_macro => hydro_test_local_macro}/macro.macro_E29C1936765CFB0AEE40C7D85645A072229E6DD9B20D78BFFDFDF0B90F8550E2!.html (100%) create mode 100644 doc/hydro_test_local_macro/macro.macro_E29C1936765CFB0AEE40C7D85645A072229E6DD9B20D78BFFDFDF0B90F8550E2.html rename doc/{hydroflow_plus_test_local_macro => hydro_test_local_macro}/macro.macro_F32B896FDC4E575B912C55F307713AE1C491601401B080576A445697B5F5D872!.html (100%) create mode 100644 doc/hydro_test_local_macro/macro.macro_F32B896FDC4E575B912C55F307713AE1C491601401B080576A445697B5F5D872.html rename doc/{hydroflow_plus_test_local_macro => hydro_test_local_macro}/macro.macro_F395CBD2498F0C0291586D539B1C53802F7DE61514FE27DB041B53B7578FA011!.html (100%) create mode 100644 doc/hydro_test_local_macro/macro.macro_F395CBD2498F0C0291586D539B1C53802F7DE61514FE27DB041B53B7578FA011.html rename doc/{hydroflow_plus_test_local_macro => hydro_test_local_macro}/sidebar-items.js (100%) delete mode 100644 doc/hydroflow_plus/__staged/builder/macro.q.html delete mode 100644 doc/hydroflow_plus/__staged/deploy_runtime/macro.q.html delete mode 100644 doc/hydroflow_plus/__staged/location/macro.q.html delete mode 100644 doc/hydroflow_plus/__staged/location/tick/macro.q.html delete mode 100644 doc/hydroflow_plus/__staged/macro.q.html delete mode 100644 doc/hydroflow_plus/__staged/optional/macro.q.html delete mode 100644 doc/hydroflow_plus/__staged/rewrites/profiler/macro.q.html delete mode 100644 doc/hydroflow_plus/__staged/rewrites/profiler/myself/macro.q.html delete mode 100644 doc/hydroflow_plus/__staged/rewrites/properties/macro.q.html delete mode 100644 doc/hydroflow_plus/__staged/singleton/macro.q.html delete mode 100644 doc/hydroflow_plus/__staged/stream/macro.q.html delete mode 100644 doc/hydroflow_plus/all.html delete mode 100644 doc/hydroflow_plus/boundedness/index.html delete mode 100644 doc/hydroflow_plus/builder/built/index.html delete mode 100644 doc/hydroflow_plus/builder/compiled/index.html delete mode 100644 doc/hydroflow_plus/builder/constant.FLOW_USED_MESSAGE.html delete mode 100644 doc/hydroflow_plus/builder/deploy/index.html delete mode 100644 doc/hydroflow_plus/builder/index.html delete mode 100644 doc/hydroflow_plus/builder/type.FlowState.html delete mode 100644 doc/hydroflow_plus/cycle/enum.ForwardRefMarker.html delete mode 100644 doc/hydroflow_plus/cycle/index.html delete mode 100644 doc/hydroflow_plus/cycle/trait.CycleCollection.html delete mode 100644 doc/hydroflow_plus/cycle/trait.CycleCollectionWithInitial.html delete mode 100644 doc/hydroflow_plus/cycle/trait.CycleComplete.html delete mode 100644 doc/hydroflow_plus/cycle/trait.DeferTick.html delete mode 100644 doc/hydroflow_plus/deploy/in_memory_graph/index.html delete mode 100644 doc/hydroflow_plus/deploy/in_memory_graph/struct.MultiGraph.html delete mode 100644 doc/hydroflow_plus/deploy/in_memory_graph/struct.SingleProcessGraph.html delete mode 100644 doc/hydroflow_plus/deploy/index.html delete mode 100644 doc/hydroflow_plus/deploy/macro_runtime/index.html delete mode 100644 doc/hydroflow_plus/deploy/macro_runtime/struct.DeployRuntime.html delete mode 100644 doc/hydroflow_plus/deploy/trait.ClusterSpec.html delete mode 100644 doc/hydroflow_plus/deploy/trait.Deploy.html delete mode 100644 doc/hydroflow_plus/deploy/trait.ExternalSpec.html delete mode 100644 doc/hydroflow_plus/deploy/trait.IntoProcessSpec.html delete mode 100644 doc/hydroflow_plus/deploy/trait.LocalDeploy.html delete mode 100644 doc/hydroflow_plus/deploy/trait.Node.html delete mode 100644 doc/hydroflow_plus/deploy/trait.ProcessSpec.html delete mode 100644 doc/hydroflow_plus/deploy_runtime/fn.cluster_members.html delete mode 100644 doc/hydroflow_plus/deploy_runtime/fn.cluster_self_id.html delete mode 100644 doc/hydroflow_plus/deploy_runtime/fn.deploy_e2o.html delete mode 100644 doc/hydroflow_plus/deploy_runtime/fn.deploy_m2m.html delete mode 100644 doc/hydroflow_plus/deploy_runtime/fn.deploy_m2o.html delete mode 100644 doc/hydroflow_plus/deploy_runtime/fn.deploy_o2e.html delete mode 100644 doc/hydroflow_plus/deploy_runtime/fn.deploy_o2m.html delete mode 100644 doc/hydroflow_plus/deploy_runtime/fn.deploy_o2o.html delete mode 100644 doc/hydroflow_plus/deploy_runtime/index.html delete mode 100644 doc/hydroflow_plus/index.html delete mode 100644 doc/hydroflow_plus/ir/enum.HfPlusNode.html delete mode 100644 doc/hydroflow_plus/ir/fn.dbg_dedup_tee.html delete mode 100644 doc/hydroflow_plus/ir/index.html delete mode 100644 doc/hydroflow_plus/ir/sidebar-items.js delete mode 100644 doc/hydroflow_plus/ir/type.SeenTees.html delete mode 100644 doc/hydroflow_plus/location/can_send/index.html delete mode 100644 doc/hydroflow_plus/location/can_send/trait.CanSend.html delete mode 100644 doc/hydroflow_plus/location/cluster/cluster_id/index.html delete mode 100644 doc/hydroflow_plus/location/cluster/index.html delete mode 100644 doc/hydroflow_plus/location/cluster/static.CLUSTER_SELF_ID.html delete mode 100644 doc/hydroflow_plus/location/cluster/trait.IsCluster.html delete mode 100644 doc/hydroflow_plus/location/external_process/index.html delete mode 100644 doc/hydroflow_plus/location/fn.check_matching_location.html delete mode 100644 doc/hydroflow_plus/location/index.html delete mode 100644 doc/hydroflow_plus/location/process/index.html delete mode 100644 doc/hydroflow_plus/location/tick/index.html delete mode 100644 doc/hydroflow_plus/location/tick/trait.NoTick.html delete mode 100644 doc/hydroflow_plus/location/tick/trait.NoTimestamp.html delete mode 100644 doc/hydroflow_plus/location/trait.Location.html delete mode 100644 doc/hydroflow_plus/macro.q.html delete mode 100644 doc/hydroflow_plus/optional/index.html delete mode 100644 doc/hydroflow_plus/optional/struct.Optional.html delete mode 100644 doc/hydroflow_plus/rewrites/index.html delete mode 100644 doc/hydroflow_plus/rewrites/persist_pullup/fn.persist_pullup.html delete mode 100644 doc/hydroflow_plus/rewrites/persist_pullup/index.html delete mode 100644 doc/hydroflow_plus/rewrites/profiler/fn.increment_counter.html delete mode 100644 doc/hydroflow_plus/rewrites/profiler/fn.profiling.html delete mode 100644 doc/hydroflow_plus/rewrites/profiler/index.html delete mode 100644 doc/hydroflow_plus/rewrites/properties/fn.properties_optimize.html delete mode 100644 doc/hydroflow_plus/rewrites/properties/index.html delete mode 100644 doc/hydroflow_plus/runtime_context/index.html delete mode 100644 doc/hydroflow_plus/runtime_context/static.RUNTIME_CONTEXT.html delete mode 100644 doc/hydroflow_plus/singleton/index.html delete mode 100644 doc/hydroflow_plus/singleton/struct.Singleton.html delete mode 100644 doc/hydroflow_plus/singleton/trait.ZipResult.html delete mode 100644 doc/hydroflow_plus/stream/index.html delete mode 100644 doc/hydroflow_plus/stream/struct.Stream.html delete mode 100644 doc/hydroflow_plus/stream/trait.MinOrder.html delete mode 100644 doc/hydroflow_plus_std/all.html delete mode 100644 doc/hydroflow_plus_std/index.html delete mode 100644 doc/hydroflow_plus_std/quorum/fn.collect_quorum.html delete mode 100644 doc/hydroflow_plus_std/quorum/fn.collect_quorum_with_response.html delete mode 100644 doc/hydroflow_plus_std/quorum/index.html delete mode 100644 doc/hydroflow_plus_std/request_response/fn.join_responses.html delete mode 100644 doc/hydroflow_plus_std/request_response/index.html delete mode 100644 doc/hydroflow_plus_test/all.html delete mode 100644 doc/hydroflow_plus_test/cluster/compute_pi/fn.compute_pi.html delete mode 100644 doc/hydroflow_plus_test/cluster/compute_pi/index.html delete mode 100644 doc/hydroflow_plus_test/cluster/index.html delete mode 100644 doc/hydroflow_plus_test/cluster/many_to_many/fn.many_to_many.html delete mode 100644 doc/hydroflow_plus_test/cluster/many_to_many/index.html delete mode 100644 doc/hydroflow_plus_test/cluster/map_reduce/fn.map_reduce.html delete mode 100644 doc/hydroflow_plus_test/cluster/map_reduce/index.html delete mode 100644 doc/hydroflow_plus_test/cluster/paxos/fn.paxos_core.html delete mode 100644 doc/hydroflow_plus_test/cluster/paxos/index.html delete mode 100644 doc/hydroflow_plus_test/cluster/paxos/trait.PaxosPayload.html delete mode 100644 doc/hydroflow_plus_test/cluster/paxos_bench/fn.paxos_bench.html delete mode 100644 doc/hydroflow_plus_test/cluster/paxos_bench/index.html delete mode 100644 doc/hydroflow_plus_test/cluster/paxos_kv/fn.paxos_kv.html delete mode 100644 doc/hydroflow_plus_test/cluster/paxos_kv/fn.replica.html delete mode 100644 doc/hydroflow_plus_test/cluster/paxos_kv/index.html delete mode 100644 doc/hydroflow_plus_test/cluster/paxos_kv/struct.Replica.html delete mode 100644 doc/hydroflow_plus_test/cluster/paxos_kv/trait.KvKey.html delete mode 100644 doc/hydroflow_plus_test/cluster/paxos_kv/trait.KvValue.html delete mode 100644 doc/hydroflow_plus_test/cluster/simple_cluster/fn.decouple_cluster.html delete mode 100644 doc/hydroflow_plus_test/cluster/simple_cluster/fn.decouple_process.html delete mode 100644 doc/hydroflow_plus_test/cluster/simple_cluster/fn.simple_cluster.html delete mode 100644 doc/hydroflow_plus_test/cluster/simple_cluster/index.html delete mode 100644 doc/hydroflow_plus_test/cluster/two_pc/fn.two_pc.html delete mode 100644 doc/hydroflow_plus_test/cluster/two_pc/index.html delete mode 100644 doc/hydroflow_plus_test/distributed/first_ten/fn.first_ten_distributed.html delete mode 100644 doc/hydroflow_plus_test/distributed/first_ten/index.html delete mode 100644 doc/hydroflow_plus_test/distributed/index.html delete mode 100644 doc/hydroflow_plus_test/index.html delete mode 100644 doc/hydroflow_plus_test_local/all.html delete mode 100644 doc/hydroflow_plus_test_local/index.html delete mode 100644 doc/hydroflow_plus_test_local/local/chat_app/index.html delete mode 100644 doc/hydroflow_plus_test_local/local/chat_app/macro.chat_app.html delete mode 100644 doc/hydroflow_plus_test_local/local/compute_pi/fn.compute_pi.html delete mode 100644 doc/hydroflow_plus_test_local/local/compute_pi/index.html delete mode 100644 doc/hydroflow_plus_test_local/local/compute_pi/macro.compute_pi_runtime.html delete mode 100644 doc/hydroflow_plus_test_local/local/count_elems/fn.count_elems_generic.html delete mode 100644 doc/hydroflow_plus_test_local/local/count_elems/index.html delete mode 100644 doc/hydroflow_plus_test_local/local/count_elems/macro.count_elems.html delete mode 100644 doc/hydroflow_plus_test_local/local/first_ten/fn.first_ten.html delete mode 100644 doc/hydroflow_plus_test_local/local/first_ten/index.html delete mode 100644 doc/hydroflow_plus_test_local/local/first_ten/macro.first_ten_runtime.html delete mode 100644 doc/hydroflow_plus_test_local/local/graph_reachability/index.html delete mode 100644 doc/hydroflow_plus_test_local/local/graph_reachability/macro.graph_reachability.html delete mode 100644 doc/hydroflow_plus_test_local/local/index.html delete mode 100644 doc/hydroflow_plus_test_local/local/negation/index.html delete mode 100644 doc/hydroflow_plus_test_local/local/negation/macro.test_anti_join.html delete mode 100644 doc/hydroflow_plus_test_local/local/negation/macro.test_difference.html delete mode 100644 doc/hydroflow_plus_test_local/local/teed_join/index.html delete mode 100644 doc/hydroflow_plus_test_local/local/teed_join/macro.teed_join.html delete mode 100644 doc/hydroflow_plus_test_local_macro/all.html delete mode 100644 doc/hydroflow_plus_test_local_macro/index.html delete mode 100644 doc/hydroflow_plus_test_local_macro/macro.macro_0317123C21A365AAC8F7C904D715749D52C4408A36766C2EA4952E8548FDF2CF.html delete mode 100644 doc/hydroflow_plus_test_local_macro/macro.macro_1C0FE8523A30CEE48113F7CA958EDC55F81545A0CB32FC13A73E2E0B86C69967.html delete mode 100644 doc/hydroflow_plus_test_local_macro/macro.macro_88FF4FF66B42C3C3EA6A3A776AD3BBB5A0E778C545379CD74D8134F1BDE2467B.html delete mode 100644 doc/hydroflow_plus_test_local_macro/macro.macro_B8B04B5C82DD37E36A884DD155638B3BB603ECEE77232C187CB7749C8C3633D4.html delete mode 100644 doc/hydroflow_plus_test_local_macro/macro.macro_DBD6835F761FB7B759E0367E64D404553FF74D0CDA5EC33E48C8D94A09338A20.html delete mode 100644 doc/hydroflow_plus_test_local_macro/macro.macro_E29C1936765CFB0AEE40C7D85645A072229E6DD9B20D78BFFDFDF0B90F8550E2.html delete mode 100644 doc/hydroflow_plus_test_local_macro/macro.macro_F32B896FDC4E575B912C55F307713AE1C491601401B080576A445697B5F5D872.html delete mode 100644 doc/hydroflow_plus_test_local_macro/macro.macro_F395CBD2498F0C0291586D539B1C53802F7DE61514FE27DB041B53B7578FA011.html create mode 100644 doc/search.desc/hydro_lang/hydro_lang-desc-0-.js create mode 100644 doc/search.desc/hydro_std/hydro_std-desc-0-.js create mode 100644 doc/search.desc/hydro_test/hydro_test-desc-0-.js create mode 100644 doc/search.desc/hydro_test_local/hydro_test_local-desc-0-.js create mode 100644 doc/search.desc/hydro_test_local_macro/hydro_test_local_macro-desc-0-.js delete mode 100644 doc/search.desc/hydroflow_plus/hydroflow_plus-desc-0-.js delete mode 100644 doc/search.desc/hydroflow_plus_std/hydroflow_plus_std-desc-0-.js delete mode 100644 doc/search.desc/hydroflow_plus_test/hydroflow_plus_test-desc-0-.js delete mode 100644 doc/search.desc/hydroflow_plus_test_local/hydroflow_plus_test_local-desc-0-.js delete mode 100644 doc/search.desc/hydroflow_plus_test_local_macro/hydroflow_plus_test_local_macro-desc-0-.js rename doc/src/{hydroflow_plus_std/lib.rs.html => hydro_lang/boundedness.rs.html} (51%) rename doc/src/{hydroflow_plus => hydro_lang}/builder/built.rs.html (83%) rename doc/src/{hydroflow_plus => hydro_lang}/builder/compiled.rs.html (83%) rename doc/src/{hydroflow_plus => hydro_lang}/builder/deploy.rs.html (91%) rename doc/src/{hydroflow_plus => hydro_lang}/builder/mod.rs.html (89%) rename doc/src/{hydroflow_plus => hydro_lang}/cycle.rs.html (72%) rename doc/src/{hydroflow_plus => hydro_lang}/deploy/in_memory_graph.rs.html (78%) rename doc/src/{hydroflow_plus => hydro_lang}/deploy/macro_runtime.rs.html (92%) rename doc/src/{hydroflow_plus => hydro_lang}/deploy/mod.rs.html (92%) rename doc/src/{hydroflow_plus => hydro_lang}/deploy_runtime.rs.html (83%) create mode 100644 doc/src/hydro_lang/home/runner/work/hydroflow/hydroflow/target/debug/build/hydro_lang-c5a496d5f2fb16e4/out/lib_pub.rs.html rename doc/src/{hydroflow_plus => hydro_lang}/ir.rs.html (91%) rename doc/src/{hydroflow_plus => hydro_lang}/lib.rs.html (63%) rename doc/src/{hydroflow_plus => hydro_lang}/location/can_send.rs.html (77%) rename doc/src/{hydroflow_plus => hydro_lang}/location/cluster/cluster_id.rs.html (75%) rename doc/src/{hydroflow_plus => hydro_lang}/location/cluster/mod.rs.html (84%) rename doc/src/{hydroflow_plus => hydro_lang}/location/external_process.rs.html (84%) rename doc/src/{hydroflow_plus => hydro_lang}/location/mod.rs.html (87%) rename doc/src/{hydroflow_plus => hydro_lang}/location/process.rs.html (62%) rename doc/src/{hydroflow_plus => hydro_lang}/location/tick.rs.html (91%) rename doc/src/{hydroflow_plus => hydro_lang}/optional.rs.html (88%) create mode 100644 doc/src/hydro_lang/rewrites/mod.rs.html rename doc/src/{hydroflow_plus => hydro_lang}/rewrites/persist_pullup.rs.html (71%) rename doc/src/{hydroflow_plus => hydro_lang}/rewrites/profiler.rs.html (79%) rename doc/src/{hydroflow_plus => hydro_lang}/rewrites/properties.rs.html (79%) rename doc/src/{hydroflow_plus => hydro_lang}/runtime_context.rs.html (72%) rename doc/src/{hydroflow_plus => hydro_lang}/singleton.rs.html (89%) create mode 100644 doc/src/hydro_lang/staging_util.rs.html rename doc/src/{hydroflow_plus => hydro_lang}/stream.rs.html (95%) create mode 100644 doc/src/hydro_std/home/runner/work/hydroflow/hydroflow/target/debug/build/hydro_std-4cd7777ccf0024f3/out/lib_pub.rs.html create mode 100644 doc/src/hydro_std/lib.rs.html rename doc/src/{hydroflow_plus_std => hydro_std}/quorum.rs.html (86%) rename doc/src/{hydroflow_plus_std => hydro_std}/request_response.rs.html (63%) rename doc/src/{hydroflow_plus_test => hydro_test}/cluster/compute_pi.rs.html (70%) rename doc/src/{hydroflow_plus_test => hydro_test}/cluster/many_to_many.rs.html (69%) rename doc/src/{hydroflow_plus_test => hydro_test}/cluster/map_reduce.rs.html (70%) create mode 100644 doc/src/hydro_test/cluster/mod.rs.html rename doc/src/{hydroflow_plus_test => hydro_test}/cluster/paxos.rs.html (96%) rename doc/src/{hydroflow_plus_test => hydro_test}/cluster/paxos_bench.rs.html (91%) rename doc/src/{hydroflow_plus_test => hydro_test}/cluster/paxos_kv.rs.html (89%) rename doc/src/{hydroflow_plus_test => hydro_test}/cluster/simple_cluster.rs.html (85%) rename doc/src/{hydroflow_plus_test => hydro_test}/cluster/two_pc.rs.html (78%) rename doc/src/{hydroflow_plus_test => hydro_test}/distributed/first_ten.rs.html (73%) create mode 100644 doc/src/hydro_test/distributed/mod.rs.html create mode 100644 doc/src/hydro_test/lib.rs.html create mode 100644 doc/src/hydro_test_local/home/runner/work/hydroflow/hydroflow/target/debug/build/hydro_test_local-dd0949b1ee4f59a5/out/lib_pub.rs.html create mode 100644 doc/src/hydro_test_local/lib.rs.html rename doc/src/{hydroflow_plus_test_local => hydro_test_local}/local/chat_app.rs.html (83%) rename doc/src/{hydroflow_plus_test_local => hydro_test_local}/local/compute_pi.rs.html (65%) rename doc/src/{hydroflow_plus_test_local => hydro_test_local}/local/count_elems.rs.html (69%) create mode 100644 doc/src/hydro_test_local/local/first_ten.rs.html rename doc/src/{hydroflow_plus_test_local => hydro_test_local}/local/graph_reachability.rs.html (73%) create mode 100644 doc/src/hydro_test_local/local/mod.rs.html rename doc/src/{hydroflow_plus_test_local => hydro_test_local}/local/negation.rs.html (89%) rename doc/src/{hydroflow_plus_test_local => hydro_test_local}/local/teed_join.rs.html (80%) rename doc/src/{hydroflow_plus_test_local_macro/home/runner/work/hydroflow/hydroflow/target/debug/build/hydroflow_plus_test_local_macro-eb9acefefb28af3f => hydro_test_local_macro/home/runner/work/hydroflow/hydroflow/target/debug/build/hydro_test_local_macro-17e9fc4f6209e457}/out/lib_macro.rs.html (67%) create mode 100644 doc/src/hydro_test_local_macro/lib.rs.html rename doc/src/{hydroflow_plus_test_local_macro => hydro_test_local_macro}/local/chat_app.rs.html (83%) rename doc/src/{hydroflow_plus_test_local_macro => hydro_test_local_macro}/local/compute_pi.rs.html (65%) rename doc/src/{hydroflow_plus_test_local_macro => hydro_test_local_macro}/local/count_elems.rs.html (68%) create mode 100644 doc/src/hydro_test_local_macro/local/first_ten.rs.html rename doc/src/{hydroflow_plus_test_local_macro => hydro_test_local_macro}/local/graph_reachability.rs.html (73%) create mode 100644 doc/src/hydro_test_local_macro/local/mod.rs.html rename doc/src/{hydroflow_plus_test_local_macro => hydro_test_local_macro}/local/negation.rs.html (89%) rename doc/src/{hydroflow_plus_test_local_macro => hydro_test_local_macro}/local/teed_join.rs.html (80%) delete mode 100644 doc/src/hydroflow_plus/boundedness.rs.html delete mode 100644 doc/src/hydroflow_plus/home/runner/work/hydroflow/hydroflow/target/debug/build/hydroflow_plus-b7baca19aeecfedb/out/lib_pub.rs.html delete mode 100644 doc/src/hydroflow_plus/rewrites/mod.rs.html delete mode 100644 doc/src/hydroflow_plus/staging_util.rs.html delete mode 100644 doc/src/hydroflow_plus_std/home/runner/work/hydroflow/hydroflow/target/debug/build/hydroflow_plus_std-bb1028ab13681a15/out/lib_pub.rs.html delete mode 100644 doc/src/hydroflow_plus_test/cluster/mod.rs.html delete mode 100644 doc/src/hydroflow_plus_test/distributed/mod.rs.html delete mode 100644 doc/src/hydroflow_plus_test/lib.rs.html delete mode 100644 doc/src/hydroflow_plus_test_local/home/runner/work/hydroflow/hydroflow/target/debug/build/hydroflow_plus_test_local-1c2a745bf14c0570/out/lib_pub.rs.html delete mode 100644 doc/src/hydroflow_plus_test_local/lib.rs.html delete mode 100644 doc/src/hydroflow_plus_test_local/local/first_ten.rs.html delete mode 100644 doc/src/hydroflow_plus_test_local/local/mod.rs.html delete mode 100644 doc/src/hydroflow_plus_test_local_macro/lib.rs.html delete mode 100644 doc/src/hydroflow_plus_test_local_macro/local/first_ten.rs.html delete mode 100644 doc/src/hydroflow_plus_test_local_macro/local/mod.rs.html rename doc/trait.impl/{hydroflow_plus => hydro_lang}/cycle/trait.CycleCollection.js (63%) rename doc/trait.impl/{hydroflow_plus => hydro_lang}/cycle/trait.CycleCollectionWithInitial.js (63%) rename doc/trait.impl/{hydroflow_plus => hydro_lang}/cycle/trait.CycleComplete.js (63%) rename doc/trait.impl/{hydroflow_plus => hydro_lang}/cycle/trait.DeferTick.js (63%) rename doc/trait.impl/{hydroflow_plus => hydro_lang}/deploy/trait.ClusterSpec.js (63%) rename doc/trait.impl/{hydroflow_plus => hydro_lang}/deploy/trait.Deploy.js (63%) rename doc/trait.impl/{hydroflow_plus => hydro_lang}/deploy/trait.ExternalSpec.js (63%) rename doc/trait.impl/{hydroflow_plus => hydro_lang}/deploy/trait.IntoProcessSpec.js (63%) rename doc/trait.impl/{hydroflow_plus => hydro_lang}/deploy/trait.LocalDeploy.js (63%) rename doc/trait.impl/{hydroflow_plus => hydro_lang}/deploy/trait.Node.js (63%) rename doc/trait.impl/{hydroflow_plus => hydro_lang}/deploy/trait.ProcessSpec.js (63%) rename doc/trait.impl/{hydroflow_plus => hydro_lang}/deploy/trait.RegisterPort.js (63%) rename doc/trait.impl/{hydroflow_plus => hydro_lang}/location/can_send/trait.CanSend.js (63%) rename doc/trait.impl/{hydroflow_plus => hydro_lang}/location/cluster/trait.IsCluster.js (63%) rename doc/trait.impl/{hydroflow_plus => hydro_lang}/location/tick/trait.NoTick.js (63%) rename doc/trait.impl/{hydroflow_plus => hydro_lang}/location/tick/trait.NoTimestamp.js (63%) rename doc/trait.impl/{hydroflow_plus => hydro_lang}/location/trait.Location.js (63%) rename doc/trait.impl/{hydroflow_plus => hydro_lang}/singleton/trait.ZipResult.js (63%) rename doc/trait.impl/{hydroflow_plus => hydro_lang}/stream/trait.MinOrder.js (63%) create mode 100644 doc/trait.impl/hydro_test/cluster/paxos/trait.PaxosPayload.js create mode 100644 doc/trait.impl/hydro_test/cluster/paxos_kv/trait.KvKey.js create mode 100644 doc/trait.impl/hydro_test/cluster/paxos_kv/trait.KvValue.js delete mode 100644 doc/trait.impl/hydroflow_plus_test/cluster/paxos/trait.PaxosPayload.js delete mode 100644 doc/trait.impl/hydroflow_plus_test/cluster/paxos_kv/trait.KvKey.js delete mode 100644 doc/trait.impl/hydroflow_plus_test/cluster/paxos_kv/trait.KvValue.js diff --git a/doc/crates.js b/doc/crates.js index cfc4874f5320..1d85b63d94e0 100644 --- a/doc/crates.js +++ b/doc/crates.js @@ -1,2 +1,2 @@ -window.ALL_CRATES = ["gossip_cli","gossip_kv","gossip_server","hydro_cli","hydro_deploy","hydroflow","hydroflow_datalog","hydroflow_datalog_core","hydroflow_deploy_integration","hydroflow_lang","hydroflow_macro","hydroflow_plus","hydroflow_plus_std","hydroflow_plus_test","hydroflow_plus_test_local","hydroflow_plus_test_local_macro","latency_measure","lattices","lattices_macro","load_test_server","multiplatform_test","pn","pn_delta","pusherator","relalg","stageleft","stageleft_macro","stageleft_test","stageleft_test_macro","stageleft_tool","topolotree","variadics","variadics_macro","website_playground"]; -//{"start":21,"fragment_lengths":[12,12,16,12,15,12,20,25,31,17,18,17,21,22,28,34,18,11,17,19,21,5,11,13,9,12,18,17,23,17,13,12,18,21]} \ No newline at end of file +window.ALL_CRATES = ["gossip_cli","gossip_kv","gossip_server","hydro_cli","hydro_deploy","hydro_lang","hydro_std","hydro_test","hydro_test_local","hydro_test_local_macro","hydroflow","hydroflow_datalog","hydroflow_datalog_core","hydroflow_deploy_integration","hydroflow_lang","hydroflow_macro","latency_measure","lattices","lattices_macro","load_test_server","multiplatform_test","pn","pn_delta","pusherator","relalg","stageleft","stageleft_macro","stageleft_test","stageleft_test_macro","stageleft_tool","topolotree","variadics","variadics_macro","website_playground"]; +//{"start":21,"fragment_lengths":[12,12,16,12,15,13,12,13,19,25,12,20,25,31,17,18,18,11,17,19,21,5,11,13,9,12,18,17,23,17,13,12,18,21]} \ No newline at end of file diff --git a/doc/hydroflow_plus/__staged/builder/macro.q!.html b/doc/hydro_lang/__staged/builder/macro.q!.html similarity index 100% rename from doc/hydroflow_plus/__staged/builder/macro.q!.html rename to doc/hydro_lang/__staged/builder/macro.q!.html diff --git a/doc/hydro_lang/__staged/builder/macro.q.html b/doc/hydro_lang/__staged/builder/macro.q.html new file mode 100644 index 000000000000..1dcf195c731f --- /dev/null +++ b/doc/hydro_lang/__staged/builder/macro.q.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../../hydro_lang/macro.q.html...

+ + + \ No newline at end of file diff --git a/doc/hydroflow_plus/__staged/deploy_runtime/macro.q!.html b/doc/hydro_lang/__staged/deploy_runtime/macro.q!.html similarity index 100% rename from doc/hydroflow_plus/__staged/deploy_runtime/macro.q!.html rename to doc/hydro_lang/__staged/deploy_runtime/macro.q!.html diff --git a/doc/hydro_lang/__staged/deploy_runtime/macro.q.html b/doc/hydro_lang/__staged/deploy_runtime/macro.q.html new file mode 100644 index 000000000000..1dcf195c731f --- /dev/null +++ b/doc/hydro_lang/__staged/deploy_runtime/macro.q.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../../hydro_lang/macro.q.html...

+ + + \ No newline at end of file diff --git a/doc/hydroflow_plus/__staged/location/macro.q!.html b/doc/hydro_lang/__staged/location/macro.q!.html similarity index 100% rename from doc/hydroflow_plus/__staged/location/macro.q!.html rename to doc/hydro_lang/__staged/location/macro.q!.html diff --git a/doc/hydro_lang/__staged/location/macro.q.html b/doc/hydro_lang/__staged/location/macro.q.html new file mode 100644 index 000000000000..1dcf195c731f --- /dev/null +++ b/doc/hydro_lang/__staged/location/macro.q.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../../hydro_lang/macro.q.html...

+ + + \ No newline at end of file diff --git a/doc/hydroflow_plus/__staged/location/tick/macro.q!.html b/doc/hydro_lang/__staged/location/tick/macro.q!.html similarity index 100% rename from doc/hydroflow_plus/__staged/location/tick/macro.q!.html rename to doc/hydro_lang/__staged/location/tick/macro.q!.html diff --git a/doc/hydro_lang/__staged/location/tick/macro.q.html b/doc/hydro_lang/__staged/location/tick/macro.q.html new file mode 100644 index 000000000000..eba17e64922a --- /dev/null +++ b/doc/hydro_lang/__staged/location/tick/macro.q.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../../../hydro_lang/macro.q.html...

+ + + \ No newline at end of file diff --git a/doc/hydroflow_plus/__staged/macro.q!.html b/doc/hydro_lang/__staged/macro.q!.html similarity index 100% rename from doc/hydroflow_plus/__staged/macro.q!.html rename to doc/hydro_lang/__staged/macro.q!.html diff --git a/doc/hydro_lang/__staged/macro.q.html b/doc/hydro_lang/__staged/macro.q.html new file mode 100644 index 000000000000..db06a8fd1c21 --- /dev/null +++ b/doc/hydro_lang/__staged/macro.q.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../hydro_lang/macro.q.html...

+ + + \ No newline at end of file diff --git a/doc/hydroflow_plus/__staged/optional/macro.q!.html b/doc/hydro_lang/__staged/optional/macro.q!.html similarity index 100% rename from doc/hydroflow_plus/__staged/optional/macro.q!.html rename to doc/hydro_lang/__staged/optional/macro.q!.html diff --git a/doc/hydro_lang/__staged/optional/macro.q.html b/doc/hydro_lang/__staged/optional/macro.q.html new file mode 100644 index 000000000000..1dcf195c731f --- /dev/null +++ b/doc/hydro_lang/__staged/optional/macro.q.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../../hydro_lang/macro.q.html...

+ + + \ No newline at end of file diff --git a/doc/hydroflow_plus/__staged/rewrites/profiler/macro.q!.html b/doc/hydro_lang/__staged/rewrites/profiler/macro.q!.html similarity index 100% rename from doc/hydroflow_plus/__staged/rewrites/profiler/macro.q!.html rename to doc/hydro_lang/__staged/rewrites/profiler/macro.q!.html diff --git a/doc/hydro_lang/__staged/rewrites/profiler/macro.q.html b/doc/hydro_lang/__staged/rewrites/profiler/macro.q.html new file mode 100644 index 000000000000..eba17e64922a --- /dev/null +++ b/doc/hydro_lang/__staged/rewrites/profiler/macro.q.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../../../hydro_lang/macro.q.html...

+ + + \ No newline at end of file diff --git a/doc/hydroflow_plus/__staged/rewrites/profiler/myself/macro.q!.html b/doc/hydro_lang/__staged/rewrites/profiler/myself/macro.q!.html similarity index 100% rename from doc/hydroflow_plus/__staged/rewrites/profiler/myself/macro.q!.html rename to doc/hydro_lang/__staged/rewrites/profiler/myself/macro.q!.html diff --git a/doc/hydro_lang/__staged/rewrites/profiler/myself/macro.q.html b/doc/hydro_lang/__staged/rewrites/profiler/myself/macro.q.html new file mode 100644 index 000000000000..27d05b9fd727 --- /dev/null +++ b/doc/hydro_lang/__staged/rewrites/profiler/myself/macro.q.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../../../../hydro_lang/macro.q.html...

+ + + \ No newline at end of file diff --git a/doc/hydroflow_plus/__staged/rewrites/properties/macro.q!.html b/doc/hydro_lang/__staged/rewrites/properties/macro.q!.html similarity index 100% rename from doc/hydroflow_plus/__staged/rewrites/properties/macro.q!.html rename to doc/hydro_lang/__staged/rewrites/properties/macro.q!.html diff --git a/doc/hydro_lang/__staged/rewrites/properties/macro.q.html b/doc/hydro_lang/__staged/rewrites/properties/macro.q.html new file mode 100644 index 000000000000..eba17e64922a --- /dev/null +++ b/doc/hydro_lang/__staged/rewrites/properties/macro.q.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../../../hydro_lang/macro.q.html...

+ + + \ No newline at end of file diff --git a/doc/hydroflow_plus/__staged/singleton/macro.q!.html b/doc/hydro_lang/__staged/singleton/macro.q!.html similarity index 100% rename from doc/hydroflow_plus/__staged/singleton/macro.q!.html rename to doc/hydro_lang/__staged/singleton/macro.q!.html diff --git a/doc/hydro_lang/__staged/singleton/macro.q.html b/doc/hydro_lang/__staged/singleton/macro.q.html new file mode 100644 index 000000000000..1dcf195c731f --- /dev/null +++ b/doc/hydro_lang/__staged/singleton/macro.q.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../../hydro_lang/macro.q.html...

+ + + \ No newline at end of file diff --git a/doc/hydroflow_plus/__staged/stream/macro.q!.html b/doc/hydro_lang/__staged/stream/macro.q!.html similarity index 100% rename from doc/hydroflow_plus/__staged/stream/macro.q!.html rename to doc/hydro_lang/__staged/stream/macro.q!.html diff --git a/doc/hydro_lang/__staged/stream/macro.q.html b/doc/hydro_lang/__staged/stream/macro.q.html new file mode 100644 index 000000000000..1dcf195c731f --- /dev/null +++ b/doc/hydro_lang/__staged/stream/macro.q.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

Redirecting to ../../../hydro_lang/macro.q.html...

+ + + \ No newline at end of file diff --git a/doc/hydro_lang/all.html b/doc/hydro_lang/all.html new file mode 100644 index 000000000000..2e2e8214efd8 --- /dev/null +++ b/doc/hydro_lang/all.html @@ -0,0 +1 @@ +List of all items in this crate

List of all items

Structs

Enums

Traits

Macros

Functions

Type Aliases

Statics

Constants

\ No newline at end of file diff --git a/doc/hydroflow_plus/boundedness/enum.Unbounded.html b/doc/hydro_lang/boundedness/enum.Bounded.html similarity index 71% rename from doc/hydroflow_plus/boundedness/enum.Unbounded.html rename to doc/hydro_lang/boundedness/enum.Bounded.html index e19640fee69f..b717e62336f8 100644 --- a/doc/hydroflow_plus/boundedness/enum.Unbounded.html +++ b/doc/hydro_lang/boundedness/enum.Bounded.html @@ -1,6 +1,6 @@ -Unbounded in hydroflow_plus::boundedness - Rust

Enum hydroflow_plus::boundedness::Unbounded

source ·
pub enum Unbounded {}
Expand description

Marks the stream as being unbounded, which means that it is not -guaranteed to be complete in finite time.

-

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +Bounded in hydro_lang::boundedness - Rust

Enum hydro_lang::boundedness::Bounded

source ·
pub enum Bounded {}
Expand description

Marks the stream as being bounded, which means that it is guaranteed +to be complete in finite time.

+

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -17,7 +17,7 @@ F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a diff --git a/doc/hydroflow_plus/boundedness/enum.Bounded.html b/doc/hydro_lang/boundedness/enum.Unbounded.html similarity index 75% rename from doc/hydroflow_plus/boundedness/enum.Bounded.html rename to doc/hydro_lang/boundedness/enum.Unbounded.html index c59704bca496..6593da2074f0 100644 --- a/doc/hydroflow_plus/boundedness/enum.Bounded.html +++ b/doc/hydro_lang/boundedness/enum.Unbounded.html @@ -1,6 +1,6 @@ -Bounded in hydroflow_plus::boundedness - Rust

Enum hydroflow_plus::boundedness::Bounded

source ·
pub enum Bounded {}
Expand description

Marks the stream as being bounded, which means that it is guaranteed -to be complete in finite time.

-

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +Unbounded in hydro_lang::boundedness - Rust

Enum hydro_lang::boundedness::Unbounded

source ·
pub enum Unbounded {}
Expand description

Marks the stream as being unbounded, which means that it is not +guaranteed to be complete in finite time.

+

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -17,7 +17,7 @@ F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a diff --git a/doc/hydro_lang/boundedness/index.html b/doc/hydro_lang/boundedness/index.html new file mode 100644 index 000000000000..f23c2e58aff5 --- /dev/null +++ b/doc/hydro_lang/boundedness/index.html @@ -0,0 +1,3 @@ +hydro_lang::boundedness - Rust

Module hydro_lang::boundedness

source ·

Enums§

  • Marks the stream as being bounded, which means that it is guaranteed +to be complete in finite time.
  • Marks the stream as being unbounded, which means that it is not +guaranteed to be complete in finite time.
\ No newline at end of file diff --git a/doc/hydroflow_plus/boundedness/sidebar-items.js b/doc/hydro_lang/boundedness/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus/boundedness/sidebar-items.js rename to doc/hydro_lang/boundedness/sidebar-items.js diff --git a/doc/hydro_lang/builder/built/index.html b/doc/hydro_lang/builder/built/index.html new file mode 100644 index 000000000000..599a2a64cc54 --- /dev/null +++ b/doc/hydro_lang/builder/built/index.html @@ -0,0 +1 @@ +hydro_lang::builder::built - Rust

Module hydro_lang::builder::built

source ·

Structs§

\ No newline at end of file diff --git a/doc/hydroflow_plus/builder/built/sidebar-items.js b/doc/hydro_lang/builder/built/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus/builder/built/sidebar-items.js rename to doc/hydro_lang/builder/built/sidebar-items.js diff --git a/doc/hydroflow_plus/builder/built/struct.BuiltFlow.html b/doc/hydro_lang/builder/built/struct.BuiltFlow.html similarity index 57% rename from doc/hydroflow_plus/builder/built/struct.BuiltFlow.html rename to doc/hydro_lang/builder/built/struct.BuiltFlow.html index 4c743e583805..fd333f9d7c09 100644 --- a/doc/hydroflow_plus/builder/built/struct.BuiltFlow.html +++ b/doc/hydro_lang/builder/built/struct.BuiltFlow.html @@ -1,27 +1,27 @@ -BuiltFlow in hydroflow_plus::builder::built - Rust

Struct hydroflow_plus::builder::built::BuiltFlow

source ·
pub struct BuiltFlow<'a> { /* private fields */ }

Implementations§

source§

impl<'a> BuiltFlow<'a>

source

pub fn ir(&self) -> &Vec<HfPlusLeaf>

source

pub fn optimize_with( +BuiltFlow in hydro_lang::builder::built - Rust

Struct hydro_lang::builder::built::BuiltFlow

source ·
pub struct BuiltFlow<'a> { /* private fields */ }

Implementations§

source§

impl<'a> BuiltFlow<'a>

source

pub fn ir(&self) -> &Vec<HydroLeaf>

source

pub fn optimize_with( self, - f: impl FnOnce(Vec<HfPlusLeaf>) -> Vec<HfPlusLeaf>, -) -> Self

source

pub fn with_default_optimize<D: LocalDeploy<'a>>(self) -> DeployFlow<'a, D>

source

pub fn with_process<P, D: LocalDeploy<'a>>( + f: impl FnOnce(Vec<HydroLeaf>) -> Vec<HydroLeaf>, +) -> Self

source

pub fn with_default_optimize<D: LocalDeploy<'a>>(self) -> DeployFlow<'a, D>

source

pub fn with_process<P, D: LocalDeploy<'a>>( self, - process: &Process<'_, P>, - spec: impl IntoProcessSpec<'a, D>, -) -> DeployFlow<'a, D>

source

pub fn with_external<P, D: LocalDeploy<'a>>( + process: &Process<'_, P>, + spec: impl IntoProcessSpec<'a, D>, +) -> DeployFlow<'a, D>

source

pub fn with_external<P, D: LocalDeploy<'a>>( self, - process: &ExternalProcess<'_, P>, - spec: impl ExternalSpec<'a, D>, -) -> DeployFlow<'a, D>

source

pub fn with_cluster<C, D: LocalDeploy<'a>>( + process: &ExternalProcess<'_, P>, + spec: impl ExternalSpec<'a, D>, +) -> DeployFlow<'a, D>

source

pub fn with_cluster<C, D: LocalDeploy<'a>>( self, - cluster: &Cluster<'_, C>, - spec: impl ClusterSpec<'a, D>, -) -> DeployFlow<'a, D>

source

pub fn compile<D: Deploy<'a>>( + cluster: &Cluster<'_, C>, + spec: impl ClusterSpec<'a, D>, +) -> DeployFlow<'a, D>

source

pub fn compile<D: Deploy<'a>>( self, - env: &D::CompileEnv, -) -> CompiledFlow<'a, D::GraphId>

source

pub fn compile_no_network<D: LocalDeploy<'a>>( + env: &D::CompileEnv, +) -> CompiledFlow<'a, D::GraphId>

source

pub fn compile_no_network<D: LocalDeploy<'a>>( self, -) -> CompiledFlow<'a, D::GraphId>

source

pub fn deploy<D: Deploy<'a, CompileEnv = ()>>( +) -> CompiledFlow<'a, D::GraphId>

source

pub fn deploy<D: Deploy<'a, CompileEnv = ()>>( self, - env: &mut D::InstantiateEnv, -) -> DeployResult<'a, D>

Trait Implementations§

source§

impl Drop for BuiltFlow<'_>

source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl<'a> Freeze for BuiltFlow<'a>

§

impl<'a> !RefUnwindSafe for BuiltFlow<'a>

§

impl<'a> !Send for BuiltFlow<'a>

§

impl<'a> !Sync for BuiltFlow<'a>

§

impl<'a> Unpin for BuiltFlow<'a>

§

impl<'a> !UnwindSafe for BuiltFlow<'a>

Blanket Implementations§

source§

impl<T> Any for T
where + env: &mut D::InstantiateEnv, +) -> DeployResult<'a, D>

Trait Implementations§

source§

impl Drop for BuiltFlow<'_>

source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl<'a> Freeze for BuiltFlow<'a>

§

impl<'a> !RefUnwindSafe for BuiltFlow<'a>

§

impl<'a> !Send for BuiltFlow<'a>

§

impl<'a> !Sync for BuiltFlow<'a>

§

impl<'a> Unpin for BuiltFlow<'a>

§

impl<'a> !UnwindSafe for BuiltFlow<'a>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -38,7 +38,7 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a diff --git a/doc/hydro_lang/builder/compiled/index.html b/doc/hydro_lang/builder/compiled/index.html new file mode 100644 index 000000000000..143654775ac3 --- /dev/null +++ b/doc/hydro_lang/builder/compiled/index.html @@ -0,0 +1 @@ +hydro_lang::builder::compiled - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus/builder/compiled/sidebar-items.js b/doc/hydro_lang/builder/compiled/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus/builder/compiled/sidebar-items.js rename to doc/hydro_lang/builder/compiled/sidebar-items.js diff --git a/doc/hydroflow_plus/builder/compiled/struct.CompiledFlow.html b/doc/hydro_lang/builder/compiled/struct.CompiledFlow.html similarity index 63% rename from doc/hydroflow_plus/builder/compiled/struct.CompiledFlow.html rename to doc/hydro_lang/builder/compiled/struct.CompiledFlow.html index 10897a24395b..64c9df5780df 100644 --- a/doc/hydroflow_plus/builder/compiled/struct.CompiledFlow.html +++ b/doc/hydro_lang/builder/compiled/struct.CompiledFlow.html @@ -1,7 +1,7 @@ -CompiledFlow in hydroflow_plus::builder::compiled - Rust

Struct hydroflow_plus::builder::compiled::CompiledFlow

source ·
pub struct CompiledFlow<'a, ID> { /* private fields */ }

Implementations§

source§

impl<ID> CompiledFlow<'_, ID>

source§

impl<'a> CompiledFlow<'a, usize>

source

pub fn with_dynamic_id( +CompiledFlow in hydro_lang::builder::compiled - Rust

Struct hydro_lang::builder::compiled::CompiledFlow

source ·
pub struct CompiledFlow<'a, ID> { /* private fields */ }

Implementations§

Trait Implementations§

source§

impl<'a, Ctx> FreeVariableWithContext<Ctx> for CompiledFlow<'a, ()>

source§

type O = Hydroflow<'a>

source§

fn to_tokens(self, _ctx: &Ctx) -> (Option<TokenStream>, Option<TokenStream>)

source§

fn uninitialized(&self, _ctx: &Ctx) -> Self::O

source§

impl<'a, Ctx> QuotedWithContext<'a, Hydroflow<'a>, Ctx> for CompiledFlow<'a, ()>

source§

fn splice_untyped_ctx(self, ctx: &Ctx) -> Expr
where +) -> CompiledFlowWithId<'a>

Trait Implementations§

source§

impl<'a, Ctx> FreeVariableWithContext<Ctx> for CompiledFlow<'a, ()>

source§

type O = Hydroflow<'a>

source§

fn to_tokens(self, _ctx: &Ctx) -> (Option<TokenStream>, Option<TokenStream>)

source§

fn uninitialized(&self, _ctx: &Ctx) -> Self::O

source§

impl<'a, Ctx> QuotedWithContext<'a, Hydroflow<'a>, Ctx> for CompiledFlow<'a, ()>

source§

fn splice_untyped_ctx(self, ctx: &Ctx) -> Expr
where Self: Sized,

source§

fn splice_typed_ctx(self, ctx: &Ctx) -> Expr
where Self: Sized,

source§

fn splice_fn1_ctx<I, O>(self, ctx: &Ctx) -> Expr
where Self: Sized, @@ -9,8 +9,8 @@ Self: Sized, T: Fn(&I) -> O,

source§

fn splice_fn2_borrow_mut_ctx<I1, I2, O>(self, ctx: &Ctx) -> Expr
where Self: Sized, - T: Fn(&mut I1, I2) -> O,

Auto Trait Implementations§

§

impl<'a, ID> Freeze for CompiledFlow<'a, ID>

§

impl<'a, ID> !RefUnwindSafe for CompiledFlow<'a, ID>

§

impl<'a, ID> !Send for CompiledFlow<'a, ID>

§

impl<'a, ID> !Sync for CompiledFlow<'a, ID>

§

impl<'a, ID> Unpin for CompiledFlow<'a, ID>
where - ID: Unpin,

§

impl<'a, ID> !UnwindSafe for CompiledFlow<'a, ID>

Blanket Implementations§

source§

impl<T> Any for T
where + T: Fn(&mut I1, I2) -> O,

Auto Trait Implementations§

§

impl<'a, ID> Freeze for CompiledFlow<'a, ID>

§

impl<'a, ID> !RefUnwindSafe for CompiledFlow<'a, ID>

§

impl<'a, ID> !Send for CompiledFlow<'a, ID>

§

impl<'a, ID> !Sync for CompiledFlow<'a, ID>

§

impl<'a, ID> Unpin for CompiledFlow<'a, ID>
where + ID: Unpin,

§

impl<'a, ID> !UnwindSafe for CompiledFlow<'a, ID>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<O, T> FreeVariable<O> for T
where @@ -29,7 +29,7 @@ F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a diff --git a/doc/hydroflow_plus/builder/compiled/struct.CompiledFlowWithId.html b/doc/hydro_lang/builder/compiled/struct.CompiledFlowWithId.html similarity index 67% rename from doc/hydroflow_plus/builder/compiled/struct.CompiledFlowWithId.html rename to doc/hydro_lang/builder/compiled/struct.CompiledFlowWithId.html index 0d258d783771..faa051133f96 100644 --- a/doc/hydroflow_plus/builder/compiled/struct.CompiledFlowWithId.html +++ b/doc/hydro_lang/builder/compiled/struct.CompiledFlowWithId.html @@ -1,4 +1,4 @@ -CompiledFlowWithId in hydroflow_plus::builder::compiled - Rust

Struct hydroflow_plus::builder::compiled::CompiledFlowWithId

source ·
pub struct CompiledFlowWithId<'a> { /* private fields */ }

Trait Implementations§

source§

impl<'a, Ctx> FreeVariableWithContext<Ctx> for CompiledFlowWithId<'a>

source§

type O = Hydroflow<'a>

source§

fn to_tokens(self, _ctx: &Ctx) -> (Option<TokenStream>, Option<TokenStream>)

source§

fn uninitialized(&self, _ctx: &Ctx) -> Self::O

source§

impl<'a, Ctx> QuotedWithContext<'a, Hydroflow<'a>, Ctx> for CompiledFlowWithId<'a>

source§

fn splice_untyped_ctx(self, ctx: &Ctx) -> Expr
where +CompiledFlowWithId in hydro_lang::builder::compiled - Rust

Struct hydro_lang::builder::compiled::CompiledFlowWithId

source ·
pub struct CompiledFlowWithId<'a> { /* private fields */ }

Trait Implementations§

source§

impl<'a, Ctx> FreeVariableWithContext<Ctx> for CompiledFlowWithId<'a>

source§

type O = Hydroflow<'a>

source§

fn to_tokens(self, _ctx: &Ctx) -> (Option<TokenStream>, Option<TokenStream>)

source§

fn uninitialized(&self, _ctx: &Ctx) -> Self::O

source§

impl<'a, Ctx> QuotedWithContext<'a, Hydroflow<'a>, Ctx> for CompiledFlowWithId<'a>

source§

fn splice_untyped_ctx(self, ctx: &Ctx) -> Expr
where Self: Sized,

source§

fn splice_typed_ctx(self, ctx: &Ctx) -> Expr
where Self: Sized,

source§

fn splice_fn1_ctx<I, O>(self, ctx: &Ctx) -> Expr
where Self: Sized, @@ -6,7 +6,7 @@ Self: Sized, T: Fn(&I) -> O,

source§

fn splice_fn2_borrow_mut_ctx<I1, I2, O>(self, ctx: &Ctx) -> Expr
where Self: Sized, - T: Fn(&mut I1, I2) -> O,

Auto Trait Implementations§

§

impl<'a> Freeze for CompiledFlowWithId<'a>

§

impl<'a> RefUnwindSafe for CompiledFlowWithId<'a>

§

impl<'a> !Send for CompiledFlowWithId<'a>

§

impl<'a> !Sync for CompiledFlowWithId<'a>

§

impl<'a> Unpin for CompiledFlowWithId<'a>

§

impl<'a> UnwindSafe for CompiledFlowWithId<'a>

Blanket Implementations§

source§

impl<T> Any for T
where + T: Fn(&mut I1, I2) -> O,

Auto Trait Implementations§

§

impl<'a> Freeze for CompiledFlowWithId<'a>

§

impl<'a> RefUnwindSafe for CompiledFlowWithId<'a>

§

impl<'a> !Send for CompiledFlowWithId<'a>

§

impl<'a> !Sync for CompiledFlowWithId<'a>

§

impl<'a> Unpin for CompiledFlowWithId<'a>

§

impl<'a> UnwindSafe for CompiledFlowWithId<'a>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<O, T> FreeVariable<O> for T
where @@ -25,7 +25,7 @@ F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a diff --git a/doc/hydro_lang/builder/constant.FLOW_USED_MESSAGE.html b/doc/hydro_lang/builder/constant.FLOW_USED_MESSAGE.html new file mode 100644 index 000000000000..37d83aa261ca --- /dev/null +++ b/doc/hydro_lang/builder/constant.FLOW_USED_MESSAGE.html @@ -0,0 +1 @@ +FLOW_USED_MESSAGE in hydro_lang::builder - Rust

Constant hydro_lang::builder::FLOW_USED_MESSAGE

source ·
pub const FLOW_USED_MESSAGE: &str = "Attempted to add a leaf to a flow that has already been finalized. No leaves can be added after the flow has been compiled.";
\ No newline at end of file diff --git a/doc/hydro_lang/builder/deploy/index.html b/doc/hydro_lang/builder/deploy/index.html new file mode 100644 index 000000000000..495c07e88ad8 --- /dev/null +++ b/doc/hydro_lang/builder/deploy/index.html @@ -0,0 +1 @@ +hydro_lang::builder::deploy - Rust

Module hydro_lang::builder::deploy

source ·

Structs§

\ No newline at end of file diff --git a/doc/hydroflow_plus/builder/deploy/sidebar-items.js b/doc/hydro_lang/builder/deploy/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus/builder/deploy/sidebar-items.js rename to doc/hydro_lang/builder/deploy/sidebar-items.js diff --git a/doc/hydroflow_plus/builder/deploy/struct.DeployFlow.html b/doc/hydro_lang/builder/deploy/struct.DeployFlow.html similarity index 56% rename from doc/hydroflow_plus/builder/deploy/struct.DeployFlow.html rename to doc/hydro_lang/builder/deploy/struct.DeployFlow.html index ad0e15102e5f..4b620cc67e9c 100644 --- a/doc/hydroflow_plus/builder/deploy/struct.DeployFlow.html +++ b/doc/hydro_lang/builder/deploy/struct.DeployFlow.html @@ -1,20 +1,20 @@ -DeployFlow in hydroflow_plus::builder::deploy - Rust

Struct hydroflow_plus::builder::deploy::DeployFlow

source ·
pub struct DeployFlow<'a, D: LocalDeploy<'a>> { /* private fields */ }

Implementations§

source§

impl<'a, D: LocalDeploy<'a>> DeployFlow<'a, D>

source

pub fn ir(&self) -> &Vec<HfPlusLeaf>

source

pub fn with_process<P>( +DeployFlow in hydro_lang::builder::deploy - Rust

Struct hydro_lang::builder::deploy::DeployFlow

source ·
pub struct DeployFlow<'a, D: LocalDeploy<'a>> { /* private fields */ }

Implementations§

source§

impl<'a, D: LocalDeploy<'a>> DeployFlow<'a, D>

source

pub fn ir(&self) -> &Vec<HydroLeaf>

source

pub fn with_process<P>( self, - process: &Process<'_, P>, - spec: impl IntoProcessSpec<'a, D>, -) -> Self

source

pub fn with_external<P>( + process: &Process<'_, P>, + spec: impl IntoProcessSpec<'a, D>, +) -> Self

source

pub fn with_external<P>( self, - process: &ExternalProcess<'_, P>, - spec: impl ExternalSpec<'a, D>, -) -> Self

source

pub fn with_cluster<C>( + process: &ExternalProcess<'_, P>, + spec: impl ExternalSpec<'a, D>, +) -> Self

source

pub fn with_cluster<C>( self, - cluster: &Cluster<'_, C>, - spec: impl ClusterSpec<'a, D>, -) -> Self

source

pub fn compile_no_network(self) -> CompiledFlow<'a, D::GraphId>

source§

impl<'a, D: Deploy<'a>> DeployFlow<'a, D>

source

pub fn compile(self, env: &D::CompileEnv) -> CompiledFlow<'a, D::GraphId>

source§

impl<'a, D: Deploy<'a, CompileEnv = ()>> DeployFlow<'a, D>

source

pub fn deploy(self, env: &mut D::InstantiateEnv) -> DeployResult<'a, D>

Trait Implementations§

source§

impl<'a, D: LocalDeploy<'a>> Drop for DeployFlow<'a, D>

source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl<'a, D> Freeze for DeployFlow<'a, D>

§

impl<'a, D> !RefUnwindSafe for DeployFlow<'a, D>

§

impl<'a, D> !Send for DeployFlow<'a, D>

§

impl<'a, D> !Sync for DeployFlow<'a, D>

§

impl<'a, D> Unpin for DeployFlow<'a, D>
where + cluster: &Cluster<'_, C>, + spec: impl ClusterSpec<'a, D>, +) -> Self

source

pub fn compile_no_network(self) -> CompiledFlow<'a, D::GraphId>

source§

impl<'a, D: Deploy<'a>> DeployFlow<'a, D>

source

pub fn compile(self, env: &D::CompileEnv) -> CompiledFlow<'a, D::GraphId>

source§

impl<'a, D: Deploy<'a, CompileEnv = ()>> DeployFlow<'a, D>

source

pub fn deploy(self, env: &mut D::InstantiateEnv) -> DeployResult<'a, D>

Trait Implementations§

source§

impl<'a, D: LocalDeploy<'a>> Drop for DeployFlow<'a, D>

source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl<'a, D> Freeze for DeployFlow<'a, D>

§

impl<'a, D> !RefUnwindSafe for DeployFlow<'a, D>

§

impl<'a, D> !Send for DeployFlow<'a, D>

§

impl<'a, D> !Sync for DeployFlow<'a, D>

§

impl<'a, D> Unpin for DeployFlow<'a, D>
where D: Unpin, - <D as LocalDeploy<'a>>::Process: Unpin, - <D as LocalDeploy<'a>>::ExternalProcess: Unpin, - <D as LocalDeploy<'a>>::Cluster: Unpin,

§

impl<'a, D> !UnwindSafe for DeployFlow<'a, D>

Blanket Implementations§

source§

impl<T> Any for T
where + <D as LocalDeploy<'a>>::Process: Unpin, + <D as LocalDeploy<'a>>::ExternalProcess: Unpin, + <D as LocalDeploy<'a>>::Cluster: Unpin,

§

impl<'a, D> !UnwindSafe for DeployFlow<'a, D>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -31,7 +31,7 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a diff --git a/doc/hydroflow_plus/builder/deploy/struct.DeployResult.html b/doc/hydro_lang/builder/deploy/struct.DeployResult.html similarity index 56% rename from doc/hydroflow_plus/builder/deploy/struct.DeployResult.html rename to doc/hydro_lang/builder/deploy/struct.DeployResult.html index b83c32cad81b..de1e4ef7a5e2 100644 --- a/doc/hydroflow_plus/builder/deploy/struct.DeployResult.html +++ b/doc/hydro_lang/builder/deploy/struct.DeployResult.html @@ -1,31 +1,31 @@ -DeployResult in hydroflow_plus::builder::deploy - Rust

Struct hydroflow_plus::builder::deploy::DeployResult

source ·
pub struct DeployResult<'a, D: Deploy<'a>> { /* private fields */ }

Implementations§

source§

impl<'a, D: Deploy<'a>> DeployResult<'a, D>

source

pub fn get_process<P>(&self, p: &Process<'_, P>) -> &D::Process

source

pub fn get_cluster<C>(&self, c: &Cluster<'a, C>) -> &D::Cluster

source

pub fn get_external<P>(&self, p: &ExternalProcess<'_, P>) -> &D::ExternalProcess

source

pub fn raw_port(&self, port: ExternalBytesPort) -> D::ExternalRawPort

source

pub async fn connect_sink_bytes( +DeployResult in hydro_lang::builder::deploy - Rust

Struct hydro_lang::builder::deploy::DeployResult

source ·
pub struct DeployResult<'a, D: Deploy<'a>> { /* private fields */ }

Implementations§

source§

impl<'a, D: Deploy<'a>> DeployResult<'a, D>

source

pub fn get_process<P>(&self, p: &Process<'_, P>) -> &D::Process

source

pub fn get_cluster<C>(&self, c: &Cluster<'a, C>) -> &D::Cluster

source

pub fn get_external<P>(&self, p: &ExternalProcess<'_, P>) -> &D::ExternalProcess

source

pub fn raw_port(&self, port: ExternalBytesPort) -> D::ExternalRawPort

source

pub async fn connect_sink_bytes( &self, - port: ExternalBytesPort, -) -> Pin<Box<dyn Sink<Bytes, Error = Error>>>

source

pub async fn connect_sink_bincode<T: Serialize + DeserializeOwned + 'static>( + port: ExternalBytesPort, +) -> Pin<Box<dyn Sink<Bytes, Error = Error>>>

source

pub async fn connect_sink_bincode<T: Serialize + DeserializeOwned + 'static>( &self, - port: ExternalBincodeSink<T>, -) -> Pin<Box<dyn Sink<T, Error = Error>>>

source

pub async fn connect_source_bytes( + port: ExternalBincodeSink<T>, +) -> Pin<Box<dyn Sink<T, Error = Error>>>

source

pub async fn connect_source_bytes( &self, - port: ExternalBytesPort, -) -> Pin<Box<dyn Stream<Item = Bytes>>>

source

pub async fn connect_source_bincode<T: Serialize + DeserializeOwned + 'static>( + port: ExternalBytesPort, +) -> Pin<Box<dyn Stream<Item = Bytes>>>

source

pub async fn connect_source_bincode<T: Serialize + DeserializeOwned + 'static>( &self, - port: ExternalBincodeStream<T>, -) -> Pin<Box<dyn Stream<Item = T>>>

Auto Trait Implementations§

§

impl<'a, D> Freeze for DeployResult<'a, D>

§

impl<'a, D> RefUnwindSafe for DeployResult<'a, D>
where - <D as Deploy<'a>>::Process: RefUnwindSafe, - <D as Deploy<'a>>::Cluster: RefUnwindSafe, - <D as Deploy<'a>>::ExternalProcess: RefUnwindSafe,

§

impl<'a, D> Send for DeployResult<'a, D>
where - <D as Deploy<'a>>::Process: Send, - <D as Deploy<'a>>::Cluster: Send, - <D as Deploy<'a>>::ExternalProcess: Send,

§

impl<'a, D> Sync for DeployResult<'a, D>
where - <D as Deploy<'a>>::Process: Sync, - <D as Deploy<'a>>::Cluster: Sync, - <D as Deploy<'a>>::ExternalProcess: Sync,

§

impl<'a, D> Unpin for DeployResult<'a, D>
where - <D as Deploy<'a>>::Process: Unpin, - <D as Deploy<'a>>::Cluster: Unpin, - <D as Deploy<'a>>::ExternalProcess: Unpin,

§

impl<'a, D> UnwindSafe for DeployResult<'a, D>
where - <D as Deploy<'a>>::Process: UnwindSafe, - <D as Deploy<'a>>::Cluster: UnwindSafe, - <D as Deploy<'a>>::ExternalProcess: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where + port: ExternalBincodeStream<T>, +) -> Pin<Box<dyn Stream<Item = T>>>

Auto Trait Implementations§

§

impl<'a, D> Freeze for DeployResult<'a, D>

§

impl<'a, D> RefUnwindSafe for DeployResult<'a, D>
where + <D as Deploy<'a>>::Process: RefUnwindSafe, + <D as Deploy<'a>>::Cluster: RefUnwindSafe, + <D as Deploy<'a>>::ExternalProcess: RefUnwindSafe,

§

impl<'a, D> Send for DeployResult<'a, D>
where + <D as Deploy<'a>>::Process: Send, + <D as Deploy<'a>>::Cluster: Send, + <D as Deploy<'a>>::ExternalProcess: Send,

§

impl<'a, D> Sync for DeployResult<'a, D>
where + <D as Deploy<'a>>::Process: Sync, + <D as Deploy<'a>>::Cluster: Sync, + <D as Deploy<'a>>::ExternalProcess: Sync,

§

impl<'a, D> Unpin for DeployResult<'a, D>
where + <D as Deploy<'a>>::Process: Unpin, + <D as Deploy<'a>>::Cluster: Unpin, + <D as Deploy<'a>>::ExternalProcess: Unpin,

§

impl<'a, D> UnwindSafe for DeployResult<'a, D>
where + <D as Deploy<'a>>::Process: UnwindSafe, + <D as Deploy<'a>>::Cluster: UnwindSafe, + <D as Deploy<'a>>::ExternalProcess: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -42,7 +42,7 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a diff --git a/doc/hydro_lang/builder/index.html b/doc/hydro_lang/builder/index.html new file mode 100644 index 000000000000..73d45ccad923 --- /dev/null +++ b/doc/hydro_lang/builder/index.html @@ -0,0 +1 @@ +hydro_lang::builder - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus/builder/sidebar-items.js b/doc/hydro_lang/builder/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus/builder/sidebar-items.js rename to doc/hydro_lang/builder/sidebar-items.js diff --git a/doc/hydroflow_plus/builder/struct.FlowBuilder.html b/doc/hydro_lang/builder/struct.FlowBuilder.html similarity index 53% rename from doc/hydroflow_plus/builder/struct.FlowBuilder.html rename to doc/hydro_lang/builder/struct.FlowBuilder.html index 9c195fe02f46..ef2a2dfbc2c7 100644 --- a/doc/hydroflow_plus/builder/struct.FlowBuilder.html +++ b/doc/hydro_lang/builder/struct.FlowBuilder.html @@ -1,27 +1,27 @@ -FlowBuilder in hydroflow_plus::builder - Rust

Struct hydroflow_plus::builder::FlowBuilder

source ·
pub struct FlowBuilder<'a> { /* private fields */ }

Implementations§

source§

impl<'a> FlowBuilder<'a>

source

pub fn new() -> FlowBuilder<'a>

source

pub fn finalize(self) -> BuiltFlow<'a>

source

pub fn with_default_optimize<D: LocalDeploy<'a>>(self) -> DeployFlow<'a, D>

source

pub fn optimize_with( +FlowBuilder in hydro_lang::builder - Rust

Struct hydro_lang::builder::FlowBuilder

source ·
pub struct FlowBuilder<'a> { /* private fields */ }

Implementations§

source§

impl<'a> FlowBuilder<'a>

source

pub fn new() -> FlowBuilder<'a>

source

pub fn finalize(self) -> BuiltFlow<'a>

source

pub fn with_default_optimize<D: LocalDeploy<'a>>(self) -> DeployFlow<'a, D>

source

pub fn optimize_with( self, - f: impl FnOnce(Vec<HfPlusLeaf>) -> Vec<HfPlusLeaf>, -) -> BuiltFlow<'a>

source

pub fn flow_state(&self) -> &FlowState

source

pub fn process<P>(&self) -> Process<'a, P>

source

pub fn external_process<P>(&self) -> ExternalProcess<'a, P>

source

pub fn cluster<C>(&self) -> Cluster<'a, C>

source

pub fn with_process<P, D: LocalDeploy<'a>>( + f: impl FnOnce(Vec<HydroLeaf>) -> Vec<HydroLeaf>, +) -> BuiltFlow<'a>

source

pub fn flow_state(&self) -> &FlowState

source

pub fn process<P>(&self) -> Process<'a, P>

source

pub fn external_process<P>(&self) -> ExternalProcess<'a, P>

source

pub fn cluster<C>(&self) -> Cluster<'a, C>

source

pub fn with_process<P, D: LocalDeploy<'a>>( self, - process: &Process<'_, P>, - spec: impl IntoProcessSpec<'a, D>, -) -> DeployFlow<'a, D>

source

pub fn with_external<P, D: LocalDeploy<'a>>( + process: &Process<'_, P>, + spec: impl IntoProcessSpec<'a, D>, +) -> DeployFlow<'a, D>

source

pub fn with_external<P, D: LocalDeploy<'a>>( self, - process: &ExternalProcess<'_, P>, - spec: impl ExternalSpec<'a, D>, -) -> DeployFlow<'a, D>

source

pub fn with_cluster<C, D: LocalDeploy<'a>>( + process: &ExternalProcess<'_, P>, + spec: impl ExternalSpec<'a, D>, +) -> DeployFlow<'a, D>

source

pub fn with_cluster<C, D: LocalDeploy<'a>>( self, - cluster: &Cluster<'_, C>, - spec: impl ClusterSpec<'a, D>, -) -> DeployFlow<'a, D>

source

pub fn compile<D: Deploy<'a>>( + cluster: &Cluster<'_, C>, + spec: impl ClusterSpec<'a, D>, +) -> DeployFlow<'a, D>

source

pub fn compile<D: Deploy<'a>>( self, - env: &D::CompileEnv, -) -> CompiledFlow<'a, D::GraphId>

source

pub fn compile_no_network<D: LocalDeploy<'a>>( + env: &D::CompileEnv, +) -> CompiledFlow<'a, D::GraphId>

source

pub fn compile_no_network<D: LocalDeploy<'a>>( self, -) -> CompiledFlow<'a, D::GraphId>

source

pub fn deploy<D: Deploy<'a, CompileEnv = ()>>( +) -> CompiledFlow<'a, D::GraphId>

source

pub fn deploy<D: Deploy<'a, CompileEnv = ()>>( self, - env: &mut D::InstantiateEnv, -) -> DeployResult<'a, D>

Trait Implementations§

source§

impl Drop for FlowBuilder<'_>

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl QuotedContext for FlowBuilder<'_>

source§

fn create() -> Self

Auto Trait Implementations§

§

impl<'a> !Freeze for FlowBuilder<'a>

§

impl<'a> !RefUnwindSafe for FlowBuilder<'a>

§

impl<'a> !Send for FlowBuilder<'a>

§

impl<'a> !Sync for FlowBuilder<'a>

§

impl<'a> Unpin for FlowBuilder<'a>

§

impl<'a> !UnwindSafe for FlowBuilder<'a>

Blanket Implementations§

source§

impl<T> Any for T
where + env: &mut D::InstantiateEnv, +) -> DeployResult<'a, D>

Trait Implementations§

source§

impl Drop for FlowBuilder<'_>

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl QuotedContext for FlowBuilder<'_>

source§

fn create() -> Self

Auto Trait Implementations§

§

impl<'a> !Freeze for FlowBuilder<'a>

§

impl<'a> !RefUnwindSafe for FlowBuilder<'a>

§

impl<'a> !Send for FlowBuilder<'a>

§

impl<'a> !Sync for FlowBuilder<'a>

§

impl<'a> Unpin for FlowBuilder<'a>

§

impl<'a> !UnwindSafe for FlowBuilder<'a>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -38,7 +38,7 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a diff --git a/doc/hydroflow_plus/location/external_process/struct.ExternalBytesPort.html b/doc/hydro_lang/builder/struct.FlowStateInner.html similarity index 70% rename from doc/hydroflow_plus/location/external_process/struct.ExternalBytesPort.html rename to doc/hydro_lang/builder/struct.FlowStateInner.html index 0fd242649766..4eb45d099c49 100644 --- a/doc/hydroflow_plus/location/external_process/struct.ExternalBytesPort.html +++ b/doc/hydro_lang/builder/struct.FlowStateInner.html @@ -1,4 +1,4 @@ -ExternalBytesPort in hydroflow_plus::location::external_process - Rust
pub struct ExternalBytesPort { /* private fields */ }

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +FlowStateInner in hydro_lang::builder - Rust

Struct hydro_lang::builder::FlowStateInner

source ·
pub struct FlowStateInner { /* private fields */ }

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -15,7 +15,7 @@ F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a diff --git a/doc/hydro_lang/builder/type.FlowState.html b/doc/hydro_lang/builder/type.FlowState.html new file mode 100644 index 000000000000..3eff903e63ad --- /dev/null +++ b/doc/hydro_lang/builder/type.FlowState.html @@ -0,0 +1 @@ +FlowState in hydro_lang::builder - Rust

Type Alias hydro_lang::builder::FlowState

source ·
pub type FlowState = Rc<RefCell<FlowStateInner>>;

Aliased Type§

struct FlowState { /* private fields */ }
\ No newline at end of file diff --git a/doc/hydro_lang/cycle/enum.ForwardRefMarker.html b/doc/hydro_lang/cycle/enum.ForwardRefMarker.html new file mode 100644 index 000000000000..62da988e6b18 --- /dev/null +++ b/doc/hydro_lang/cycle/enum.ForwardRefMarker.html @@ -0,0 +1,23 @@ +ForwardRefMarker in hydro_lang::cycle - Rust

Enum hydro_lang::cycle::ForwardRefMarker

source ·
pub enum ForwardRefMarker {}

Trait Implementations§

source§

impl<'a, T, L: Location<'a> + NoTick, B> CycleCollection<'a, ForwardRefMarker> for Optional<T, L, B>

source§

type Location = L

source§

fn create_source(ident: Ident, location: L) -> Self

source§

impl<'a, T, L: Location<'a>> CycleCollection<'a, ForwardRefMarker> for Optional<T, Tick<L>, Bounded>

source§

type Location = Tick<L>

source§

fn create_source(ident: Ident, location: Tick<L>) -> Self

source§

impl<'a, T, L: Location<'a> + NoTick, B> CycleCollection<'a, ForwardRefMarker> for Singleton<T, L, B>

source§

type Location = L

source§

fn create_source(ident: Ident, location: L) -> Self

source§

impl<'a, T, L: Location<'a>> CycleCollection<'a, ForwardRefMarker> for Singleton<T, Tick<L>, Bounded>

source§

type Location = Tick<L>

source§

fn create_source(ident: Ident, location: Tick<L>) -> Self

source§

impl<'a, T, L: Location<'a> + NoTick, B, Order> CycleCollection<'a, ForwardRefMarker> for Stream<T, L, B, Order>

source§

type Location = L

source§

fn create_source(ident: Ident, location: L) -> Self

source§

impl<'a, T, L: Location<'a> + NoTick, B> CycleComplete<'a, ForwardRefMarker> for Optional<T, L, B>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

source§

impl<'a, T, L: Location<'a>> CycleComplete<'a, ForwardRefMarker> for Optional<T, Tick<L>, Bounded>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

source§

impl<'a, T, L: Location<'a> + NoTick, B> CycleComplete<'a, ForwardRefMarker> for Singleton<T, L, B>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

source§

impl<'a, T, L: Location<'a>> CycleComplete<'a, ForwardRefMarker> for Singleton<T, Tick<L>, Bounded>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

source§

impl<'a, T, L: Location<'a> + NoTick, B, Order> CycleComplete<'a, ForwardRefMarker> for Stream<T, L, B, Order>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/doc/hydroflow_plus/cycle/enum.TickCycleMarker.html b/doc/hydro_lang/cycle/enum.TickCycleMarker.html similarity index 51% rename from doc/hydroflow_plus/cycle/enum.TickCycleMarker.html rename to doc/hydro_lang/cycle/enum.TickCycleMarker.html index b0c909be89c6..d5380ac9166a 100644 --- a/doc/hydroflow_plus/cycle/enum.TickCycleMarker.html +++ b/doc/hydro_lang/cycle/enum.TickCycleMarker.html @@ -1,4 +1,4 @@ -TickCycleMarker in hydroflow_plus::cycle - Rust

Enum hydroflow_plus::cycle::TickCycleMarker

source ·
pub enum TickCycleMarker {}

Trait Implementations§

source§

impl<'a, T, L: Location<'a>> CycleCollection<'a, TickCycleMarker> for Optional<T, Tick<L>, Bounded>

source§

type Location = Tick<L>

source§

fn create_source(ident: Ident, location: Tick<L>) -> Self

source§

impl<'a, T, L: Location<'a>, Order> CycleCollection<'a, TickCycleMarker> for Stream<T, Tick<L>, Bounded, Order>

source§

type Location = Tick<L>

source§

fn create_source(ident: Ident, location: Tick<L>) -> Self

source§

impl<'a, T, L: Location<'a>> CycleCollectionWithInitial<'a, TickCycleMarker> for Singleton<T, Tick<L>, Bounded>

source§

type Location = Tick<L>

source§

fn create_source(ident: Ident, initial: Self, location: Tick<L>) -> Self

source§

impl<'a, T, L: Location<'a>> CycleComplete<'a, TickCycleMarker> for Optional<T, Tick<L>, Bounded>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

source§

impl<'a, T, L: Location<'a>> CycleComplete<'a, TickCycleMarker> for Singleton<T, Tick<L>, Bounded>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

source§

impl<'a, T, L: Location<'a>, Order> CycleComplete<'a, TickCycleMarker> for Stream<T, Tick<L>, Bounded, Order>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +TickCycleMarker in hydro_lang::cycle - Rust

Enum hydro_lang::cycle::TickCycleMarker

source ·
pub enum TickCycleMarker {}

Trait Implementations§

source§

impl<'a, T, L: Location<'a>> CycleCollection<'a, TickCycleMarker> for Optional<T, Tick<L>, Bounded>

source§

type Location = Tick<L>

source§

fn create_source(ident: Ident, location: Tick<L>) -> Self

source§

impl<'a, T, L: Location<'a>, Order> CycleCollection<'a, TickCycleMarker> for Stream<T, Tick<L>, Bounded, Order>

source§

type Location = Tick<L>

source§

fn create_source(ident: Ident, location: Tick<L>) -> Self

source§

impl<'a, T, L: Location<'a>> CycleCollectionWithInitial<'a, TickCycleMarker> for Singleton<T, Tick<L>, Bounded>

source§

type Location = Tick<L>

source§

fn create_source(ident: Ident, initial: Self, location: Tick<L>) -> Self

source§

impl<'a, T, L: Location<'a>> CycleComplete<'a, TickCycleMarker> for Optional<T, Tick<L>, Bounded>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

source§

impl<'a, T, L: Location<'a>> CycleComplete<'a, TickCycleMarker> for Singleton<T, Tick<L>, Bounded>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

source§

impl<'a, T, L: Location<'a>, Order> CycleComplete<'a, TickCycleMarker> for Stream<T, Tick<L>, Bounded, Order>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -15,7 +15,7 @@ F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a diff --git a/doc/hydro_lang/cycle/index.html b/doc/hydro_lang/cycle/index.html new file mode 100644 index 000000000000..532ddcc11e5c --- /dev/null +++ b/doc/hydro_lang/cycle/index.html @@ -0,0 +1,2 @@ +hydro_lang::cycle - Rust

Module hydro_lang::cycle

source ·

Structs§

  • Represents a forward reference in the graph that will be fulfilled +by a stream that is not yet known.

Enums§

Traits§

\ No newline at end of file diff --git a/doc/hydroflow_plus/cycle/sidebar-items.js b/doc/hydro_lang/cycle/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus/cycle/sidebar-items.js rename to doc/hydro_lang/cycle/sidebar-items.js diff --git a/doc/hydroflow_plus/cycle/struct.ForwardRef.html b/doc/hydro_lang/cycle/struct.ForwardRef.html similarity index 72% rename from doc/hydroflow_plus/cycle/struct.ForwardRef.html rename to doc/hydro_lang/cycle/struct.ForwardRef.html index 1934cdb5880e..f68733066c8e 100644 --- a/doc/hydroflow_plus/cycle/struct.ForwardRef.html +++ b/doc/hydro_lang/cycle/struct.ForwardRef.html @@ -1,9 +1,9 @@ -ForwardRef in hydroflow_plus::cycle - Rust

Struct hydroflow_plus::cycle::ForwardRef

source ·
pub struct ForwardRef<'a, S: CycleComplete<'a, ForwardRefMarker>> { /* private fields */ }
Expand description

Represents a forward reference in the graph that will be fulfilled +ForwardRef in hydro_lang::cycle - Rust

Struct hydro_lang::cycle::ForwardRef

source ·
pub struct ForwardRef<'a, S: CycleComplete<'a, ForwardRefMarker>> { /* private fields */ }
Expand description

Represents a forward reference in the graph that will be fulfilled by a stream that is not yet known.

-

See crate::FlowBuilder for an explainer on the type parameters.

-

Implementations§

source§

impl<'a, S: CycleComplete<'a, ForwardRefMarker>> ForwardRef<'a, S>

source

pub fn complete(self, stream: S)

Auto Trait Implementations§

§

impl<'a, S> Freeze for ForwardRef<'a, S>

§

impl<'a, S> RefUnwindSafe for ForwardRef<'a, S>
where - S: RefUnwindSafe,

§

impl<'a, S> !Send for ForwardRef<'a, S>

§

impl<'a, S> !Sync for ForwardRef<'a, S>

§

impl<'a, S> Unpin for ForwardRef<'a, S>
where - S: Unpin,

§

impl<'a, S> UnwindSafe for ForwardRef<'a, S>
where +

See crate::FlowBuilder for an explainer on the type parameters.

+

Implementations§

source§

impl<'a, S: CycleComplete<'a, ForwardRefMarker>> ForwardRef<'a, S>

source

pub fn complete(self, stream: S)

Auto Trait Implementations§

§

impl<'a, S> Freeze for ForwardRef<'a, S>

§

impl<'a, S> RefUnwindSafe for ForwardRef<'a, S>
where + S: RefUnwindSafe,

§

impl<'a, S> !Send for ForwardRef<'a, S>

§

impl<'a, S> !Sync for ForwardRef<'a, S>

§

impl<'a, S> Unpin for ForwardRef<'a, S>
where + S: Unpin,

§

impl<'a, S> UnwindSafe for ForwardRef<'a, S>
where S: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where @@ -21,7 +21,7 @@ F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a diff --git a/doc/hydroflow_plus/cycle/struct.TickCycle.html b/doc/hydro_lang/cycle/struct.TickCycle.html similarity index 72% rename from doc/hydroflow_plus/cycle/struct.TickCycle.html rename to doc/hydro_lang/cycle/struct.TickCycle.html index f8d63a42be1a..b8d98b1841df 100644 --- a/doc/hydroflow_plus/cycle/struct.TickCycle.html +++ b/doc/hydro_lang/cycle/struct.TickCycle.html @@ -1,6 +1,6 @@ -TickCycle in hydroflow_plus::cycle - Rust

Struct hydroflow_plus::cycle::TickCycle

source ·
pub struct TickCycle<'a, S: CycleComplete<'a, TickCycleMarker> + DeferTick> { /* private fields */ }

Implementations§

source§

impl<'a, S: CycleComplete<'a, TickCycleMarker> + DeferTick> TickCycle<'a, S>

source

pub fn complete_next_tick(self, stream: S)

Auto Trait Implementations§

§

impl<'a, S> Freeze for TickCycle<'a, S>

§

impl<'a, S> RefUnwindSafe for TickCycle<'a, S>
where - S: RefUnwindSafe,

§

impl<'a, S> !Send for TickCycle<'a, S>

§

impl<'a, S> !Sync for TickCycle<'a, S>

§

impl<'a, S> Unpin for TickCycle<'a, S>
where - S: Unpin,

§

impl<'a, S> UnwindSafe for TickCycle<'a, S>
where +TickCycle in hydro_lang::cycle - Rust

Struct hydro_lang::cycle::TickCycle

source ·
pub struct TickCycle<'a, S: CycleComplete<'a, TickCycleMarker> + DeferTick> { /* private fields */ }

Implementations§

source§

impl<'a, S: CycleComplete<'a, TickCycleMarker> + DeferTick> TickCycle<'a, S>

source

pub fn complete_next_tick(self, stream: S)

Auto Trait Implementations§

§

impl<'a, S> Freeze for TickCycle<'a, S>

§

impl<'a, S> RefUnwindSafe for TickCycle<'a, S>
where + S: RefUnwindSafe,

§

impl<'a, S> !Send for TickCycle<'a, S>

§

impl<'a, S> !Sync for TickCycle<'a, S>

§

impl<'a, S> Unpin for TickCycle<'a, S>
where + S: Unpin,

§

impl<'a, S> UnwindSafe for TickCycle<'a, S>
where S: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where @@ -18,7 +18,7 @@ F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a diff --git a/doc/hydro_lang/cycle/trait.CycleCollection.html b/doc/hydro_lang/cycle/trait.CycleCollection.html new file mode 100644 index 000000000000..96828126d673 --- /dev/null +++ b/doc/hydro_lang/cycle/trait.CycleCollection.html @@ -0,0 +1,6 @@ +CycleCollection in hydro_lang::cycle - Rust

Trait hydro_lang::cycle::CycleCollection

source ·
pub trait CycleCollection<'a, T>: CycleComplete<'a, T> {
+    type Location: Location<'a>;
+
+    // Required method
+    fn create_source(ident: Ident, location: Self::Location) -> Self;
+}

Required Associated Types§

Required Methods§

source

fn create_source(ident: Ident, location: Self::Location) -> Self

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<'a, T, L: Location<'a> + NoTick, B> CycleCollection<'a, ForwardRefMarker> for Optional<T, L, B>

source§

impl<'a, T, L: Location<'a> + NoTick, B> CycleCollection<'a, ForwardRefMarker> for Singleton<T, L, B>

source§

impl<'a, T, L: Location<'a> + NoTick, B, Order> CycleCollection<'a, ForwardRefMarker> for Stream<T, L, B, Order>

source§

impl<'a, T, L: Location<'a>> CycleCollection<'a, ForwardRefMarker> for Optional<T, Tick<L>, Bounded>

source§

impl<'a, T, L: Location<'a>> CycleCollection<'a, ForwardRefMarker> for Singleton<T, Tick<L>, Bounded>

source§

impl<'a, T, L: Location<'a>> CycleCollection<'a, TickCycleMarker> for Optional<T, Tick<L>, Bounded>

source§

impl<'a, T, L: Location<'a>, Order> CycleCollection<'a, TickCycleMarker> for Stream<T, Tick<L>, Bounded, Order>

\ No newline at end of file diff --git a/doc/hydro_lang/cycle/trait.CycleCollectionWithInitial.html b/doc/hydro_lang/cycle/trait.CycleCollectionWithInitial.html new file mode 100644 index 000000000000..fda89e74b1b1 --- /dev/null +++ b/doc/hydro_lang/cycle/trait.CycleCollectionWithInitial.html @@ -0,0 +1,10 @@ +CycleCollectionWithInitial in hydro_lang::cycle - Rust

Trait hydro_lang::cycle::CycleCollectionWithInitial

source ·
pub trait CycleCollectionWithInitial<'a, T>: CycleComplete<'a, T> {
+    type Location: Location<'a>;
+
+    // Required method
+    fn create_source(
+        ident: Ident,
+        initial: Self,
+        location: Self::Location,
+    ) -> Self;
+}

Required Associated Types§

Required Methods§

source

fn create_source(ident: Ident, initial: Self, location: Self::Location) -> Self

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/doc/hydro_lang/cycle/trait.CycleComplete.html b/doc/hydro_lang/cycle/trait.CycleComplete.html new file mode 100644 index 000000000000..ec04ea3fe3f0 --- /dev/null +++ b/doc/hydro_lang/cycle/trait.CycleComplete.html @@ -0,0 +1,4 @@ +CycleComplete in hydro_lang::cycle - Rust

Trait hydro_lang::cycle::CycleComplete

source ·
pub trait CycleComplete<'a, T> {
+    // Required method
+    fn complete(self, ident: Ident, expected_location: LocationId);
+}

Required Methods§

source

fn complete(self, ident: Ident, expected_location: LocationId)

Implementors§

source§

impl<'a, T, L: Location<'a> + NoTick, B> CycleComplete<'a, ForwardRefMarker> for Optional<T, L, B>

source§

impl<'a, T, L: Location<'a> + NoTick, B> CycleComplete<'a, ForwardRefMarker> for Singleton<T, L, B>

source§

impl<'a, T, L: Location<'a> + NoTick, B, Order> CycleComplete<'a, ForwardRefMarker> for Stream<T, L, B, Order>

source§

impl<'a, T, L: Location<'a>> CycleComplete<'a, ForwardRefMarker> for Optional<T, Tick<L>, Bounded>

source§

impl<'a, T, L: Location<'a>> CycleComplete<'a, ForwardRefMarker> for Singleton<T, Tick<L>, Bounded>

source§

impl<'a, T, L: Location<'a>> CycleComplete<'a, TickCycleMarker> for Optional<T, Tick<L>, Bounded>

source§

impl<'a, T, L: Location<'a>> CycleComplete<'a, TickCycleMarker> for Singleton<T, Tick<L>, Bounded>

source§

impl<'a, T, L: Location<'a>, Order> CycleComplete<'a, TickCycleMarker> for Stream<T, Tick<L>, Bounded, Order>

\ No newline at end of file diff --git a/doc/hydro_lang/cycle/trait.DeferTick.html b/doc/hydro_lang/cycle/trait.DeferTick.html new file mode 100644 index 000000000000..e13dcd160f63 --- /dev/null +++ b/doc/hydro_lang/cycle/trait.DeferTick.html @@ -0,0 +1,4 @@ +DeferTick in hydro_lang::cycle - Rust

Trait hydro_lang::cycle::DeferTick

source ·
pub trait DeferTick {
+    // Required method
+    fn defer_tick(self) -> Self;
+}

Required Methods§

source

fn defer_tick(self) -> Self

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<'a, T, L: Location<'a>> DeferTick for Optional<T, Tick<L>, Bounded>

source§

impl<'a, T, L: Location<'a>> DeferTick for Singleton<T, Tick<L>, Bounded>

source§

impl<'a, T, L: Location<'a>, Order> DeferTick for Stream<T, Tick<L>, Bounded, Order>

\ No newline at end of file diff --git a/doc/hydro_lang/deploy/in_memory_graph/index.html b/doc/hydro_lang/deploy/in_memory_graph/index.html new file mode 100644 index 000000000000..fc088ea5ec76 --- /dev/null +++ b/doc/hydro_lang/deploy/in_memory_graph/index.html @@ -0,0 +1 @@ +hydro_lang::deploy::in_memory_graph - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus/deploy/in_memory_graph/sidebar-items.js b/doc/hydro_lang/deploy/in_memory_graph/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus/deploy/in_memory_graph/sidebar-items.js rename to doc/hydro_lang/deploy/in_memory_graph/sidebar-items.js diff --git a/doc/hydro_lang/deploy/in_memory_graph/struct.MultiGraph.html b/doc/hydro_lang/deploy/in_memory_graph/struct.MultiGraph.html new file mode 100644 index 000000000000..57d253ace74b --- /dev/null +++ b/doc/hydro_lang/deploy/in_memory_graph/struct.MultiGraph.html @@ -0,0 +1,23 @@ +MultiGraph in hydro_lang::deploy::in_memory_graph - Rust

Struct hydro_lang::deploy::in_memory_graph::MultiGraph

source ·
pub struct MultiGraph {}

Trait Implementations§

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/doc/hydroflow_plus/deploy/in_memory_graph/struct.MultiNode.html b/doc/hydro_lang/deploy/in_memory_graph/struct.MultiNode.html similarity index 66% rename from doc/hydroflow_plus/deploy/in_memory_graph/struct.MultiNode.html rename to doc/hydro_lang/deploy/in_memory_graph/struct.MultiNode.html index 2f671dc71046..6bd2081e9710 100644 --- a/doc/hydroflow_plus/deploy/in_memory_graph/struct.MultiNode.html +++ b/doc/hydro_lang/deploy/in_memory_graph/struct.MultiNode.html @@ -1,10 +1,10 @@ -MultiNode in hydroflow_plus::deploy::in_memory_graph - Rust

Struct hydroflow_plus::deploy::in_memory_graph::MultiNode

source ·
pub struct MultiNode {}

Trait Implementations§

source§

impl Clone for MultiNode

source§

fn clone(&self) -> MultiNode

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Node for MultiNode

source§

type Port = ()

source§

type Meta = ()

source§

type InstantiateEnv = ()

source§

fn next_port(&self)

source§

fn update_meta(&mut self, _meta: &Self::Meta)

source§

fn instantiate( +MultiNode in hydro_lang::deploy::in_memory_graph - Rust

Struct hydro_lang::deploy::in_memory_graph::MultiNode

source ·
pub struct MultiNode {}

Trait Implementations§

source§

impl Clone for MultiNode

source§

fn clone(&self) -> MultiNode

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Node for MultiNode

source§

type Port = ()

source§

type Meta = ()

source§

type InstantiateEnv = ()

source§

fn next_port(&self)

source§

fn update_meta(&mut self, _meta: &Self::Meta)

source§

fn instantiate( &self, - _env: &mut Self::InstantiateEnv, - _meta: &mut Self::Meta, + _env: &mut Self::InstantiateEnv, + _meta: &mut Self::Meta, _graph: HydroflowGraph, _extra_stmts: Vec<Stmt>, -)

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +)

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where @@ -22,7 +22,7 @@ F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where diff --git a/doc/hydroflow_plus/deploy/in_memory_graph/struct.SingleNode.html b/doc/hydro_lang/deploy/in_memory_graph/struct.SingleNode.html similarity index 66% rename from doc/hydroflow_plus/deploy/in_memory_graph/struct.SingleNode.html rename to doc/hydro_lang/deploy/in_memory_graph/struct.SingleNode.html index 8867f10a7bf4..1ac692887b88 100644 --- a/doc/hydroflow_plus/deploy/in_memory_graph/struct.SingleNode.html +++ b/doc/hydro_lang/deploy/in_memory_graph/struct.SingleNode.html @@ -1,10 +1,10 @@ -SingleNode in hydroflow_plus::deploy::in_memory_graph - Rust

Struct hydroflow_plus::deploy::in_memory_graph::SingleNode

source ·
pub struct SingleNode {}

Trait Implementations§

source§

impl Clone for SingleNode

source§

fn clone(&self) -> SingleNode

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Node for SingleNode

source§

type Port = ()

source§

type Meta = ()

source§

type InstantiateEnv = ()

source§

fn next_port(&self)

source§

fn update_meta(&mut self, _meta: &Self::Meta)

source§

fn instantiate( +SingleNode in hydro_lang::deploy::in_memory_graph - Rust

Struct hydro_lang::deploy::in_memory_graph::SingleNode

source ·
pub struct SingleNode {}

Trait Implementations§

source§

impl Clone for SingleNode

source§

fn clone(&self) -> SingleNode

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Node for SingleNode

source§

type Port = ()

source§

type Meta = ()

source§

type InstantiateEnv = ()

source§

fn next_port(&self)

source§

fn update_meta(&mut self, _meta: &Self::Meta)

source§

fn instantiate( &self, - _env: &mut Self::InstantiateEnv, - _meta: &mut Self::Meta, + _env: &mut Self::InstantiateEnv, + _meta: &mut Self::Meta, _graph: HydroflowGraph, _extra_stmts: Vec<Stmt>, -)

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +)

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where @@ -22,7 +22,7 @@ F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where diff --git a/doc/hydro_lang/deploy/in_memory_graph/struct.SingleProcessGraph.html b/doc/hydro_lang/deploy/in_memory_graph/struct.SingleProcessGraph.html new file mode 100644 index 000000000000..fa9d7685d2c2 --- /dev/null +++ b/doc/hydro_lang/deploy/in_memory_graph/struct.SingleProcessGraph.html @@ -0,0 +1,23 @@ +SingleProcessGraph in hydro_lang::deploy::in_memory_graph - Rust
pub struct SingleProcessGraph {}

Trait Implementations§

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/doc/hydro_lang/deploy/index.html b/doc/hydro_lang/deploy/index.html new file mode 100644 index 000000000000..83e45a57d7b5 --- /dev/null +++ b/doc/hydro_lang/deploy/index.html @@ -0,0 +1 @@ +hydro_lang::deploy - Rust
\ No newline at end of file diff --git a/doc/hydro_lang/deploy/macro_runtime/index.html b/doc/hydro_lang/deploy/macro_runtime/index.html new file mode 100644 index 000000000000..57548e30e480 --- /dev/null +++ b/doc/hydro_lang/deploy/macro_runtime/index.html @@ -0,0 +1 @@ +hydro_lang::deploy::macro_runtime - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus/deploy/macro_runtime/sidebar-items.js b/doc/hydro_lang/deploy/macro_runtime/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus/deploy/macro_runtime/sidebar-items.js rename to doc/hydro_lang/deploy/macro_runtime/sidebar-items.js diff --git a/doc/hydro_lang/deploy/macro_runtime/struct.DeployRuntime.html b/doc/hydro_lang/deploy/macro_runtime/struct.DeployRuntime.html new file mode 100644 index 000000000000..24033fc27156 --- /dev/null +++ b/doc/hydro_lang/deploy/macro_runtime/struct.DeployRuntime.html @@ -0,0 +1,114 @@ +DeployRuntime in hydro_lang::deploy::macro_runtime - Rust

Struct hydro_lang::deploy::macro_runtime::DeployRuntime

source ·
pub struct DeployRuntime {}

Trait Implementations§

source§

impl ClusterSpec<'_, DeployRuntime> for ()

source§

fn build(self, _id: usize, _name_hint: &str) -> DeployRuntimeCluster

source§

impl<'a> Deploy<'a> for DeployRuntime

source§

type InstantiateEnv = ()

source§

type CompileEnv = RuntimeData<&'a DeployPorts<HydroflowPlusMeta>>

source§

type Process = DeployRuntimeNode

source§

type Cluster = DeployRuntimeCluster

source§

type ExternalProcess = DeployRuntimeNode

source§

type Port = String

source§

type ExternalRawPort = ()

source§

type Meta = ()

source§

type GraphId = usize

Type of ID used to switch between different subgraphs at runtime.
source§

fn has_trivial_node() -> bool

source§

fn trivial_process(_id: usize) -> Self::Process

source§

fn trivial_cluster(_id: usize) -> Self::Cluster

source§

fn allocate_process_port(process: &Self::Process) -> Self::Port

source§

fn allocate_cluster_port(cluster: &Self::Cluster) -> Self::Port

source§

fn allocate_external_port(_external: &Self::ExternalProcess) -> Self::Port

source§

fn o2o_sink_source( + env: &Self::CompileEnv, + _p1: &Self::Process, + p1_port: &Self::Port, + _p2: &Self::Process, + p2_port: &Self::Port, +) -> (Expr, Expr)

source§

fn o2o_connect( + _p1: &Self::Process, + _p1_port: &Self::Port, + _p2: &Self::Process, + _p2_port: &Self::Port, +) -> Box<dyn FnOnce()>

source§

fn o2m_sink_source( + env: &Self::CompileEnv, + _p1: &Self::Process, + p1_port: &Self::Port, + _c2: &Self::Cluster, + c2_port: &Self::Port, +) -> (Expr, Expr)

source§

fn o2m_connect( + _p1: &Self::Process, + _p1_port: &Self::Port, + _c2: &Self::Cluster, + _c2_port: &Self::Port, +) -> Box<dyn FnOnce()>

source§

fn m2o_sink_source( + env: &Self::CompileEnv, + _c1: &Self::Cluster, + c1_port: &Self::Port, + _p2: &Self::Process, + p2_port: &Self::Port, +) -> (Expr, Expr)

source§

fn m2o_connect( + _c1: &Self::Cluster, + _c1_port: &Self::Port, + _p2: &Self::Process, + _p2_port: &Self::Port, +) -> Box<dyn FnOnce()>

source§

fn m2m_sink_source( + env: &Self::CompileEnv, + _c1: &Self::Cluster, + c1_port: &Self::Port, + _c2: &Self::Cluster, + c2_port: &Self::Port, +) -> (Expr, Expr)

source§

fn m2m_connect( + _c1: &Self::Cluster, + _c1_port: &Self::Port, + _c2: &Self::Cluster, + _c2_port: &Self::Port, +) -> Box<dyn FnOnce()>

source§

fn e2o_source( + _compile_env: &Self::CompileEnv, + _p1: &Self::ExternalProcess, + _p1_port: &Self::Port, + _p2: &Self::Process, + _p2_port: &Self::Port, +) -> Expr

source§

fn e2o_connect( + _p1: &Self::ExternalProcess, + _p1_port: &Self::Port, + _p2: &Self::Process, + _p2_port: &Self::Port, +) -> Box<dyn FnOnce()>

source§

fn o2e_sink( + _compile_env: &Self::CompileEnv, + _p1: &Self::Process, + _p1_port: &Self::Port, + _p2: &Self::ExternalProcess, + _p2_port: &Self::Port, +) -> Expr

source§

fn o2e_connect( + _p1: &Self::Process, + _p1_port: &Self::Port, + _p2: &Self::ExternalProcess, + _p2_port: &Self::Port, +) -> Box<dyn FnOnce()>

source§

fn cluster_ids( + env: &Self::CompileEnv, + of_cluster: usize, +) -> impl QuotedWithContext<'a, &'a Vec<u32>, ()> + Copy + 'a

source§

fn cluster_self_id( + env: &Self::CompileEnv, +) -> impl QuotedWithContext<'a, u32, ()> + Copy + 'a

source§

impl ExternalSpec<'_, DeployRuntime> for ()

source§

fn build(self, _id: usize, _name_hint: &str) -> DeployRuntimeNode

source§

impl ProcessSpec<'_, DeployRuntime> for ()

source§

fn build(self, _id: usize, _name_hint: &str) -> DeployRuntimeNode

source§

impl<'a> RegisterPort<'a, DeployRuntime> for DeployRuntimeNode

source§

fn register(&self, _key: usize, _port: <DeployRuntime as Deploy<'_>>::Port)

source§

fn raw_port( + &self, + _key: usize, +) -> <DeployRuntime as Deploy<'_>>::ExternalRawPort

source§

fn as_bytes_sink( + &self, + _key: usize, +) -> impl Future<Output = Pin<Box<dyn Sink<Bytes, Error = Error>>>> + 'a

source§

fn as_bincode_sink<T: Serialize + 'static>( + &self, + _key: usize, +) -> impl Future<Output = Pin<Box<dyn Sink<T, Error = Error>>>> + 'a

source§

fn as_bytes_source( + &self, + _key: usize, +) -> impl Future<Output = Pin<Box<dyn Stream<Item = Bytes>>>> + 'a

source§

fn as_bincode_source<T: DeserializeOwned + 'static>( + &self, + _key: usize, +) -> impl Future<Output = Pin<Box<dyn Stream<Item = T>>>> + 'a

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
source§

impl<'a, T, N, C, E, M, R> LocalDeploy<'a> for T
where + N: Node<Meta = M>, + C: Node<Meta = M>, + T: Deploy<'a, Process = N, Cluster = C, ExternalProcess = E, Meta = M, GraphId = R>, + E: Node<Meta = M>, + M: Default,

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/doc/hydroflow_plus/deploy/macro_runtime/struct.DeployRuntimeCluster.html b/doc/hydro_lang/deploy/macro_runtime/struct.DeployRuntimeCluster.html similarity index 66% rename from doc/hydroflow_plus/deploy/macro_runtime/struct.DeployRuntimeCluster.html rename to doc/hydro_lang/deploy/macro_runtime/struct.DeployRuntimeCluster.html index a9b02242a865..3fc88f4a02a6 100644 --- a/doc/hydroflow_plus/deploy/macro_runtime/struct.DeployRuntimeCluster.html +++ b/doc/hydro_lang/deploy/macro_runtime/struct.DeployRuntimeCluster.html @@ -1,10 +1,10 @@ -DeployRuntimeCluster in hydroflow_plus::deploy::macro_runtime - Rust
pub struct DeployRuntimeCluster { /* private fields */ }

Trait Implementations§

source§

impl Clone for DeployRuntimeCluster

source§

fn clone(&self) -> DeployRuntimeCluster

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Node for DeployRuntimeCluster

source§

type Port = String

source§

type Meta = ()

source§

type InstantiateEnv = ()

source§

fn next_port(&self) -> String

source§

fn update_meta(&mut self, _meta: &Self::Meta)

source§

fn instantiate( +DeployRuntimeCluster in hydro_lang::deploy::macro_runtime - Rust
pub struct DeployRuntimeCluster { /* private fields */ }

Trait Implementations§

source§

impl Clone for DeployRuntimeCluster

source§

fn clone(&self) -> DeployRuntimeCluster

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Node for DeployRuntimeCluster

source§

type Port = String

source§

type Meta = ()

source§

type InstantiateEnv = ()

source§

fn next_port(&self) -> String

source§

fn update_meta(&mut self, _meta: &Self::Meta)

source§

fn instantiate( &self, - _env: &mut Self::InstantiateEnv, - _meta: &mut Self::Meta, + _env: &mut Self::InstantiateEnv, + _meta: &mut Self::Meta, _graph: HydroflowGraph, _extra_stmts: Vec<Stmt>, -)

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +)

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where @@ -22,7 +22,7 @@ F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where diff --git a/doc/hydroflow_plus/deploy/macro_runtime/struct.DeployRuntimeNode.html b/doc/hydro_lang/deploy/macro_runtime/struct.DeployRuntimeNode.html similarity index 63% rename from doc/hydroflow_plus/deploy/macro_runtime/struct.DeployRuntimeNode.html rename to doc/hydro_lang/deploy/macro_runtime/struct.DeployRuntimeNode.html index c5de92c1b40f..5ecd96d057a9 100644 --- a/doc/hydroflow_plus/deploy/macro_runtime/struct.DeployRuntimeNode.html +++ b/doc/hydro_lang/deploy/macro_runtime/struct.DeployRuntimeNode.html @@ -1,25 +1,25 @@ -DeployRuntimeNode in hydroflow_plus::deploy::macro_runtime - Rust
pub struct DeployRuntimeNode { /* private fields */ }

Trait Implementations§

source§

impl Clone for DeployRuntimeNode

source§

fn clone(&self) -> DeployRuntimeNode

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Node for DeployRuntimeNode

source§

type Port = String

source§

type Meta = ()

source§

type InstantiateEnv = ()

source§

fn next_port(&self) -> String

source§

fn update_meta(&mut self, _meta: &Self::Meta)

source§

fn instantiate( +DeployRuntimeNode in hydro_lang::deploy::macro_runtime - Rust

Struct hydro_lang::deploy::macro_runtime::DeployRuntimeNode

source ·
pub struct DeployRuntimeNode { /* private fields */ }

Trait Implementations§

source§

impl Clone for DeployRuntimeNode

source§

fn clone(&self) -> DeployRuntimeNode

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Node for DeployRuntimeNode

source§

type Port = String

source§

type Meta = ()

source§

type InstantiateEnv = ()

source§

fn next_port(&self) -> String

source§

fn update_meta(&mut self, _meta: &Self::Meta)

source§

fn instantiate( &self, - _env: &mut Self::InstantiateEnv, - _meta: &mut Self::Meta, + _env: &mut Self::InstantiateEnv, + _meta: &mut Self::Meta, _graph: HydroflowGraph, _extra_stmts: Vec<Stmt>, -)

source§

impl<'a> RegisterPort<'a, DeployRuntime> for DeployRuntimeNode

source§

fn register(&self, _key: usize, _port: <DeployRuntime as Deploy<'_>>::Port)

source§

fn raw_port( +)

source§

impl<'a> RegisterPort<'a, DeployRuntime> for DeployRuntimeNode

source§

fn register(&self, _key: usize, _port: <DeployRuntime as Deploy<'_>>::Port)

source§

fn raw_port( &self, _key: usize, -) -> <DeployRuntime as Deploy<'_>>::ExternalRawPort

source§

fn as_bytes_sink( +) -> <DeployRuntime as Deploy<'_>>::ExternalRawPort

source§

fn as_bytes_sink( &self, _key: usize, -) -> impl Future<Output = Pin<Box<dyn Sink<Bytes, Error = Error>>>> + 'a

source§

fn as_bincode_sink<T: Serialize + 'static>( +) -> impl Future<Output = Pin<Box<dyn Sink<Bytes, Error = Error>>>> + 'a

source§

fn as_bincode_sink<T: Serialize + 'static>( &self, _key: usize, -) -> impl Future<Output = Pin<Box<dyn Sink<T, Error = Error>>>> + 'a

source§

fn as_bytes_source( +) -> impl Future<Output = Pin<Box<dyn Sink<T, Error = Error>>>> + 'a

source§

fn as_bytes_source( &self, _key: usize, -) -> impl Future<Output = Pin<Box<dyn Stream<Item = Bytes>>>> + 'a

source§

fn as_bincode_source<T: DeserializeOwned + 'static>( +) -> impl Future<Output = Pin<Box<dyn Stream<Item = Bytes>>>> + 'a

source§

fn as_bincode_source<T: DeserializeOwned + 'static>( &self, _key: usize, -) -> impl Future<Output = Pin<Box<dyn Stream<Item = T>>>> + 'a

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +) -> impl Future<Output = Pin<Box<dyn Stream<Item = T>>>> + 'a

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where @@ -37,7 +37,7 @@ F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where diff --git a/doc/hydroflow_plus/deploy/sidebar-items.js b/doc/hydro_lang/deploy/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus/deploy/sidebar-items.js rename to doc/hydro_lang/deploy/sidebar-items.js diff --git a/doc/hydro_lang/deploy/trait.ClusterSpec.html b/doc/hydro_lang/deploy/trait.ClusterSpec.html new file mode 100644 index 000000000000..60de0c297e9e --- /dev/null +++ b/doc/hydro_lang/deploy/trait.ClusterSpec.html @@ -0,0 +1,4 @@ +ClusterSpec in hydro_lang::deploy - Rust

Trait hydro_lang::deploy::ClusterSpec

source ·
pub trait ClusterSpec<'a, D: LocalDeploy<'a> + ?Sized> {
+    // Required method
+    fn build(self, id: usize, name_hint: &str) -> D::Cluster;
+}

Required Methods§

source

fn build(self, id: usize, name_hint: &str) -> D::Cluster

Implementations on Foreign Types§

source§

impl ClusterSpec<'_, DeployRuntime> for ()

source§

fn build(self, _id: usize, _name_hint: &str) -> DeployRuntimeCluster

Implementors§

\ No newline at end of file diff --git a/doc/hydro_lang/deploy/trait.Deploy.html b/doc/hydro_lang/deploy/trait.Deploy.html new file mode 100644 index 000000000000..35d7d771b5b3 --- /dev/null +++ b/doc/hydro_lang/deploy/trait.Deploy.html @@ -0,0 +1,178 @@ +Deploy in hydro_lang::deploy - Rust

Trait hydro_lang::deploy::Deploy

source ·
pub trait Deploy<'a> {
+    type InstantiateEnv;
+    type CompileEnv;
+    type Process: Node<Meta = Self::Meta, InstantiateEnv = Self::InstantiateEnv> + Clone;
+    type Cluster: Node<Meta = Self::Meta, InstantiateEnv = Self::InstantiateEnv> + Clone;
+    type ExternalProcess: Node<Meta = Self::Meta, InstantiateEnv = Self::InstantiateEnv> + RegisterPort<'a, Self>;
+    type Port: Clone;
+    type ExternalRawPort;
+    type Meta: Default;
+    type GraphId;
+
+
Show 20 methods // Required methods + fn allocate_process_port(process: &Self::Process) -> Self::Port; + fn allocate_cluster_port(cluster: &Self::Cluster) -> Self::Port; + fn allocate_external_port(external: &Self::ExternalProcess) -> Self::Port; + fn o2o_sink_source( + compile_env: &Self::CompileEnv, + p1: &Self::Process, + p1_port: &Self::Port, + p2: &Self::Process, + p2_port: &Self::Port, + ) -> (Expr, Expr); + fn o2o_connect( + p1: &Self::Process, + p1_port: &Self::Port, + p2: &Self::Process, + p2_port: &Self::Port, + ) -> Box<dyn FnOnce()>; + fn o2m_sink_source( + compile_env: &Self::CompileEnv, + p1: &Self::Process, + p1_port: &Self::Port, + c2: &Self::Cluster, + c2_port: &Self::Port, + ) -> (Expr, Expr); + fn o2m_connect( + p1: &Self::Process, + p1_port: &Self::Port, + c2: &Self::Cluster, + c2_port: &Self::Port, + ) -> Box<dyn FnOnce()>; + fn m2o_sink_source( + compile_env: &Self::CompileEnv, + c1: &Self::Cluster, + c1_port: &Self::Port, + p2: &Self::Process, + p2_port: &Self::Port, + ) -> (Expr, Expr); + fn m2o_connect( + c1: &Self::Cluster, + c1_port: &Self::Port, + p2: &Self::Process, + p2_port: &Self::Port, + ) -> Box<dyn FnOnce()>; + fn m2m_sink_source( + compile_env: &Self::CompileEnv, + c1: &Self::Cluster, + c1_port: &Self::Port, + c2: &Self::Cluster, + c2_port: &Self::Port, + ) -> (Expr, Expr); + fn m2m_connect( + c1: &Self::Cluster, + c1_port: &Self::Port, + c2: &Self::Cluster, + c2_port: &Self::Port, + ) -> Box<dyn FnOnce()>; + fn e2o_source( + compile_env: &Self::CompileEnv, + p1: &Self::ExternalProcess, + p1_port: &Self::Port, + p2: &Self::Process, + p2_port: &Self::Port, + ) -> Expr; + fn e2o_connect( + p1: &Self::ExternalProcess, + p1_port: &Self::Port, + p2: &Self::Process, + p2_port: &Self::Port, + ) -> Box<dyn FnOnce()>; + fn o2e_sink( + compile_env: &Self::CompileEnv, + p1: &Self::Process, + p1_port: &Self::Port, + p2: &Self::ExternalProcess, + p2_port: &Self::Port, + ) -> Expr; + fn o2e_connect( + p1: &Self::Process, + p1_port: &Self::Port, + p2: &Self::ExternalProcess, + p2_port: &Self::Port, + ) -> Box<dyn FnOnce()>; + fn cluster_ids( + env: &Self::CompileEnv, + of_cluster: usize, + ) -> impl QuotedWithContext<'a, &'a Vec<u32>, ()> + Copy + 'a; + fn cluster_self_id( + env: &Self::CompileEnv, + ) -> impl QuotedWithContext<'a, u32, ()> + Copy + 'a; + + // Provided methods + fn has_trivial_node() -> bool { ... } + fn trivial_process(_id: usize) -> Self::Process { ... } + fn trivial_cluster(_id: usize) -> Self::Cluster { ... } +
}

Required Associated Types§

source

type InstantiateEnv

source

type CompileEnv

source

type Process: Node<Meta = Self::Meta, InstantiateEnv = Self::InstantiateEnv> + Clone

source

type Cluster: Node<Meta = Self::Meta, InstantiateEnv = Self::InstantiateEnv> + Clone

source

type ExternalProcess: Node<Meta = Self::Meta, InstantiateEnv = Self::InstantiateEnv> + RegisterPort<'a, Self>

source

type Port: Clone

source

type ExternalRawPort

source

type Meta: Default

source

type GraphId

Type of ID used to switch between different subgraphs at runtime.

+

Required Methods§

source

fn allocate_process_port(process: &Self::Process) -> Self::Port

source

fn allocate_cluster_port(cluster: &Self::Cluster) -> Self::Port

source

fn allocate_external_port(external: &Self::ExternalProcess) -> Self::Port

source

fn o2o_sink_source( + compile_env: &Self::CompileEnv, + p1: &Self::Process, + p1_port: &Self::Port, + p2: &Self::Process, + p2_port: &Self::Port, +) -> (Expr, Expr)

source

fn o2o_connect( + p1: &Self::Process, + p1_port: &Self::Port, + p2: &Self::Process, + p2_port: &Self::Port, +) -> Box<dyn FnOnce()>

source

fn o2m_sink_source( + compile_env: &Self::CompileEnv, + p1: &Self::Process, + p1_port: &Self::Port, + c2: &Self::Cluster, + c2_port: &Self::Port, +) -> (Expr, Expr)

source

fn o2m_connect( + p1: &Self::Process, + p1_port: &Self::Port, + c2: &Self::Cluster, + c2_port: &Self::Port, +) -> Box<dyn FnOnce()>

source

fn m2o_sink_source( + compile_env: &Self::CompileEnv, + c1: &Self::Cluster, + c1_port: &Self::Port, + p2: &Self::Process, + p2_port: &Self::Port, +) -> (Expr, Expr)

source

fn m2o_connect( + c1: &Self::Cluster, + c1_port: &Self::Port, + p2: &Self::Process, + p2_port: &Self::Port, +) -> Box<dyn FnOnce()>

source

fn m2m_sink_source( + compile_env: &Self::CompileEnv, + c1: &Self::Cluster, + c1_port: &Self::Port, + c2: &Self::Cluster, + c2_port: &Self::Port, +) -> (Expr, Expr)

source

fn m2m_connect( + c1: &Self::Cluster, + c1_port: &Self::Port, + c2: &Self::Cluster, + c2_port: &Self::Port, +) -> Box<dyn FnOnce()>

source

fn e2o_source( + compile_env: &Self::CompileEnv, + p1: &Self::ExternalProcess, + p1_port: &Self::Port, + p2: &Self::Process, + p2_port: &Self::Port, +) -> Expr

source

fn e2o_connect( + p1: &Self::ExternalProcess, + p1_port: &Self::Port, + p2: &Self::Process, + p2_port: &Self::Port, +) -> Box<dyn FnOnce()>

source

fn o2e_sink( + compile_env: &Self::CompileEnv, + p1: &Self::Process, + p1_port: &Self::Port, + p2: &Self::ExternalProcess, + p2_port: &Self::Port, +) -> Expr

source

fn o2e_connect( + p1: &Self::Process, + p1_port: &Self::Port, + p2: &Self::ExternalProcess, + p2_port: &Self::Port, +) -> Box<dyn FnOnce()>

source

fn cluster_ids( + env: &Self::CompileEnv, + of_cluster: usize, +) -> impl QuotedWithContext<'a, &'a Vec<u32>, ()> + Copy + 'a

source

fn cluster_self_id( + env: &Self::CompileEnv, +) -> impl QuotedWithContext<'a, u32, ()> + Copy + 'a

Provided Methods§

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/doc/hydro_lang/deploy/trait.ExternalSpec.html b/doc/hydro_lang/deploy/trait.ExternalSpec.html new file mode 100644 index 000000000000..487bb89eb16f --- /dev/null +++ b/doc/hydro_lang/deploy/trait.ExternalSpec.html @@ -0,0 +1,4 @@ +ExternalSpec in hydro_lang::deploy - Rust

Trait hydro_lang::deploy::ExternalSpec

source ·
pub trait ExternalSpec<'a, D: LocalDeploy<'a> + ?Sized> {
+    // Required method
+    fn build(self, id: usize, name_hint: &str) -> D::ExternalProcess;
+}

Required Methods§

source

fn build(self, id: usize, name_hint: &str) -> D::ExternalProcess

Implementations on Foreign Types§

source§

impl ExternalSpec<'_, DeployRuntime> for ()

source§

fn build(self, _id: usize, _name_hint: &str) -> DeployRuntimeNode

Implementors§

\ No newline at end of file diff --git a/doc/hydro_lang/deploy/trait.IntoProcessSpec.html b/doc/hydro_lang/deploy/trait.IntoProcessSpec.html new file mode 100644 index 000000000000..99c278c06cd6 --- /dev/null +++ b/doc/hydro_lang/deploy/trait.IntoProcessSpec.html @@ -0,0 +1,6 @@ +IntoProcessSpec in hydro_lang::deploy - Rust

Trait hydro_lang::deploy::IntoProcessSpec

source ·
pub trait IntoProcessSpec<'a, D: LocalDeploy<'a> + ?Sized> {
+    type ProcessSpec: ProcessSpec<'a, D>;
+
+    // Required method
+    fn into_process_spec(self) -> Self::ProcessSpec;
+}

Required Associated Types§

Required Methods§

Implementors§

source§

impl<'a, D: LocalDeploy<'a> + ?Sized, T: ProcessSpec<'a, D>> IntoProcessSpec<'a, D> for T

\ No newline at end of file diff --git a/doc/hydro_lang/deploy/trait.LocalDeploy.html b/doc/hydro_lang/deploy/trait.LocalDeploy.html new file mode 100644 index 000000000000..108d1a2ea83c --- /dev/null +++ b/doc/hydro_lang/deploy/trait.LocalDeploy.html @@ -0,0 +1,12 @@ +LocalDeploy in hydro_lang::deploy - Rust

Trait hydro_lang::deploy::LocalDeploy

source ·
pub trait LocalDeploy<'a> {
+    type Process: Node<Meta = Self::Meta>;
+    type Cluster: Node<Meta = Self::Meta>;
+    type ExternalProcess: Node<Meta = Self::Meta>;
+    type Meta: Default;
+    type GraphId;
+
+    // Provided methods
+    fn has_trivial_node() -> bool { ... }
+    fn trivial_process(_id: usize) -> Self::Process { ... }
+    fn trivial_cluster(_id: usize) -> Self::Cluster { ... }
+}

Required Associated Types§

source

type Process: Node<Meta = Self::Meta>

source

type Cluster: Node<Meta = Self::Meta>

source

type ExternalProcess: Node<Meta = Self::Meta>

source

type Meta: Default

source

type GraphId

Provided Methods§

Object Safety§

This trait is not object safe.

Implementors§

source§

impl LocalDeploy<'_> for MultiGraph

source§

impl LocalDeploy<'_> for SingleProcessGraph

source§

impl<'a, T: Deploy<'a, Process = N, Cluster = C, ExternalProcess = E, Meta = M, GraphId = R>, N: Node<Meta = M>, C: Node<Meta = M>, E: Node<Meta = M>, M: Default, R> LocalDeploy<'a> for T

\ No newline at end of file diff --git a/doc/hydro_lang/deploy/trait.Node.html b/doc/hydro_lang/deploy/trait.Node.html new file mode 100644 index 000000000000..e0fc069c418f --- /dev/null +++ b/doc/hydro_lang/deploy/trait.Node.html @@ -0,0 +1,22 @@ +Node in hydro_lang::deploy - Rust

Trait hydro_lang::deploy::Node

source ·
pub trait Node {
+    type Port;
+    type Meta;
+    type InstantiateEnv;
+
+    // Required methods
+    fn next_port(&self) -> Self::Port;
+    fn update_meta(&mut self, meta: &Self::Meta);
+    fn instantiate(
+        &self,
+        env: &mut Self::InstantiateEnv,
+        meta: &mut Self::Meta,
+        graph: HydroflowGraph,
+        extra_stmts: Vec<Stmt>,
+    );
+}

Required Associated Types§

Required Methods§

source

fn next_port(&self) -> Self::Port

source

fn update_meta(&mut self, meta: &Self::Meta)

source

fn instantiate( + &self, + env: &mut Self::InstantiateEnv, + meta: &mut Self::Meta, + graph: HydroflowGraph, + extra_stmts: Vec<Stmt>, +)

Implementors§

\ No newline at end of file diff --git a/doc/hydro_lang/deploy/trait.ProcessSpec.html b/doc/hydro_lang/deploy/trait.ProcessSpec.html new file mode 100644 index 000000000000..d295a538b7a8 --- /dev/null +++ b/doc/hydro_lang/deploy/trait.ProcessSpec.html @@ -0,0 +1,4 @@ +ProcessSpec in hydro_lang::deploy - Rust

Trait hydro_lang::deploy::ProcessSpec

source ·
pub trait ProcessSpec<'a, D: LocalDeploy<'a> + ?Sized> {
+    // Required method
+    fn build(self, id: usize, name_hint: &str) -> D::Process;
+}

Required Methods§

source

fn build(self, id: usize, name_hint: &str) -> D::Process

Implementations on Foreign Types§

source§

impl ProcessSpec<'_, MultiGraph> for ()

source§

fn build(self, _id: usize, _name_hint: &str) -> MultiNode

source§

impl ProcessSpec<'_, SingleProcessGraph> for ()

source§

fn build(self, _id: usize, _name_hint: &str) -> SingleNode

source§

impl ProcessSpec<'_, DeployRuntime> for ()

source§

fn build(self, _id: usize, _name_hint: &str) -> DeployRuntimeNode

Implementors§

\ No newline at end of file diff --git a/doc/hydroflow_plus/deploy/trait.RegisterPort.html b/doc/hydro_lang/deploy/trait.RegisterPort.html similarity index 54% rename from doc/hydroflow_plus/deploy/trait.RegisterPort.html rename to doc/hydro_lang/deploy/trait.RegisterPort.html index f03ce53d3239..cb13e988668c 100644 --- a/doc/hydroflow_plus/deploy/trait.RegisterPort.html +++ b/doc/hydro_lang/deploy/trait.RegisterPort.html @@ -1,7 +1,7 @@ -RegisterPort in hydroflow_plus::deploy - Rust

Trait hydroflow_plus::deploy::RegisterPort

source ·
pub trait RegisterPort<'a, D: Deploy<'a> + ?Sized>: Clone {
+RegisterPort in hydro_lang::deploy - Rust

Trait hydro_lang::deploy::RegisterPort

source ·
pub trait RegisterPort<'a, D: Deploy<'a> + ?Sized>: Clone {
     // Required methods
-    fn register(&self, key: usize, port: D::Port);
-    fn raw_port(&self, key: usize) -> D::ExternalRawPort;
+    fn register(&self, key: usize, port: D::Port);
+    fn raw_port(&self, key: usize) -> D::ExternalRawPort;
     fn as_bytes_sink(
         &self,
         key: usize,
@@ -18,16 +18,16 @@
         &self,
         key: usize,
     ) -> impl Future<Output = Pin<Box<dyn Stream<Item = T>>>> + 'a;
-}

Required Methods§

source

fn register(&self, key: usize, port: D::Port)

source

fn raw_port(&self, key: usize) -> D::ExternalRawPort

source

fn as_bytes_sink( +}

Required Methods§

source

fn register(&self, key: usize, port: D::Port)

source

fn raw_port(&self, key: usize) -> D::ExternalRawPort

source

fn as_bytes_sink( &self, key: usize, -) -> impl Future<Output = Pin<Box<dyn Sink<Bytes, Error = Error>>>> + 'a

source

fn as_bincode_sink<T: Serialize + 'static>( +) -> impl Future<Output = Pin<Box<dyn Sink<Bytes, Error = Error>>>> + 'a

source

fn as_bincode_sink<T: Serialize + 'static>( &self, key: usize, -) -> impl Future<Output = Pin<Box<dyn Sink<T, Error = Error>>>> + 'a

source

fn as_bytes_source( +) -> impl Future<Output = Pin<Box<dyn Sink<T, Error = Error>>>> + 'a

source

fn as_bytes_source( &self, key: usize, -) -> impl Future<Output = Pin<Box<dyn Stream<Item = Bytes>>>> + 'a

source

fn as_bincode_source<T: DeserializeOwned + 'static>( +) -> impl Future<Output = Pin<Box<dyn Stream<Item = Bytes>>>> + 'a

source

fn as_bincode_source<T: DeserializeOwned + 'static>( &self, key: usize, -) -> impl Future<Output = Pin<Box<dyn Stream<Item = T>>>> + 'a

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file +) -> impl Future<Output = Pin<Box<dyn Stream<Item = T>>>> + 'a

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/doc/hydro_lang/deploy_runtime/fn.cluster_members.html b/doc/hydro_lang/deploy_runtime/fn.cluster_members.html new file mode 100644 index 000000000000..e89e5258bf6f --- /dev/null +++ b/doc/hydro_lang/deploy_runtime/fn.cluster_members.html @@ -0,0 +1,4 @@ +cluster_members in hydro_lang::deploy_runtime - Rust

Function hydro_lang::deploy_runtime::cluster_members

source ·
pub fn cluster_members(
+    cli: RuntimeData<&DeployPorts<HydroflowPlusMeta>>,
+    of_cluster: usize,
+) -> impl QuotedWithContext<'_, &Vec<u32>, ()> + Copy
\ No newline at end of file diff --git a/doc/hydro_lang/deploy_runtime/fn.cluster_self_id.html b/doc/hydro_lang/deploy_runtime/fn.cluster_self_id.html new file mode 100644 index 000000000000..3b2b340fecda --- /dev/null +++ b/doc/hydro_lang/deploy_runtime/fn.cluster_self_id.html @@ -0,0 +1,3 @@ +cluster_self_id in hydro_lang::deploy_runtime - Rust

Function hydro_lang::deploy_runtime::cluster_self_id

source ·
pub fn cluster_self_id(
+    cli: RuntimeData<&DeployPorts<HydroflowPlusMeta>>,
+) -> impl QuotedWithContext<'_, u32, ()> + Copy
\ No newline at end of file diff --git a/doc/hydro_lang/deploy_runtime/fn.deploy_e2o.html b/doc/hydro_lang/deploy_runtime/fn.deploy_e2o.html new file mode 100644 index 000000000000..2e34f5262289 --- /dev/null +++ b/doc/hydro_lang/deploy_runtime/fn.deploy_e2o.html @@ -0,0 +1,5 @@ +deploy_e2o in hydro_lang::deploy_runtime - Rust

Function hydro_lang::deploy_runtime::deploy_e2o

source ·
pub fn deploy_e2o(
+    env: RuntimeData<&DeployPorts<HydroflowPlusMeta>>,
+    _e1_port: &str,
+    p2_port: &str,
+) -> Expr
\ No newline at end of file diff --git a/doc/hydro_lang/deploy_runtime/fn.deploy_m2m.html b/doc/hydro_lang/deploy_runtime/fn.deploy_m2m.html new file mode 100644 index 000000000000..c6299d25f78c --- /dev/null +++ b/doc/hydro_lang/deploy_runtime/fn.deploy_m2m.html @@ -0,0 +1,5 @@ +deploy_m2m in hydro_lang::deploy_runtime - Rust

Function hydro_lang::deploy_runtime::deploy_m2m

source ·
pub fn deploy_m2m(
+    env: RuntimeData<&DeployPorts<HydroflowPlusMeta>>,
+    c1_port: &str,
+    c2_port: &str,
+) -> (Expr, Expr)
\ No newline at end of file diff --git a/doc/hydro_lang/deploy_runtime/fn.deploy_m2o.html b/doc/hydro_lang/deploy_runtime/fn.deploy_m2o.html new file mode 100644 index 000000000000..2bb3ff51feb9 --- /dev/null +++ b/doc/hydro_lang/deploy_runtime/fn.deploy_m2o.html @@ -0,0 +1,5 @@ +deploy_m2o in hydro_lang::deploy_runtime - Rust

Function hydro_lang::deploy_runtime::deploy_m2o

source ·
pub fn deploy_m2o(
+    env: RuntimeData<&DeployPorts<HydroflowPlusMeta>>,
+    c1_port: &str,
+    p2_port: &str,
+) -> (Expr, Expr)
\ No newline at end of file diff --git a/doc/hydro_lang/deploy_runtime/fn.deploy_o2e.html b/doc/hydro_lang/deploy_runtime/fn.deploy_o2e.html new file mode 100644 index 000000000000..76642acc579b --- /dev/null +++ b/doc/hydro_lang/deploy_runtime/fn.deploy_o2e.html @@ -0,0 +1,5 @@ +deploy_o2e in hydro_lang::deploy_runtime - Rust

Function hydro_lang::deploy_runtime::deploy_o2e

source ·
pub fn deploy_o2e(
+    env: RuntimeData<&DeployPorts<HydroflowPlusMeta>>,
+    p1_port: &str,
+    _e2_port: &str,
+) -> Expr
\ No newline at end of file diff --git a/doc/hydro_lang/deploy_runtime/fn.deploy_o2m.html b/doc/hydro_lang/deploy_runtime/fn.deploy_o2m.html new file mode 100644 index 000000000000..799f81b457d8 --- /dev/null +++ b/doc/hydro_lang/deploy_runtime/fn.deploy_o2m.html @@ -0,0 +1,5 @@ +deploy_o2m in hydro_lang::deploy_runtime - Rust

Function hydro_lang::deploy_runtime::deploy_o2m

source ·
pub fn deploy_o2m(
+    env: RuntimeData<&DeployPorts<HydroflowPlusMeta>>,
+    p1_port: &str,
+    c2_port: &str,
+) -> (Expr, Expr)
\ No newline at end of file diff --git a/doc/hydro_lang/deploy_runtime/fn.deploy_o2o.html b/doc/hydro_lang/deploy_runtime/fn.deploy_o2o.html new file mode 100644 index 000000000000..0a61a2c061fb --- /dev/null +++ b/doc/hydro_lang/deploy_runtime/fn.deploy_o2o.html @@ -0,0 +1,5 @@ +deploy_o2o in hydro_lang::deploy_runtime - Rust

Function hydro_lang::deploy_runtime::deploy_o2o

source ·
pub fn deploy_o2o(
+    env: RuntimeData<&DeployPorts<HydroflowPlusMeta>>,
+    p1_port: &str,
+    p2_port: &str,
+) -> (Expr, Expr)
\ No newline at end of file diff --git a/doc/hydro_lang/deploy_runtime/index.html b/doc/hydro_lang/deploy_runtime/index.html new file mode 100644 index 000000000000..1f3a3209bb26 --- /dev/null +++ b/doc/hydro_lang/deploy_runtime/index.html @@ -0,0 +1 @@ +hydro_lang::deploy_runtime - Rust

Module hydro_lang::deploy_runtime

source ·

Structs§

Functions§

\ No newline at end of file diff --git a/doc/hydroflow_plus/deploy_runtime/sidebar-items.js b/doc/hydro_lang/deploy_runtime/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus/deploy_runtime/sidebar-items.js rename to doc/hydro_lang/deploy_runtime/sidebar-items.js diff --git a/doc/hydroflow_plus/deploy_runtime/struct.HydroflowPlusMeta.html b/doc/hydro_lang/deploy_runtime/struct.HydroflowPlusMeta.html similarity index 67% rename from doc/hydroflow_plus/deploy_runtime/struct.HydroflowPlusMeta.html rename to doc/hydro_lang/deploy_runtime/struct.HydroflowPlusMeta.html index 2b6a580cff1f..810baea38adc 100644 --- a/doc/hydroflow_plus/deploy_runtime/struct.HydroflowPlusMeta.html +++ b/doc/hydro_lang/deploy_runtime/struct.HydroflowPlusMeta.html @@ -1,10 +1,10 @@ -HydroflowPlusMeta in hydroflow_plus::deploy_runtime - Rust

Struct hydroflow_plus::deploy_runtime::HydroflowPlusMeta

source ·
pub struct HydroflowPlusMeta {
+HydroflowPlusMeta in hydro_lang::deploy_runtime - Rust

Struct hydro_lang::deploy_runtime::HydroflowPlusMeta

source ·
pub struct HydroflowPlusMeta {
     pub clusters: HashMap<usize, Vec<u32>>,
     pub cluster_id: Option<u32>,
     pub subgraph_id: usize,
-}

Fields§

§clusters: HashMap<usize, Vec<u32>>§cluster_id: Option<u32>§subgraph_id: usize

Trait Implementations§

source§

impl Default for HydroflowPlusMeta

source§

fn default() -> HydroflowPlusMeta

Returns the “default value” for a type. Read more
source§

impl<'de> Deserialize<'de> for HydroflowPlusMeta

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for HydroflowPlusMeta

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +}

Fields§

§clusters: HashMap<usize, Vec<u32>>§cluster_id: Option<u32>§subgraph_id: usize

Trait Implementations§

source§

impl Default for HydroflowPlusMeta

source§

fn default() -> HydroflowPlusMeta

Returns the “default value” for a type. Read more
source§

impl<'de> Deserialize<'de> for HydroflowPlusMeta

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for HydroflowPlusMeta

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -21,7 +21,7 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a diff --git a/doc/hydro_lang/index.html b/doc/hydro_lang/index.html new file mode 100644 index 000000000000..42402f12e850 --- /dev/null +++ b/doc/hydro_lang/index.html @@ -0,0 +1 @@ +hydro_lang - Rust

Crate hydro_lang

source ·

Re-exports§

Modules§

Macros§

  • Creates a quoted expression for Hydro.
\ No newline at end of file diff --git a/doc/hydroflow_plus/ir/enum.DebugInstantiate.html b/doc/hydro_lang/ir/enum.DebugInstantiate.html similarity index 70% rename from doc/hydroflow_plus/ir/enum.DebugInstantiate.html rename to doc/hydro_lang/ir/enum.DebugInstantiate.html index a410213ae92a..681e90e53ad7 100644 --- a/doc/hydroflow_plus/ir/enum.DebugInstantiate.html +++ b/doc/hydro_lang/ir/enum.DebugInstantiate.html @@ -1,7 +1,7 @@ -DebugInstantiate in hydroflow_plus::ir - Rust

Enum hydroflow_plus::ir::DebugInstantiate

source ·
pub enum DebugInstantiate {
+DebugInstantiate in hydro_lang::ir - Rust

Enum hydro_lang::ir::DebugInstantiate

source ·
pub enum DebugInstantiate {
     Building(),
     Finalized(Expr, Expr, Option<Box<dyn FnOnce()>>),
-}

Variants§

§

Building()

§

Finalized(Expr, Expr, Option<Box<dyn FnOnce()>>)

Trait Implementations§

source§

impl Debug for DebugInstantiate

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +}

Variants§

§

Building()

§

Finalized(Expr, Expr, Option<Box<dyn FnOnce()>>)

Trait Implementations§

source§

impl Debug for DebugInstantiate

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -18,7 +18,7 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a diff --git a/doc/hydroflow_plus/ir/enum.HfPlusLeaf.html b/doc/hydro_lang/ir/enum.HydroLeaf.html similarity index 61% rename from doc/hydroflow_plus/ir/enum.HfPlusLeaf.html rename to doc/hydro_lang/ir/enum.HydroLeaf.html index c7d23d65ca48..28e453b5390a 100644 --- a/doc/hydroflow_plus/ir/enum.HfPlusLeaf.html +++ b/doc/hydro_lang/ir/enum.HydroLeaf.html @@ -1,37 +1,37 @@ -HfPlusLeaf in hydroflow_plus::ir - Rust

Enum hydroflow_plus::ir::HfPlusLeaf

source ·
pub enum HfPlusLeaf {
+HydroLeaf in hydro_lang::ir - Rust

Enum hydro_lang::ir::HydroLeaf

source ·
pub enum HydroLeaf {
     ForEach {
-        f: DebugExpr,
-        input: Box<HfPlusNode>,
+        f: DebugExpr,
+        input: Box<HydroNode>,
     },
     DestSink {
-        sink: DebugExpr,
-        input: Box<HfPlusNode>,
+        sink: DebugExpr,
+        input: Box<HydroNode>,
     },
     CycleSink {
         ident: Ident,
-        location_kind: LocationId,
-        input: Box<HfPlusNode>,
+        location_kind: LocationId,
+        input: Box<HydroNode>,
     },
-}
Expand description

An leaf in a Hydroflow+ graph, which is an pipeline that doesn’t emit +}

Expand description

An leaf in a Hydro graph, which is an pipeline that doesn’t emit any downstream values. Traversals over the dataflow graph and generating Hydroflow IR start from leaves.

-

Variants§

§

ForEach

Fields

§

DestSink

Fields

§

CycleSink

Fields

§ident: Ident
§location_kind: LocationId

Implementations§

source§

impl HfPlusLeaf

source

pub fn compile_network<'a, D: Deploy<'a>>( +

Variants§

§

ForEach

Fields

§

DestSink

Fields

§

CycleSink

Fields

§ident: Ident
§location_kind: LocationId

Implementations§

source§

impl HydroLeaf

source

pub fn compile_network<'a, D: Deploy<'a>>( self, - compile_env: &D::CompileEnv, - seen_tees: &mut SeenTees, - nodes: &HashMap<usize, D::Process>, - clusters: &HashMap<usize, D::Cluster>, - externals: &HashMap<usize, D::ExternalProcess>, -) -> HfPlusLeaf

source

pub fn connect_network(self, seen_tees: &mut SeenTees) -> HfPlusLeaf

source

pub fn transform_children( + compile_env: &D::CompileEnv, + seen_tees: &mut SeenTees, + nodes: &HashMap<usize, D::Process>, + clusters: &HashMap<usize, D::Cluster>, + externals: &HashMap<usize, D::ExternalProcess>, +) -> HydroLeaf

source

pub fn connect_network(self, seen_tees: &mut SeenTees) -> HydroLeaf

source

pub fn transform_children( self, - transform: impl FnMut(&mut HfPlusNode, &mut SeenTees), - seen_tees: &mut SeenTees, -) -> HfPlusLeaf

source

pub fn emit( + transform: impl FnMut(&mut HydroNode, &mut SeenTees), + seen_tees: &mut SeenTees, +) -> HydroLeaf

source

pub fn emit( &self, graph_builders: &mut BTreeMap<usize, FlatGraphBuilder>, - built_tees: &mut HashMap<*const RefCell<HfPlusNode>, (Ident, usize)>, + built_tees: &mut HashMap<*const RefCell<HydroNode>, (Ident, usize)>, next_stmt_id: &mut usize, -)

Trait Implementations§

source§

impl Debug for HfPlusLeaf

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +)

Trait Implementations§

source§

impl Debug for HydroLeaf

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -48,7 +48,7 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a diff --git a/doc/hydro_lang/ir/enum.HydroNode.html b/doc/hydro_lang/ir/enum.HydroNode.html new file mode 100644 index 000000000000..06c5e8c5b7c0 --- /dev/null +++ b/doc/hydro_lang/ir/enum.HydroNode.html @@ -0,0 +1,123 @@ +HydroNode in hydro_lang::ir - Rust

Enum hydro_lang::ir::HydroNode

source ·
pub enum HydroNode {
+
Show 27 variants Placeholder, + Source { + source: HydroSource, + location_kind: LocationId, + }, + CycleSource { + ident: Ident, + location_kind: LocationId, + }, + Tee { + inner: TeeNode, + }, + Persist(Box<HydroNode>), + Unpersist(Box<HydroNode>), + Delta(Box<HydroNode>), + Chain(Box<HydroNode>, Box<HydroNode>), + CrossProduct(Box<HydroNode>, Box<HydroNode>), + CrossSingleton(Box<HydroNode>, Box<HydroNode>), + Join(Box<HydroNode>, Box<HydroNode>), + Difference(Box<HydroNode>, Box<HydroNode>), + AntiJoin(Box<HydroNode>, Box<HydroNode>), + Map { + f: DebugExpr, + input: Box<HydroNode>, + }, + FlatMap { + f: DebugExpr, + input: Box<HydroNode>, + }, + Filter { + f: DebugExpr, + input: Box<HydroNode>, + }, + FilterMap { + f: DebugExpr, + input: Box<HydroNode>, + }, + DeferTick(Box<HydroNode>), + Enumerate { + is_static: bool, + input: Box<HydroNode>, + }, + Inspect { + f: DebugExpr, + input: Box<HydroNode>, + }, + Unique(Box<HydroNode>), + Sort(Box<HydroNode>), + Fold { + init: DebugExpr, + acc: DebugExpr, + input: Box<HydroNode>, + }, + FoldKeyed { + init: DebugExpr, + acc: DebugExpr, + input: Box<HydroNode>, + }, + Reduce { + f: DebugExpr, + input: Box<HydroNode>, + }, + ReduceKeyed { + f: DebugExpr, + input: Box<HydroNode>, + }, + Network { + from_location: LocationId, + from_key: Option<usize>, + to_location: LocationId, + to_key: Option<usize>, + serialize_fn: Option<DebugExpr>, + instantiate_fn: DebugInstantiate, + deserialize_fn: Option<DebugExpr>, + input: Box<HydroNode>, + }, +
}
Expand description

An intermediate node in a Hydro graph, which consumes data +from upstream nodes and emits data to downstream nodes.

+

Variants§

§

Placeholder

§

Source

Fields

§location_kind: LocationId
§

CycleSource

Fields

§ident: Ident
§location_kind: LocationId
§

Tee

Fields

§inner: TeeNode
§

Persist(Box<HydroNode>)

§

Unpersist(Box<HydroNode>)

§

Delta(Box<HydroNode>)

§

Chain(Box<HydroNode>, Box<HydroNode>)

§

CrossProduct(Box<HydroNode>, Box<HydroNode>)

§

CrossSingleton(Box<HydroNode>, Box<HydroNode>)

§

Join(Box<HydroNode>, Box<HydroNode>)

§

Difference(Box<HydroNode>, Box<HydroNode>)

§

AntiJoin(Box<HydroNode>, Box<HydroNode>)

§

Map

Fields

§

FlatMap

Fields

§

Filter

Fields

§

FilterMap

Fields

§

DeferTick(Box<HydroNode>)

§

Enumerate

Fields

§is_static: bool
§

Inspect

Fields

§

Unique(Box<HydroNode>)

§

Sort(Box<HydroNode>)

§

Fold

Fields

§

FoldKeyed

Fields

§

Reduce

Fields

§

ReduceKeyed

Fields

§

Network

Fields

§from_location: LocationId
§from_key: Option<usize>
§to_location: LocationId
§to_key: Option<usize>
§serialize_fn: Option<DebugExpr>
§instantiate_fn: DebugInstantiate
§deserialize_fn: Option<DebugExpr>

Implementations§

source§

impl<'a> HydroNode

source

pub fn compile_network<D: Deploy<'a>>( + &mut self, + compile_env: &D::CompileEnv, + seen_tees: &mut SeenTees, + nodes: &HashMap<usize, D::Process>, + clusters: &HashMap<usize, D::Cluster>, + externals: &HashMap<usize, D::ExternalProcess>, +)

source

pub fn connect_network(&mut self, seen_tees: &mut SeenTees)

source

pub fn transform_bottom_up<C>( + &mut self, + transform: impl FnMut(&mut HydroNode, &mut C) + Copy, + seen_tees: &mut SeenTees, + ctx: &mut C, +)

source

pub fn transform_children( + &mut self, + transform: impl FnMut(&mut HydroNode, &mut SeenTees), + seen_tees: &mut SeenTees, +)

source

pub fn emit( + &self, + graph_builders: &mut BTreeMap<usize, FlatGraphBuilder>, + built_tees: &mut HashMap<*const RefCell<HydroNode>, (Ident, usize)>, + next_stmt_id: &mut usize, +) -> (Ident, usize)

Trait Implementations§

source§

impl Debug for HydroNode

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/doc/hydroflow_plus/ir/enum.HfPlusSource.html b/doc/hydro_lang/ir/enum.HydroSource.html similarity index 66% rename from doc/hydroflow_plus/ir/enum.HfPlusSource.html rename to doc/hydro_lang/ir/enum.HydroSource.html index a715b088f386..502904034345 100644 --- a/doc/hydroflow_plus/ir/enum.HfPlusSource.html +++ b/doc/hydro_lang/ir/enum.HydroSource.html @@ -1,10 +1,10 @@ -HfPlusSource in hydroflow_plus::ir - Rust

Enum hydroflow_plus::ir::HfPlusSource

source ·
pub enum HfPlusSource {
-    Stream(DebugExpr),
+HydroSource in hydro_lang::ir - Rust

Enum hydro_lang::ir::HydroSource

source ·
pub enum HydroSource {
+    Stream(DebugExpr),
     ExternalNetwork(),
-    Iter(DebugExpr),
+    Iter(DebugExpr),
     Spin(),
-}
Expand description

A source in a Hydroflow+ graph, where data enters the graph.

-

Variants§

§

Stream(DebugExpr)

§

ExternalNetwork()

§

Iter(DebugExpr)

§

Spin()

Trait Implementations§

source§

impl Debug for HfPlusSource

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +}

Expand description

A source in a Hydro graph, where data enters the graph.

+

Variants§

§

Stream(DebugExpr)

§

ExternalNetwork()

§

Iter(DebugExpr)

§

Spin()

Trait Implementations§

source§

impl Debug for HydroSource

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -21,7 +21,7 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a diff --git a/doc/hydro_lang/ir/fn.dbg_dedup_tee.html b/doc/hydro_lang/ir/fn.dbg_dedup_tee.html new file mode 100644 index 000000000000..bb2313b26e26 --- /dev/null +++ b/doc/hydro_lang/ir/fn.dbg_dedup_tee.html @@ -0,0 +1 @@ +dbg_dedup_tee in hydro_lang::ir - Rust

Function hydro_lang::ir::dbg_dedup_tee

source ·
pub fn dbg_dedup_tee<T>(f: impl FnOnce() -> T) -> T
\ No newline at end of file diff --git a/doc/hydro_lang/ir/index.html b/doc/hydro_lang/ir/index.html new file mode 100644 index 000000000000..20846227e75c --- /dev/null +++ b/doc/hydro_lang/ir/index.html @@ -0,0 +1,4 @@ +hydro_lang::ir - Rust

Module hydro_lang::ir

source ·

Structs§

Enums§

  • An leaf in a Hydro graph, which is an pipeline that doesn’t emit +any downstream values. Traversals over the dataflow graph and +generating Hydroflow IR start from leaves.
  • An intermediate node in a Hydro graph, which consumes data +from upstream nodes and emits data to downstream nodes.
  • A source in a Hydro graph, where data enters the graph.

Functions§

Type Aliases§

\ No newline at end of file diff --git a/doc/hydro_lang/ir/sidebar-items.js b/doc/hydro_lang/ir/sidebar-items.js new file mode 100644 index 000000000000..ea34ad1eedad --- /dev/null +++ b/doc/hydro_lang/ir/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["DebugInstantiate","HydroLeaf","HydroNode","HydroSource"],"fn":["dbg_dedup_tee"],"struct":["DebugExpr","TeeNode"],"type":["SeenTees"]}; \ No newline at end of file diff --git a/doc/hydroflow_plus/ir/struct.DebugExpr.html b/doc/hydro_lang/ir/struct.DebugExpr.html similarity index 60% rename from doc/hydroflow_plus/ir/struct.DebugExpr.html rename to doc/hydro_lang/ir/struct.DebugExpr.html index 06c868f0fef2..591e3b515eb0 100644 --- a/doc/hydroflow_plus/ir/struct.DebugExpr.html +++ b/doc/hydro_lang/ir/struct.DebugExpr.html @@ -1,5 +1,5 @@ -DebugExpr in hydroflow_plus::ir - Rust

Struct hydroflow_plus::ir::DebugExpr

source ·
pub struct DebugExpr(pub Expr);

Tuple Fields§

§0: Expr

Methods from Deref<Target = Expr>§

source

pub const PLACEHOLDER: Expr = _

Trait Implementations§

source§

impl Clone for DebugExpr

source§

fn clone(&self) -> DebugExpr

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DebugExpr

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Deref for DebugExpr

source§

type Target = Expr

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.
source§

impl From<Expr> for DebugExpr

source§

fn from(expr: Expr) -> DebugExpr

Converts to this type from the input type.
source§

impl ToTokens for DebugExpr

source§

fn to_tokens(&self, tokens: &mut TokenStream)

Write self to the given TokenStream. Read more
source§

fn to_token_stream(&self) -> TokenStream

Convert self directly into a TokenStream object. Read more
source§

fn into_token_stream(self) -> TokenStream
where - Self: Sized,

Convert self directly into a TokenStream object. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +DebugExpr in hydro_lang::ir - Rust

Struct hydro_lang::ir::DebugExpr

source ·
pub struct DebugExpr(pub Expr);

Tuple Fields§

§0: Expr

Methods from Deref<Target = Expr>§

source

pub const PLACEHOLDER: Expr = _

Trait Implementations§

source§

impl Clone for DebugExpr

source§

fn clone(&self) -> DebugExpr

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for DebugExpr

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Deref for DebugExpr

source§

type Target = Expr

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.
source§

impl From<Expr> for DebugExpr

source§

fn from(expr: Expr) -> DebugExpr

Converts to this type from the input type.
source§

impl ToTokens for DebugExpr

source§

fn to_tokens(&self, tokens: &mut TokenStream)

Write self to the given TokenStream. Read more
source§

fn to_token_stream(&self) -> TokenStream

Convert self directly into a TokenStream object. Read more
source§

fn into_token_stream(self) -> TokenStream
where + Self: Sized,

Convert self directly into a TokenStream object. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where @@ -17,7 +17,7 @@ F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> Spanned for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> Spanned for T
where T: Spanned + ?Sized,

source§

fn span(&self) -> Span

Returns a Span covering the complete contents of this syntax tree node, or Span::call_site() if this node is empty.
source§

impl<T> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where diff --git a/doc/hydroflow_plus/ir/struct.TeeNode.html b/doc/hydro_lang/ir/struct.TeeNode.html similarity index 65% rename from doc/hydroflow_plus/ir/struct.TeeNode.html rename to doc/hydro_lang/ir/struct.TeeNode.html index af2060a41b1e..139c7e1defe0 100644 --- a/doc/hydroflow_plus/ir/struct.TeeNode.html +++ b/doc/hydro_lang/ir/struct.TeeNode.html @@ -1,4 +1,4 @@ -TeeNode in hydroflow_plus::ir - Rust

Struct hydroflow_plus::ir::TeeNode

source ·
pub struct TeeNode(pub Rc<RefCell<HfPlusNode>>);

Tuple Fields§

§0: Rc<RefCell<HfPlusNode>>

Trait Implementations§

source§

impl Debug for TeeNode

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for TeeNode

§

impl !RefUnwindSafe for TeeNode

§

impl !Send for TeeNode

§

impl !Sync for TeeNode

§

impl Unpin for TeeNode

§

impl !UnwindSafe for TeeNode

Blanket Implementations§

source§

impl<T> Any for T
where +TeeNode in hydro_lang::ir - Rust

Struct hydro_lang::ir::TeeNode

source ·
pub struct TeeNode(pub Rc<RefCell<HydroNode>>);

Tuple Fields§

§0: Rc<RefCell<HydroNode>>

Trait Implementations§

source§

impl Debug for TeeNode

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for TeeNode

§

impl !RefUnwindSafe for TeeNode

§

impl !Send for TeeNode

§

impl !Sync for TeeNode

§

impl Unpin for TeeNode

§

impl !UnwindSafe for TeeNode

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -15,7 +15,7 @@ F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a diff --git a/doc/hydro_lang/ir/type.SeenTees.html b/doc/hydro_lang/ir/type.SeenTees.html new file mode 100644 index 000000000000..8413465c90d7 --- /dev/null +++ b/doc/hydro_lang/ir/type.SeenTees.html @@ -0,0 +1 @@ +SeenTees in hydro_lang::ir - Rust

Type Alias hydro_lang::ir::SeenTees

source ·
pub type SeenTees = HashMap<*const RefCell<HydroNode>, Rc<RefCell<HydroNode>>>;

Aliased Type§

struct SeenTees { /* private fields */ }
\ No newline at end of file diff --git a/doc/hydro_lang/location/can_send/index.html b/doc/hydro_lang/location/can_send/index.html new file mode 100644 index 000000000000..082c5aac5176 --- /dev/null +++ b/doc/hydro_lang/location/can_send/index.html @@ -0,0 +1 @@ +hydro_lang::location::can_send - Rust

Module hydro_lang::location::can_send

source ·

Traits§

\ No newline at end of file diff --git a/doc/hydroflow_plus/location/can_send/sidebar-items.js b/doc/hydro_lang/location/can_send/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus/location/can_send/sidebar-items.js rename to doc/hydro_lang/location/can_send/sidebar-items.js diff --git a/doc/hydro_lang/location/can_send/trait.CanSend.html b/doc/hydro_lang/location/can_send/trait.CanSend.html new file mode 100644 index 000000000000..2790733aca7a --- /dev/null +++ b/doc/hydro_lang/location/can_send/trait.CanSend.html @@ -0,0 +1,11 @@ +CanSend in hydro_lang::location::can_send - Rust

Trait hydro_lang::location::can_send::CanSend

source ·
pub trait CanSend<'a, To: Location<'a>>: Location<'a> {
+    type In<T>;
+    type Out<T>;
+    type OutStrongestOrder<InOrder>;
+
+    // Required methods
+    fn is_demux() -> bool;
+    fn tagged_type() -> Option<Type>;
+}

Required Associated Types§

source

type In<T>

source

type Out<T>

source

type OutStrongestOrder<InOrder>

Given the ordering guarantees of the input, determines the strongest possible +ordering guarantees of the output.

+

Required Methods§

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<'a, C1, C2> CanSend<'a, Cluster<'a, C2>> for Cluster<'a, C1>

source§

type In<T> = (ClusterId<C2>, T)

source§

type Out<T> = (ClusterId<C1>, T)

source§

type OutStrongestOrder<InOrder> = NoOrder

source§

impl<'a, C1, P2> CanSend<'a, Process<'a, P2>> for Cluster<'a, C1>

source§

type In<T> = T

source§

type Out<T> = (ClusterId<C1>, T)

source§

type OutStrongestOrder<InOrder> = NoOrder

source§

impl<'a, P1, C2> CanSend<'a, Cluster<'a, C2>> for Process<'a, P1>

source§

type In<T> = (ClusterId<C2>, T)

source§

type Out<T> = T

source§

type OutStrongestOrder<InOrder> = InOrder

source§

impl<'a, P1, E2> CanSend<'a, ExternalProcess<'a, E2>> for Process<'a, P1>

source§

type In<T> = T

source§

type Out<T> = T

source§

type OutStrongestOrder<InOrder> = InOrder

source§

impl<'a, P1, P2> CanSend<'a, Process<'a, P2>> for Process<'a, P1>

source§

type In<T> = T

source§

type Out<T> = T

source§

type OutStrongestOrder<InOrder> = InOrder

\ No newline at end of file diff --git a/doc/hydro_lang/location/cluster/cluster_id/index.html b/doc/hydro_lang/location/cluster/cluster_id/index.html new file mode 100644 index 000000000000..157f4a7319c0 --- /dev/null +++ b/doc/hydro_lang/location/cluster/cluster_id/index.html @@ -0,0 +1 @@ +hydro_lang::location::cluster::cluster_id - Rust

Module hydro_lang::location::cluster::cluster_id

source ·

Structs§

\ No newline at end of file diff --git a/doc/hydroflow_plus/location/cluster/cluster_id/sidebar-items.js b/doc/hydro_lang/location/cluster/cluster_id/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus/location/cluster/cluster_id/sidebar-items.js rename to doc/hydro_lang/location/cluster/cluster_id/sidebar-items.js diff --git a/doc/hydroflow_plus/location/cluster/cluster_id/struct.ClusterId.html b/doc/hydro_lang/location/cluster/cluster_id/struct.ClusterId.html similarity index 63% rename from doc/hydroflow_plus/location/cluster/cluster_id/struct.ClusterId.html rename to doc/hydro_lang/location/cluster/cluster_id/struct.ClusterId.html index 25a47451944d..9d90ac7cbfa4 100644 --- a/doc/hydroflow_plus/location/cluster/cluster_id/struct.ClusterId.html +++ b/doc/hydro_lang/location/cluster/cluster_id/struct.ClusterId.html @@ -1,12 +1,12 @@ -ClusterId in hydroflow_plus::location::cluster::cluster_id - Rust

Struct hydroflow_plus::location::cluster::cluster_id::ClusterId

source ·
#[repr(transparent)]
pub struct ClusterId<C> { +ClusterId in hydro_lang::location::cluster::cluster_id - Rust

Struct hydro_lang::location::cluster::cluster_id::ClusterId

source ·
#[repr(transparent)]
pub struct ClusterId<C> { pub raw_id: u32, /* private fields */ -}

Fields§

§raw_id: u32

Implementations§

source§

impl<C> ClusterId<C>

source

pub fn from_raw(id: u32) -> Self

Trait Implementations§

source§

impl<C> Clone for ClusterId<C>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<C> Debug for ClusterId<C>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de, C> Deserialize<'de> for ClusterId<C>

source§

fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where - D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<C> Display for ClusterId<C>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<C> Hash for ClusterId<C>

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where +}

Fields§

§raw_id: u32

Implementations§

source§

impl<C> ClusterId<C>

source

pub fn from_raw(id: u32) -> Self

Trait Implementations§

source§

impl<C> Clone for ClusterId<C>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<C> Debug for ClusterId<C>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de, C> Deserialize<'de> for ClusterId<C>

source§

fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where + D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<C> Display for ClusterId<C>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<C> Hash for ClusterId<C>

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl<C> PartialEq for ClusterId<C>

source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
source§

impl<'a, L: Location<'a>> QuotedWithContext<'a, ClusterId<<<L as Location<'a>>::Root as IsCluster>::Tag>, L> for ClusterSelfId<'a>
where - <L as Location<'a>>::Root: IsCluster,

source§

fn splice_untyped_ctx(self, ctx: &Ctx) -> Expr
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl<C> PartialEq for ClusterId<C>

source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
source§

impl<'a, L: Location<'a>> QuotedWithContext<'a, ClusterId<<<L as Location<'a>>::Root as IsCluster>::Tag>, L> for ClusterSelfId<'a>
where + <L as Location<'a>>::Root: IsCluster,

source§

fn splice_untyped_ctx(self, ctx: &Ctx) -> Expr
where Self: Sized,

source§

fn splice_typed_ctx(self, ctx: &Ctx) -> Expr
where Self: Sized,

source§

fn splice_fn1_ctx<I, O>(self, ctx: &Ctx) -> Expr
where Self: Sized, @@ -14,12 +14,12 @@ Self: Sized, T: Fn(&I) -> O,

source§

fn splice_fn2_borrow_mut_ctx<I1, I2, O>(self, ctx: &Ctx) -> Expr
where Self: Sized, - T: Fn(&mut I1, I2) -> O,

source§

impl<C> Serialize for ClusterId<C>

source§

fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where - S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl<C> Copy for ClusterId<C>

source§

impl<C> Eq for ClusterId<C>

Auto Trait Implementations§

§

impl<C> Freeze for ClusterId<C>

§

impl<C> RefUnwindSafe for ClusterId<C>
where - C: RefUnwindSafe,

§

impl<C> Send for ClusterId<C>
where - C: Send,

§

impl<C> Sync for ClusterId<C>
where - C: Sync,

§

impl<C> Unpin for ClusterId<C>
where - C: Unpin,

§

impl<C> UnwindSafe for ClusterId<C>
where + T: Fn(&mut I1, I2) -> O,

source§

impl<C> Serialize for ClusterId<C>

source§

fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where + S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl<C> Copy for ClusterId<C>

source§

impl<C> Eq for ClusterId<C>

Auto Trait Implementations§

§

impl<C> Freeze for ClusterId<C>

§

impl<C> RefUnwindSafe for ClusterId<C>
where + C: RefUnwindSafe,

§

impl<C> Send for ClusterId<C>
where + C: Send,

§

impl<C> Sync for ClusterId<C>
where + C: Sync,

§

impl<C> Unpin for ClusterId<C>
where + C: Unpin,

§

impl<C> UnwindSafe for ClusterId<C>
where C: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where @@ -44,7 +44,7 @@ F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for T
where T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where diff --git a/doc/hydro_lang/location/cluster/index.html b/doc/hydro_lang/location/cluster/index.html new file mode 100644 index 000000000000..16ac62182f9d --- /dev/null +++ b/doc/hydro_lang/location/cluster/index.html @@ -0,0 +1,2 @@ +hydro_lang::location::cluster - Rust

Module hydro_lang::location::cluster

source ·

Re-exports§

Modules§

Structs§

Statics§

  • A free variable representing the cluster’s own ID. When spliced in +a quoted snippet that will run on a cluster, this turns into a ClusterId.

Traits§

\ No newline at end of file diff --git a/doc/hydroflow_plus/location/cluster/sidebar-items.js b/doc/hydro_lang/location/cluster/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus/location/cluster/sidebar-items.js rename to doc/hydro_lang/location/cluster/sidebar-items.js diff --git a/doc/hydro_lang/location/cluster/static.CLUSTER_SELF_ID.html b/doc/hydro_lang/location/cluster/static.CLUSTER_SELF_ID.html new file mode 100644 index 000000000000..9941bd9088c6 --- /dev/null +++ b/doc/hydro_lang/location/cluster/static.CLUSTER_SELF_ID.html @@ -0,0 +1,3 @@ +CLUSTER_SELF_ID in hydro_lang::location::cluster - Rust

Static hydro_lang::location::cluster::CLUSTER_SELF_ID

source ·
pub static CLUSTER_SELF_ID: ClusterSelfId<'_>
Expand description

A free variable representing the cluster’s own ID. When spliced in +a quoted snippet that will run on a cluster, this turns into a ClusterId.

+
\ No newline at end of file diff --git a/doc/hydroflow_plus/location/cluster/struct.Cluster.html b/doc/hydro_lang/location/cluster/struct.Cluster.html similarity index 50% rename from doc/hydroflow_plus/location/cluster/struct.Cluster.html rename to doc/hydro_lang/location/cluster/struct.Cluster.html index 2280209568e4..186d8a7fe54e 100644 --- a/doc/hydroflow_plus/location/cluster/struct.Cluster.html +++ b/doc/hydro_lang/location/cluster/struct.Cluster.html @@ -1,37 +1,37 @@ -Cluster in hydroflow_plus::location::cluster - Rust

Struct hydroflow_plus::location::cluster::Cluster

source ·
pub struct Cluster<'a, C> { /* private fields */ }

Implementations§

source§

impl<'a, C> Cluster<'a, C>

source

pub fn members(&self) -> ClusterIds<'a, C>

Trait Implementations§

source§

impl<'a, C1, C2> CanSend<'a, Cluster<'a, C2>> for Cluster<'a, C1>

source§

type In<T> = (ClusterId<C2>, T)

source§

type Out<T> = (ClusterId<C1>, T)

source§

type OutStrongestOrder<InOrder> = NoOrder

Given the ordering guarantees of the input, determines the strongest possible -ordering guarantees of the output.
source§

fn is_demux() -> bool

source§

fn tagged_type() -> Option<Type>

source§

impl<'a, P1, C2> CanSend<'a, Cluster<'a, C2>> for Process<'a, P1>

source§

type In<T> = (ClusterId<C2>, T)

source§

type Out<T> = T

source§

type OutStrongestOrder<InOrder> = InOrder

Given the ordering guarantees of the input, determines the strongest possible -ordering guarantees of the output.
source§

fn is_demux() -> bool

source§

fn tagged_type() -> Option<Type>

source§

impl<'a, C1, P2> CanSend<'a, Process<'a, P2>> for Cluster<'a, C1>

source§

type In<T> = T

source§

type Out<T> = (ClusterId<C1>, T)

source§

type OutStrongestOrder<InOrder> = NoOrder

Given the ordering guarantees of the input, determines the strongest possible -ordering guarantees of the output.
source§

fn is_demux() -> bool

source§

fn tagged_type() -> Option<Type>

source§

impl<C> Clone for Cluster<'_, C>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<C> IsCluster for Cluster<'_, C>

source§

type Tag = C

source§

impl<'a, C> Location<'a> for Cluster<'a, C>

source§

type Root = Cluster<'a, C>

source§

fn root(&self) -> Self::Root

source§

fn id(&self) -> LocationId

source§

fn flow_state(&self) -> &FlowState

source§

fn is_top_level() -> bool

source§

fn tick(&self) -> Tick<Self>
where - Self: NoTick,

source§

fn spin(&self) -> Stream<(), Self, Unbounded>
where - Self: Sized + NoTick,

source§

fn source_stream<T, E: FuturesStream<Item = T> + Unpin>( +Cluster in hydro_lang::location::cluster - Rust

Struct hydro_lang::location::cluster::Cluster

source ·
pub struct Cluster<'a, C> { /* private fields */ }

Implementations§

source§

impl<'a, C> Cluster<'a, C>

source

pub fn members(&self) -> ClusterIds<'a, C>

Trait Implementations§

source§

impl<'a, C1, C2> CanSend<'a, Cluster<'a, C2>> for Cluster<'a, C1>

source§

type In<T> = (ClusterId<C2>, T)

source§

type Out<T> = (ClusterId<C1>, T)

source§

type OutStrongestOrder<InOrder> = NoOrder

Given the ordering guarantees of the input, determines the strongest possible +ordering guarantees of the output.
source§

fn is_demux() -> bool

source§

fn tagged_type() -> Option<Type>

source§

impl<'a, P1, C2> CanSend<'a, Cluster<'a, C2>> for Process<'a, P1>

source§

type In<T> = (ClusterId<C2>, T)

source§

type Out<T> = T

source§

type OutStrongestOrder<InOrder> = InOrder

Given the ordering guarantees of the input, determines the strongest possible +ordering guarantees of the output.
source§

fn is_demux() -> bool

source§

fn tagged_type() -> Option<Type>

source§

impl<'a, C1, P2> CanSend<'a, Process<'a, P2>> for Cluster<'a, C1>

source§

type In<T> = T

source§

type Out<T> = (ClusterId<C1>, T)

source§

type OutStrongestOrder<InOrder> = NoOrder

Given the ordering guarantees of the input, determines the strongest possible +ordering guarantees of the output.
source§

fn is_demux() -> bool

source§

fn tagged_type() -> Option<Type>

source§

impl<C> Clone for Cluster<'_, C>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<C> IsCluster for Cluster<'_, C>

source§

type Tag = C

source§

impl<'a, C> Location<'a> for Cluster<'a, C>

source§

type Root = Cluster<'a, C>

source§

fn root(&self) -> Self::Root

source§

fn id(&self) -> LocationId

source§

fn flow_state(&self) -> &FlowState

source§

fn is_top_level() -> bool

source§

fn tick(&self) -> Tick<Self>
where + Self: NoTick,

source§

fn spin(&self) -> Stream<(), Self, Unbounded>
where + Self: Sized + NoTick,

source§

fn source_stream<T, E: FuturesStream<Item = T> + Unpin>( &self, e: impl QuotedWithContext<'a, E, Self>, -) -> Stream<T, Self, Unbounded>
where - Self: Sized + NoTick,

source§

fn source_iter<T, E: IntoIterator<Item = T>>( +) -> Stream<T, Self, Unbounded>
where + Self: Sized + NoTick,

source§

fn source_iter<T, E: IntoIterator<Item = T>>( &self, e: impl QuotedWithContext<'a, E, Self>, -) -> Stream<T, Self, Unbounded>
where - Self: Sized + NoTick,

source§

fn singleton<T: Clone>( +) -> Stream<T, Self, Unbounded>
where + Self: Sized + NoTick,

source§

fn singleton<T: Clone>( &self, e: impl QuotedWithContext<'a, T, Self>, -) -> Singleton<T, Self, Unbounded>
where - Self: Sized + NoTick,

source§

unsafe fn source_interval( +) -> Singleton<T, Self, Unbounded>
where + Self: Sized + NoTick,

source§

unsafe fn source_interval( &self, interval: impl QuotedWithContext<'a, Duration, Self> + Copy + 'a, -) -> Stream<Instant, Self, Unbounded>
where - Self: Sized + NoTick,

Generates a stream with values emitted at a fixed interval, with -each value being the current time (as an [tokio::time::Instant]). Read more
source§

unsafe fn source_interval_delayed( +) -> Stream<Instant, Self, Unbounded>
where + Self: Sized + NoTick,

Generates a stream with values emitted at a fixed interval, with +each value being the current time (as an [tokio::time::Instant]). Read more
source§

unsafe fn source_interval_delayed( &self, delay: impl QuotedWithContext<'a, Duration, Self> + Copy + 'a, interval: impl QuotedWithContext<'a, Duration, Self> + Copy + 'a, -) -> Stream<Instant, Self, Unbounded>
where - Self: Sized + NoTick,

Generates a stream with values emitted at a fixed interval (with an +) -> Stream<Instant, Self, Unbounded>
where + Self: Sized + NoTick,

Generates a stream with values emitted at a fixed interval (with an initial delay), with each value being the current time -(as an [tokio::time::Instant]). Read more
source§

fn forward_ref<S: CycleCollection<'a, ForwardRefMarker, Location = Self>>( +(as an [tokio::time::Instant]). Read more
source§

fn forward_ref<S: CycleCollection<'a, ForwardRefMarker, Location = Self>>( &self, -) -> (ForwardRef<'a, S>, S)
where - Self: NoTick,

source§

impl<T> NoTick for Cluster<'_, T>

source§

impl<T> NoTimestamp for Cluster<'_, T>

Auto Trait Implementations§

§

impl<'a, C> Freeze for Cluster<'a, C>

§

impl<'a, C> !RefUnwindSafe for Cluster<'a, C>

§

impl<'a, C> !Send for Cluster<'a, C>

§

impl<'a, C> !Sync for Cluster<'a, C>

§

impl<'a, C> Unpin for Cluster<'a, C>
where - C: Unpin,

§

impl<'a, C> !UnwindSafe for Cluster<'a, C>

Blanket Implementations§

source§

impl<T> Any for T
where +) -> (ForwardRef<'a, S>, S)
where + Self: NoTick,

source§

impl<T> NoTick for Cluster<'_, T>

source§

impl<T> NoTimestamp for Cluster<'_, T>

Auto Trait Implementations§

§

impl<'a, C> Freeze for Cluster<'a, C>

§

impl<'a, C> !RefUnwindSafe for Cluster<'a, C>

§

impl<'a, C> !Send for Cluster<'a, C>

§

impl<'a, C> !Sync for Cluster<'a, C>

§

impl<'a, C> Unpin for Cluster<'a, C>
where + C: Unpin,

§

impl<'a, C> !UnwindSafe for Cluster<'a, C>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where @@ -49,7 +49,7 @@ F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where diff --git a/doc/hydroflow_plus/location/cluster/struct.ClusterIds.html b/doc/hydro_lang/location/cluster/struct.ClusterIds.html similarity index 73% rename from doc/hydroflow_plus/location/cluster/struct.ClusterIds.html rename to doc/hydro_lang/location/cluster/struct.ClusterIds.html index eb5d1c4c7445..d6dad49c741d 100644 --- a/doc/hydroflow_plus/location/cluster/struct.ClusterIds.html +++ b/doc/hydro_lang/location/cluster/struct.ClusterIds.html @@ -1,5 +1,5 @@ -ClusterIds in hydroflow_plus::location::cluster - Rust

Struct hydroflow_plus::location::cluster::ClusterIds

source ·
pub struct ClusterIds<'a, C> { /* private fields */ }

Trait Implementations§

source§

impl<C> Clone for ClusterIds<'_, C>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a, C: 'a, Ctx> FreeVariableWithContext<Ctx> for ClusterIds<'a, C>

source§

type O = &'a Vec<ClusterId<C>>

source§

fn to_tokens(self, _ctx: &Ctx) -> (Option<TokenStream>, Option<TokenStream>)
where - Self: Sized,

source§

fn uninitialized(&self, _ctx: &Ctx) -> Self::O

source§

impl<'a, C, Ctx> QuotedWithContext<'a, &'a Vec<ClusterId<C>>, Ctx> for ClusterIds<'a, C>

source§

fn splice_untyped_ctx(self, ctx: &Ctx) -> Expr
where +ClusterIds in hydro_lang::location::cluster - Rust

Struct hydro_lang::location::cluster::ClusterIds

source ·
pub struct ClusterIds<'a, C> { /* private fields */ }

Trait Implementations§

source§

impl<C> Clone for ClusterIds<'_, C>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a, C: 'a, Ctx> FreeVariableWithContext<Ctx> for ClusterIds<'a, C>

source§

type O = &'a Vec<ClusterId<C>>

source§

fn to_tokens(self, _ctx: &Ctx) -> (Option<TokenStream>, Option<TokenStream>)
where + Self: Sized,

source§

fn uninitialized(&self, _ctx: &Ctx) -> Self::O

source§

impl<'a, C, Ctx> QuotedWithContext<'a, &'a Vec<ClusterId<C>>, Ctx> for ClusterIds<'a, C>

source§

fn splice_untyped_ctx(self, ctx: &Ctx) -> Expr
where Self: Sized,

source§

fn splice_typed_ctx(self, ctx: &Ctx) -> Expr
where Self: Sized,

source§

fn splice_fn1_ctx<I, O>(self, ctx: &Ctx) -> Expr
where Self: Sized, @@ -7,11 +7,11 @@ Self: Sized, T: Fn(&I) -> O,

source§

fn splice_fn2_borrow_mut_ctx<I1, I2, O>(self, ctx: &Ctx) -> Expr
where Self: Sized, - T: Fn(&mut I1, I2) -> O,

source§

impl<C> Copy for ClusterIds<'_, C>

Auto Trait Implementations§

§

impl<'a, C> Freeze for ClusterIds<'a, C>

§

impl<'a, C> RefUnwindSafe for ClusterIds<'a, C>
where - C: RefUnwindSafe,

§

impl<'a, C> Send for ClusterIds<'a, C>
where - C: Send,

§

impl<'a, C> Sync for ClusterIds<'a, C>
where - C: Sync,

§

impl<'a, C> Unpin for ClusterIds<'a, C>
where - C: Unpin,

§

impl<'a, C> UnwindSafe for ClusterIds<'a, C>
where + T: Fn(&mut I1, I2) -> O,

source§

impl<C> Copy for ClusterIds<'_, C>

Auto Trait Implementations§

§

impl<'a, C> Freeze for ClusterIds<'a, C>

§

impl<'a, C> RefUnwindSafe for ClusterIds<'a, C>
where + C: RefUnwindSafe,

§

impl<'a, C> Send for ClusterIds<'a, C>
where + C: Send,

§

impl<'a, C> Sync for ClusterIds<'a, C>
where + C: Sync,

§

impl<'a, C> Unpin for ClusterIds<'a, C>
where + C: Unpin,

§

impl<'a, C> UnwindSafe for ClusterIds<'a, C>
where C: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where @@ -32,7 +32,7 @@ F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where diff --git a/doc/hydroflow_plus/location/cluster/struct.ClusterSelfId.html b/doc/hydro_lang/location/cluster/struct.ClusterSelfId.html similarity index 63% rename from doc/hydroflow_plus/location/cluster/struct.ClusterSelfId.html rename to doc/hydro_lang/location/cluster/struct.ClusterSelfId.html index 0b234d1533c0..030268e0f239 100644 --- a/doc/hydroflow_plus/location/cluster/struct.ClusterSelfId.html +++ b/doc/hydro_lang/location/cluster/struct.ClusterSelfId.html @@ -1,7 +1,7 @@ -ClusterSelfId in hydroflow_plus::location::cluster - Rust

Struct hydroflow_plus::location::cluster::ClusterSelfId

source ·
pub struct ClusterSelfId<'a> { /* private fields */ }

Trait Implementations§

source§

impl<'a> Clone for ClusterSelfId<'a>

source§

fn clone(&self) -> ClusterSelfId<'a>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a, L: Location<'a>> FreeVariableWithContext<L> for ClusterSelfId<'a>
where - <L as Location<'a>>::Root: IsCluster,

source§

type O = ClusterId<<<L as Location<'a>>::Root as IsCluster>::Tag>

source§

fn to_tokens(self, ctx: &L) -> (Option<TokenStream>, Option<TokenStream>)
where - Self: Sized,

source§

fn uninitialized(&self, _ctx: &Ctx) -> Self::O

source§

impl<'a, L: Location<'a>> QuotedWithContext<'a, ClusterId<<<L as Location<'a>>::Root as IsCluster>::Tag>, L> for ClusterSelfId<'a>
where - <L as Location<'a>>::Root: IsCluster,

source§

fn splice_untyped_ctx(self, ctx: &Ctx) -> Expr
where +ClusterSelfId in hydro_lang::location::cluster - Rust

Struct hydro_lang::location::cluster::ClusterSelfId

source ·
pub struct ClusterSelfId<'a> { /* private fields */ }

Trait Implementations§

source§

impl<'a> Clone for ClusterSelfId<'a>

source§

fn clone(&self) -> ClusterSelfId<'a>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a, L: Location<'a>> FreeVariableWithContext<L> for ClusterSelfId<'a>
where + <L as Location<'a>>::Root: IsCluster,

source§

type O = ClusterId<<<L as Location<'a>>::Root as IsCluster>::Tag>

source§

fn to_tokens(self, ctx: &L) -> (Option<TokenStream>, Option<TokenStream>)
where + Self: Sized,

source§

fn uninitialized(&self, _ctx: &Ctx) -> Self::O

source§

impl<'a, L: Location<'a>> QuotedWithContext<'a, ClusterId<<<L as Location<'a>>::Root as IsCluster>::Tag>, L> for ClusterSelfId<'a>
where + <L as Location<'a>>::Root: IsCluster,

source§

fn splice_untyped_ctx(self, ctx: &Ctx) -> Expr
where Self: Sized,

source§

fn splice_typed_ctx(self, ctx: &Ctx) -> Expr
where Self: Sized,

source§

fn splice_fn1_ctx<I, O>(self, ctx: &Ctx) -> Expr
where Self: Sized, @@ -9,7 +9,7 @@ Self: Sized, T: Fn(&I) -> O,

source§

fn splice_fn2_borrow_mut_ctx<I1, I2, O>(self, ctx: &Ctx) -> Expr
where Self: Sized, - T: Fn(&mut I1, I2) -> O,

source§

impl<'a> Copy for ClusterSelfId<'a>

Auto Trait Implementations§

§

impl<'a> Freeze for ClusterSelfId<'a>

§

impl<'a> RefUnwindSafe for ClusterSelfId<'a>

§

impl<'a> Send for ClusterSelfId<'a>

§

impl<'a> Sync for ClusterSelfId<'a>

§

impl<'a> Unpin for ClusterSelfId<'a>

§

impl<'a> UnwindSafe for ClusterSelfId<'a>

Blanket Implementations§

source§

impl<T> Any for T
where + T: Fn(&mut I1, I2) -> O,

source§

impl<'a> Copy for ClusterSelfId<'a>

Auto Trait Implementations§

§

impl<'a> Freeze for ClusterSelfId<'a>

§

impl<'a> RefUnwindSafe for ClusterSelfId<'a>

§

impl<'a> Send for ClusterSelfId<'a>

§

impl<'a> Sync for ClusterSelfId<'a>

§

impl<'a> Unpin for ClusterSelfId<'a>

§

impl<'a> UnwindSafe for ClusterSelfId<'a>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where @@ -27,7 +27,7 @@ F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where diff --git a/doc/hydro_lang/location/cluster/trait.IsCluster.html b/doc/hydro_lang/location/cluster/trait.IsCluster.html new file mode 100644 index 000000000000..82a3f2d74666 --- /dev/null +++ b/doc/hydro_lang/location/cluster/trait.IsCluster.html @@ -0,0 +1,3 @@ +IsCluster in hydro_lang::location::cluster - Rust

Trait hydro_lang::location::cluster::IsCluster

source ·
pub trait IsCluster {
+    type Tag;
+}

Required Associated Types§

Implementors§

source§

impl<C> IsCluster for Cluster<'_, C>

source§

type Tag = C

\ No newline at end of file diff --git a/doc/hydroflow_plus/location/enum.LocationId.html b/doc/hydro_lang/location/enum.LocationId.html similarity index 64% rename from doc/hydroflow_plus/location/enum.LocationId.html rename to doc/hydro_lang/location/enum.LocationId.html index 1bfa911882ac..7c67859ad3de 100644 --- a/doc/hydroflow_plus/location/enum.LocationId.html +++ b/doc/hydro_lang/location/enum.LocationId.html @@ -1,10 +1,10 @@ -LocationId in hydroflow_plus::location - Rust

Enum hydroflow_plus::location::LocationId

source ·
pub enum LocationId {
+LocationId in hydro_lang::location - Rust

Enum hydro_lang::location::LocationId

source ·
pub enum LocationId {
     Process(usize),
     Cluster(usize),
-    Tick(usize, Box<LocationId>),
+    Tick(usize, Box<LocationId>),
     ExternalProcess(usize),
-}

Variants§

§

Process(usize)

§

Cluster(usize)

§

Tick(usize, Box<LocationId>)

§

ExternalProcess(usize)

Implementations§

source§

impl LocationId

source

pub fn root(&self) -> &LocationId

source

pub fn raw_id(&self) -> usize

Trait Implementations§

source§

impl Clone for LocationId

source§

fn clone(&self) -> LocationId

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for LocationId

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq for LocationId

source§

fn eq(&self, other: &LocationId) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
source§

impl Eq for LocationId

source§

impl StructuralPartialEq for LocationId

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +}

Variants§

§

Process(usize)

§

Cluster(usize)

§

Tick(usize, Box<LocationId>)

§

ExternalProcess(usize)

Implementations§

source§

impl LocationId

source

pub fn root(&self) -> &LocationId

source

pub fn raw_id(&self) -> usize

Trait Implementations§

source§

impl Clone for LocationId

source§

fn clone(&self) -> LocationId

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for LocationId

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq for LocationId

source§

fn eq(&self, other: &LocationId) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
source§

impl Eq for LocationId

source§

impl StructuralPartialEq for LocationId

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where @@ -28,7 +28,7 @@ F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where diff --git a/doc/hydro_lang/location/external_process/index.html b/doc/hydro_lang/location/external_process/index.html new file mode 100644 index 000000000000..ce18d2c0c481 --- /dev/null +++ b/doc/hydro_lang/location/external_process/index.html @@ -0,0 +1 @@ +hydro_lang::location::external_process - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus/location/external_process/sidebar-items.js b/doc/hydro_lang/location/external_process/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus/location/external_process/sidebar-items.js rename to doc/hydro_lang/location/external_process/sidebar-items.js diff --git a/doc/hydroflow_plus/location/external_process/struct.ExternalBincodeSink.html b/doc/hydro_lang/location/external_process/struct.ExternalBincodeSink.html similarity index 76% rename from doc/hydroflow_plus/location/external_process/struct.ExternalBincodeSink.html rename to doc/hydro_lang/location/external_process/struct.ExternalBincodeSink.html index 8c5dc6280033..f6748d770df0 100644 --- a/doc/hydroflow_plus/location/external_process/struct.ExternalBincodeSink.html +++ b/doc/hydro_lang/location/external_process/struct.ExternalBincodeSink.html @@ -1,8 +1,8 @@ -ExternalBincodeSink in hydroflow_plus::location::external_process - Rust
pub struct ExternalBincodeSink<T: Serialize> { /* private fields */ }

Auto Trait Implementations§

§

impl<T> Freeze for ExternalBincodeSink<T>

§

impl<T> RefUnwindSafe for ExternalBincodeSink<T>
where - T: RefUnwindSafe,

§

impl<T> Send for ExternalBincodeSink<T>
where - T: Send,

§

impl<T> Sync for ExternalBincodeSink<T>
where - T: Sync,

§

impl<T> Unpin for ExternalBincodeSink<T>
where - T: Unpin,

§

impl<T> UnwindSafe for ExternalBincodeSink<T>
where +ExternalBincodeSink in hydro_lang::location::external_process - Rust
pub struct ExternalBincodeSink<T: Serialize> { /* private fields */ }

Auto Trait Implementations§

§

impl<T> Freeze for ExternalBincodeSink<T>

§

impl<T> RefUnwindSafe for ExternalBincodeSink<T>
where + T: RefUnwindSafe,

§

impl<T> Send for ExternalBincodeSink<T>
where + T: Send,

§

impl<T> Sync for ExternalBincodeSink<T>
where + T: Sync,

§

impl<T> Unpin for ExternalBincodeSink<T>
where + T: Unpin,

§

impl<T> UnwindSafe for ExternalBincodeSink<T>
where T: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where @@ -20,7 +20,7 @@ F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a diff --git a/doc/hydroflow_plus/location/external_process/struct.ExternalBincodeStream.html b/doc/hydro_lang/location/external_process/struct.ExternalBincodeStream.html similarity index 76% rename from doc/hydroflow_plus/location/external_process/struct.ExternalBincodeStream.html rename to doc/hydro_lang/location/external_process/struct.ExternalBincodeStream.html index 10aa6dfc2bfe..7bac8435095e 100644 --- a/doc/hydroflow_plus/location/external_process/struct.ExternalBincodeStream.html +++ b/doc/hydro_lang/location/external_process/struct.ExternalBincodeStream.html @@ -1,8 +1,8 @@ -ExternalBincodeStream in hydroflow_plus::location::external_process - Rust
pub struct ExternalBincodeStream<T: DeserializeOwned> { /* private fields */ }

Auto Trait Implementations§

§

impl<T> Freeze for ExternalBincodeStream<T>

§

impl<T> RefUnwindSafe for ExternalBincodeStream<T>
where - T: RefUnwindSafe,

§

impl<T> Send for ExternalBincodeStream<T>
where - T: Send,

§

impl<T> Sync for ExternalBincodeStream<T>
where - T: Sync,

§

impl<T> Unpin for ExternalBincodeStream<T>
where - T: Unpin,

§

impl<T> UnwindSafe for ExternalBincodeStream<T>
where +ExternalBincodeStream in hydro_lang::location::external_process - Rust
pub struct ExternalBincodeStream<T: DeserializeOwned> { /* private fields */ }

Auto Trait Implementations§

§

impl<T> Freeze for ExternalBincodeStream<T>

§

impl<T> RefUnwindSafe for ExternalBincodeStream<T>
where + T: RefUnwindSafe,

§

impl<T> Send for ExternalBincodeStream<T>
where + T: Send,

§

impl<T> Sync for ExternalBincodeStream<T>
where + T: Sync,

§

impl<T> Unpin for ExternalBincodeStream<T>
where + T: Unpin,

§

impl<T> UnwindSafe for ExternalBincodeStream<T>
where T: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where @@ -20,7 +20,7 @@ F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a diff --git a/doc/hydroflow_plus/builder/struct.FlowStateInner.html b/doc/hydro_lang/location/external_process/struct.ExternalBytesPort.html similarity index 72% rename from doc/hydroflow_plus/builder/struct.FlowStateInner.html rename to doc/hydro_lang/location/external_process/struct.ExternalBytesPort.html index cad7f7e02fce..4ffa4adce470 100644 --- a/doc/hydroflow_plus/builder/struct.FlowStateInner.html +++ b/doc/hydro_lang/location/external_process/struct.ExternalBytesPort.html @@ -1,4 +1,4 @@ -FlowStateInner in hydroflow_plus::builder - Rust

Struct hydroflow_plus::builder::FlowStateInner

source ·
pub struct FlowStateInner { /* private fields */ }

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +ExternalBytesPort in hydro_lang::location::external_process - Rust
pub struct ExternalBytesPort { /* private fields */ }

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -15,7 +15,7 @@ F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a diff --git a/doc/hydroflow_plus/location/external_process/struct.ExternalProcess.html b/doc/hydro_lang/location/external_process/struct.ExternalProcess.html similarity index 56% rename from doc/hydroflow_plus/location/external_process/struct.ExternalProcess.html rename to doc/hydro_lang/location/external_process/struct.ExternalProcess.html index 7f2bd403d2d7..2686638e266c 100644 --- a/doc/hydroflow_plus/location/external_process/struct.ExternalProcess.html +++ b/doc/hydro_lang/location/external_process/struct.ExternalProcess.html @@ -1,12 +1,12 @@ -ExternalProcess in hydroflow_plus::location::external_process - Rust
pub struct ExternalProcess<'a, P> { /* private fields */ }

Implementations§

source§

impl<'a, P> ExternalProcess<'a, P>

source

pub fn source_external_bytes<L: Location<'a> + NoTick>( +ExternalProcess in hydro_lang::location::external_process - Rust
pub struct ExternalProcess<'a, P> { /* private fields */ }

Implementations§

Trait Implementations§

source§

impl<'a, P1, E2> CanSend<'a, ExternalProcess<'a, E2>> for Process<'a, P1>

source§

type In<T> = T

source§

type Out<T> = T

source§

type OutStrongestOrder<InOrder> = InOrder

Given the ordering guarantees of the input, determines the strongest possible -ordering guarantees of the output.
source§

fn is_demux() -> bool

source§

fn tagged_type() -> Option<Type>

source§

impl<P> Clone for ExternalProcess<'_, P>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a, P> Location<'a> for ExternalProcess<'a, P>

Auto Trait Implementations§

§

impl<'a, P> Freeze for ExternalProcess<'a, P>

§

impl<'a, P> !RefUnwindSafe for ExternalProcess<'a, P>

§

impl<'a, P> !Send for ExternalProcess<'a, P>

§

impl<'a, P> !Sync for ExternalProcess<'a, P>

§

impl<'a, P> Unpin for ExternalProcess<'a, P>
where - P: Unpin,

§

impl<'a, P> !UnwindSafe for ExternalProcess<'a, P>

Blanket Implementations§

source§

impl<T> Any for T
where +) -> (ExternalBincodeSink<T>, Stream<T, L, Unbounded>)

Trait Implementations§

source§

impl<'a, P1, E2> CanSend<'a, ExternalProcess<'a, E2>> for Process<'a, P1>

source§

type In<T> = T

source§

type Out<T> = T

source§

type OutStrongestOrder<InOrder> = InOrder

Given the ordering guarantees of the input, determines the strongest possible +ordering guarantees of the output.
source§

fn is_demux() -> bool

source§

fn tagged_type() -> Option<Type>

source§

impl<P> Clone for ExternalProcess<'_, P>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a, P> Location<'a> for ExternalProcess<'a, P>

Auto Trait Implementations§

§

impl<'a, P> Freeze for ExternalProcess<'a, P>

§

impl<'a, P> !RefUnwindSafe for ExternalProcess<'a, P>

§

impl<'a, P> !Send for ExternalProcess<'a, P>

§

impl<'a, P> !Sync for ExternalProcess<'a, P>

§

impl<'a, P> Unpin for ExternalProcess<'a, P>
where + P: Unpin,

§

impl<'a, P> !UnwindSafe for ExternalProcess<'a, P>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where @@ -24,7 +24,7 @@ F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where diff --git a/doc/hydro_lang/location/fn.check_matching_location.html b/doc/hydro_lang/location/fn.check_matching_location.html new file mode 100644 index 000000000000..7f42b6de78cf --- /dev/null +++ b/doc/hydro_lang/location/fn.check_matching_location.html @@ -0,0 +1 @@ +check_matching_location in hydro_lang::location - Rust

Function hydro_lang::location::check_matching_location

source ·
pub fn check_matching_location<'a, L: Location<'a>>(l1: &L, l2: &L)
\ No newline at end of file diff --git a/doc/hydro_lang/location/index.html b/doc/hydro_lang/location/index.html new file mode 100644 index 000000000000..377d2442ad2f --- /dev/null +++ b/doc/hydro_lang/location/index.html @@ -0,0 +1 @@ +hydro_lang::location - Rust

Module hydro_lang::location

source ·

Re-exports§

Modules§

Enums§

Traits§

Functions§

\ No newline at end of file diff --git a/doc/hydro_lang/location/process/index.html b/doc/hydro_lang/location/process/index.html new file mode 100644 index 000000000000..0ed2867b0975 --- /dev/null +++ b/doc/hydro_lang/location/process/index.html @@ -0,0 +1 @@ +hydro_lang::location::process - Rust

Module hydro_lang::location::process

source ·

Structs§

\ No newline at end of file diff --git a/doc/hydroflow_plus/location/process/sidebar-items.js b/doc/hydro_lang/location/process/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus/location/process/sidebar-items.js rename to doc/hydro_lang/location/process/sidebar-items.js diff --git a/doc/hydroflow_plus/location/process/struct.Process.html b/doc/hydro_lang/location/process/struct.Process.html similarity index 50% rename from doc/hydroflow_plus/location/process/struct.Process.html rename to doc/hydro_lang/location/process/struct.Process.html index ffc92dc6cd34..24ad0130773f 100644 --- a/doc/hydroflow_plus/location/process/struct.Process.html +++ b/doc/hydro_lang/location/process/struct.Process.html @@ -1,38 +1,38 @@ -Process in hydroflow_plus::location::process - Rust

Struct hydroflow_plus::location::process::Process

source ·
pub struct Process<'a, P = ()> { /* private fields */ }

Trait Implementations§

source§

impl<'a, P1, C2> CanSend<'a, Cluster<'a, C2>> for Process<'a, P1>

source§

type In<T> = (ClusterId<C2>, T)

source§

type Out<T> = T

source§

type OutStrongestOrder<InOrder> = InOrder

Given the ordering guarantees of the input, determines the strongest possible -ordering guarantees of the output.
source§

fn is_demux() -> bool

source§

fn tagged_type() -> Option<Type>

source§

impl<'a, P1, E2> CanSend<'a, ExternalProcess<'a, E2>> for Process<'a, P1>

source§

type In<T> = T

source§

type Out<T> = T

source§

type OutStrongestOrder<InOrder> = InOrder

Given the ordering guarantees of the input, determines the strongest possible -ordering guarantees of the output.
source§

fn is_demux() -> bool

source§

fn tagged_type() -> Option<Type>

source§

impl<'a, C1, P2> CanSend<'a, Process<'a, P2>> for Cluster<'a, C1>

source§

type In<T> = T

source§

type Out<T> = (ClusterId<C1>, T)

source§

type OutStrongestOrder<InOrder> = NoOrder

Given the ordering guarantees of the input, determines the strongest possible -ordering guarantees of the output.
source§

fn is_demux() -> bool

source§

fn tagged_type() -> Option<Type>

source§

impl<'a, P1, P2> CanSend<'a, Process<'a, P2>> for Process<'a, P1>

source§

type In<T> = T

source§

type Out<T> = T

source§

type OutStrongestOrder<InOrder> = InOrder

Given the ordering guarantees of the input, determines the strongest possible -ordering guarantees of the output.
source§

fn is_demux() -> bool

source§

fn tagged_type() -> Option<Type>

source§

impl<P> Clone for Process<'_, P>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a, P> Location<'a> for Process<'a, P>

source§

type Root = Process<'a, P>

source§

fn root(&self) -> Self::Root

source§

fn id(&self) -> LocationId

source§

fn flow_state(&self) -> &FlowState

source§

fn is_top_level() -> bool

source§

fn tick(&self) -> Tick<Self>
where - Self: NoTick,

source§

fn spin(&self) -> Stream<(), Self, Unbounded>
where - Self: Sized + NoTick,

source§

fn source_stream<T, E: FuturesStream<Item = T> + Unpin>( +Process in hydro_lang::location::process - Rust

Struct hydro_lang::location::process::Process

source ·
pub struct Process<'a, P = ()> { /* private fields */ }

Trait Implementations§

source§

impl<'a, P1, C2> CanSend<'a, Cluster<'a, C2>> for Process<'a, P1>

source§

type In<T> = (ClusterId<C2>, T)

source§

type Out<T> = T

source§

type OutStrongestOrder<InOrder> = InOrder

Given the ordering guarantees of the input, determines the strongest possible +ordering guarantees of the output.
source§

fn is_demux() -> bool

source§

fn tagged_type() -> Option<Type>

source§

impl<'a, P1, E2> CanSend<'a, ExternalProcess<'a, E2>> for Process<'a, P1>

source§

type In<T> = T

source§

type Out<T> = T

source§

type OutStrongestOrder<InOrder> = InOrder

Given the ordering guarantees of the input, determines the strongest possible +ordering guarantees of the output.
source§

fn is_demux() -> bool

source§

fn tagged_type() -> Option<Type>

source§

impl<'a, C1, P2> CanSend<'a, Process<'a, P2>> for Cluster<'a, C1>

source§

type In<T> = T

source§

type Out<T> = (ClusterId<C1>, T)

source§

type OutStrongestOrder<InOrder> = NoOrder

Given the ordering guarantees of the input, determines the strongest possible +ordering guarantees of the output.
source§

fn is_demux() -> bool

source§

fn tagged_type() -> Option<Type>

source§

impl<'a, P1, P2> CanSend<'a, Process<'a, P2>> for Process<'a, P1>

source§

type In<T> = T

source§

type Out<T> = T

source§

type OutStrongestOrder<InOrder> = InOrder

Given the ordering guarantees of the input, determines the strongest possible +ordering guarantees of the output.
source§

fn is_demux() -> bool

source§

fn tagged_type() -> Option<Type>

source§

impl<P> Clone for Process<'_, P>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a, P> Location<'a> for Process<'a, P>

source§

type Root = Process<'a, P>

source§

fn root(&self) -> Self::Root

source§

fn id(&self) -> LocationId

source§

fn flow_state(&self) -> &FlowState

source§

fn is_top_level() -> bool

source§

fn tick(&self) -> Tick<Self>
where + Self: NoTick,

source§

fn spin(&self) -> Stream<(), Self, Unbounded>
where + Self: Sized + NoTick,

source§

fn source_stream<T, E: FuturesStream<Item = T> + Unpin>( &self, e: impl QuotedWithContext<'a, E, Self>, -) -> Stream<T, Self, Unbounded>
where - Self: Sized + NoTick,

source§

fn source_iter<T, E: IntoIterator<Item = T>>( +) -> Stream<T, Self, Unbounded>
where + Self: Sized + NoTick,

source§

fn source_iter<T, E: IntoIterator<Item = T>>( &self, e: impl QuotedWithContext<'a, E, Self>, -) -> Stream<T, Self, Unbounded>
where - Self: Sized + NoTick,

source§

fn singleton<T: Clone>( +) -> Stream<T, Self, Unbounded>
where + Self: Sized + NoTick,

source§

fn singleton<T: Clone>( &self, e: impl QuotedWithContext<'a, T, Self>, -) -> Singleton<T, Self, Unbounded>
where - Self: Sized + NoTick,

source§

unsafe fn source_interval( +) -> Singleton<T, Self, Unbounded>
where + Self: Sized + NoTick,

source§

unsafe fn source_interval( &self, interval: impl QuotedWithContext<'a, Duration, Self> + Copy + 'a, -) -> Stream<Instant, Self, Unbounded>
where - Self: Sized + NoTick,

Generates a stream with values emitted at a fixed interval, with -each value being the current time (as an [tokio::time::Instant]). Read more
source§

unsafe fn source_interval_delayed( +) -> Stream<Instant, Self, Unbounded>
where + Self: Sized + NoTick,

Generates a stream with values emitted at a fixed interval, with +each value being the current time (as an [tokio::time::Instant]). Read more
source§

unsafe fn source_interval_delayed( &self, delay: impl QuotedWithContext<'a, Duration, Self> + Copy + 'a, interval: impl QuotedWithContext<'a, Duration, Self> + Copy + 'a, -) -> Stream<Instant, Self, Unbounded>
where - Self: Sized + NoTick,

Generates a stream with values emitted at a fixed interval (with an +) -> Stream<Instant, Self, Unbounded>
where + Self: Sized + NoTick,

Generates a stream with values emitted at a fixed interval (with an initial delay), with each value being the current time -(as an [tokio::time::Instant]). Read more
source§

fn forward_ref<S: CycleCollection<'a, ForwardRefMarker, Location = Self>>( +(as an [tokio::time::Instant]). Read more

source§

fn forward_ref<S: CycleCollection<'a, ForwardRefMarker, Location = Self>>( &self, -) -> (ForwardRef<'a, S>, S)
where - Self: NoTick,

source§

impl<T> NoTick for Process<'_, T>

source§

impl<T> NoTimestamp for Process<'_, T>

Auto Trait Implementations§

§

impl<'a, P> Freeze for Process<'a, P>

§

impl<'a, P = ()> !RefUnwindSafe for Process<'a, P>

§

impl<'a, P = ()> !Send for Process<'a, P>

§

impl<'a, P = ()> !Sync for Process<'a, P>

§

impl<'a, P> Unpin for Process<'a, P>
where - P: Unpin,

§

impl<'a, P = ()> !UnwindSafe for Process<'a, P>

Blanket Implementations§

source§

impl<T> Any for T
where +) -> (ForwardRef<'a, S>, S)
where + Self: NoTick,

source§

impl<T> NoTick for Process<'_, T>

source§

impl<T> NoTimestamp for Process<'_, T>

Auto Trait Implementations§

§

impl<'a, P> Freeze for Process<'a, P>

§

impl<'a, P = ()> !RefUnwindSafe for Process<'a, P>

§

impl<'a, P = ()> !Send for Process<'a, P>

§

impl<'a, P = ()> !Sync for Process<'a, P>

§

impl<'a, P> Unpin for Process<'a, P>
where + P: Unpin,

§

impl<'a, P = ()> !UnwindSafe for Process<'a, P>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where @@ -50,7 +50,7 @@ F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where diff --git a/doc/hydroflow_plus/location/sidebar-items.js b/doc/hydro_lang/location/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus/location/sidebar-items.js rename to doc/hydro_lang/location/sidebar-items.js diff --git a/doc/hydro_lang/location/tick/index.html b/doc/hydro_lang/location/tick/index.html new file mode 100644 index 000000000000..5303bac3a3e2 --- /dev/null +++ b/doc/hydro_lang/location/tick/index.html @@ -0,0 +1 @@ +hydro_lang::location::tick - Rust

Module hydro_lang::location::tick

source ·

Structs§

  • Marks the stream as being inside the single global clock domain.

Traits§

\ No newline at end of file diff --git a/doc/hydroflow_plus/location/tick/sidebar-items.js b/doc/hydro_lang/location/tick/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus/location/tick/sidebar-items.js rename to doc/hydro_lang/location/tick/sidebar-items.js diff --git a/doc/hydroflow_plus/location/tick/struct.Tick.html b/doc/hydro_lang/location/tick/struct.Tick.html similarity index 61% rename from doc/hydroflow_plus/location/tick/struct.Tick.html rename to doc/hydro_lang/location/tick/struct.Tick.html index 2e2982758611..5623aec20107 100644 --- a/doc/hydroflow_plus/location/tick/struct.Tick.html +++ b/doc/hydro_lang/location/tick/struct.Tick.html @@ -1,34 +1,34 @@ -Tick in hydroflow_plus::location::tick - Rust

Struct hydroflow_plus::location::tick::Tick

source ·
pub struct Tick<L> { /* private fields */ }
Expand description

Marks the stream as being inside the single global clock domain.

-

Implementations§

source§

impl<'a, L: Location<'a>> Tick<L>

source

pub fn outer(&self) -> &L

source

pub fn spin_batch( +Tick in hydro_lang::location::tick - Rust

Struct hydro_lang::location::tick::Tick

source ·
pub struct Tick<L> { /* private fields */ }
Expand description

Marks the stream as being inside the single global clock domain.

+

Implementations§

source§

impl<'a, L: Location<'a>> Tick<L>

source

pub fn outer(&self) -> &L

source

pub fn spin_batch( &self, batch_size: impl QuotedWithContext<'a, usize, L> + Copy + 'a, -) -> Stream<(), Self, Bounded>
where - L: NoTick + NoTimestamp,

source

pub fn singleton<T: Clone>( +) -> Stream<(), Self, Bounded>
where + L: NoTick + NoTimestamp,

source

pub fn singleton<T: Clone>( &self, e: impl QuotedWithContext<'a, T, L>, -) -> Singleton<T, Self, Bounded>
where - L: NoTick,

source

pub fn singleton_first_tick<T: Clone>( +) -> Singleton<T, Self, Bounded>
where + L: NoTick,

source

pub fn singleton_first_tick<T: Clone>( &self, - e: impl QuotedWithContext<'a, T, Tick<L>>, -) -> Optional<T, Self, Bounded>
where - L: NoTick,

source

pub fn forward_ref<S: CycleCollection<'a, ForwardRefMarker, Location = Self>>( + e: impl QuotedWithContext<'a, T, Tick<L>>, +) -> Optional<T, Self, Bounded>
where + L: NoTick,

source

pub fn forward_ref<S: CycleCollection<'a, ForwardRefMarker, Location = Self>>( &self, -) -> (ForwardRef<'a, S>, S)
where - L: NoTick,

source

pub fn forward_ref_timestamped<S: CycleCollection<'a, ForwardRefMarker, Location = Timestamped<L>>>( +) -> (ForwardRef<'a, S>, S)
where + L: NoTick,

source

pub fn forward_ref_timestamped<S: CycleCollection<'a, ForwardRefMarker, Location = Timestamped<L>>>( &self, -) -> (ForwardRef<'a, S>, S)

source

pub fn cycle<S: CycleCollection<'a, TickCycleMarker, Location = Self> + DeferTick>( +) -> (ForwardRef<'a, S>, S)

source

pub fn cycle<S: CycleCollection<'a, TickCycleMarker, Location = Self> + DeferTick>( &self, -) -> (TickCycle<'a, S>, S)
where - L: NoTick,

source

pub fn cycle_with_initial<S: CycleCollectionWithInitial<'a, TickCycleMarker, Location = Self> + DeferTick>( +) -> (TickCycle<'a, S>, S)
where + L: NoTick,

source

pub fn cycle_with_initial<S: CycleCollectionWithInitial<'a, TickCycleMarker, Location = Self> + DeferTick>( &self, initial: S, -) -> (TickCycle<'a, S>, S)
where - L: NoTick,

Trait Implementations§

source§

impl<L: Clone> Clone for Tick<L>

source§

fn clone(&self) -> Tick<L>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a, L: Location<'a>> Location<'a> for Tick<L>

source§

type Root = <L as Location<'a>>::Root

source§

fn root(&self) -> Self::Root

source§

fn id(&self) -> LocationId

source§

fn flow_state(&self) -> &FlowState

source§

fn is_top_level() -> bool

source§

impl<'a, L: Location<'a>> NoTimestamp for Tick<L>

Auto Trait Implementations§

§

impl<L> Freeze for Tick<L>
where - L: Freeze,

§

impl<L> RefUnwindSafe for Tick<L>
where - L: RefUnwindSafe,

§

impl<L> Send for Tick<L>
where - L: Send,

§

impl<L> Sync for Tick<L>
where - L: Sync,

§

impl<L> Unpin for Tick<L>
where - L: Unpin,

§

impl<L> UnwindSafe for Tick<L>
where +) -> (TickCycle<'a, S>, S)
where + L: NoTick,

Trait Implementations§

source§

impl<L: Clone> Clone for Tick<L>

source§

fn clone(&self) -> Tick<L>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a, L: Location<'a>> Location<'a> for Tick<L>

source§

type Root = <L as Location<'a>>::Root

source§

fn root(&self) -> Self::Root

source§

fn id(&self) -> LocationId

source§

fn flow_state(&self) -> &FlowState

source§

fn is_top_level() -> bool

source§

impl<'a, L: Location<'a>> NoTimestamp for Tick<L>

Auto Trait Implementations§

§

impl<L> Freeze for Tick<L>
where + L: Freeze,

§

impl<L> RefUnwindSafe for Tick<L>
where + L: RefUnwindSafe,

§

impl<L> Send for Tick<L>
where + L: Send,

§

impl<L> Sync for Tick<L>
where + L: Sync,

§

impl<L> Unpin for Tick<L>
where + L: Unpin,

§

impl<L> UnwindSafe for Tick<L>
where L: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where @@ -47,7 +47,7 @@ F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where diff --git a/doc/hydroflow_plus/location/tick/struct.Timestamped.html b/doc/hydro_lang/location/tick/struct.Timestamped.html similarity index 64% rename from doc/hydroflow_plus/location/tick/struct.Timestamped.html rename to doc/hydro_lang/location/tick/struct.Timestamped.html index 58c3d1121f59..cdda9c88c690 100644 --- a/doc/hydroflow_plus/location/tick/struct.Timestamped.html +++ b/doc/hydro_lang/location/tick/struct.Timestamped.html @@ -1,38 +1,38 @@ -Timestamped in hydroflow_plus::location::tick - Rust

Struct hydroflow_plus::location::tick::Timestamped

source ·
pub struct Timestamped<L> { /* private fields */ }

Trait Implementations§

source§

impl<L: Clone> Clone for Timestamped<L>

source§

fn clone(&self) -> Timestamped<L>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a, L: Location<'a>> Location<'a> for Timestamped<L>

source§

type Root = <L as Location<'a>>::Root

source§

fn root(&self) -> Self::Root

source§

fn id(&self) -> LocationId

source§

fn flow_state(&self) -> &FlowState

source§

fn is_top_level() -> bool

source§

fn tick(&self) -> Tick<Self>
where - Self: NoTick,

source§

fn spin(&self) -> Stream<(), Self, Unbounded>
where - Self: Sized + NoTick,

source§

fn source_stream<T, E: FuturesStream<Item = T> + Unpin>( +Timestamped in hydro_lang::location::tick - Rust

Struct hydro_lang::location::tick::Timestamped

source ·
pub struct Timestamped<L> { /* private fields */ }

Trait Implementations§

source§

impl<L: Clone> Clone for Timestamped<L>

source§

fn clone(&self) -> Timestamped<L>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a, L: Location<'a>> Location<'a> for Timestamped<L>

source§

type Root = <L as Location<'a>>::Root

source§

fn root(&self) -> Self::Root

source§

fn id(&self) -> LocationId

source§

fn flow_state(&self) -> &FlowState

source§

fn is_top_level() -> bool

source§

fn tick(&self) -> Tick<Self>
where + Self: NoTick,

source§

fn spin(&self) -> Stream<(), Self, Unbounded>
where + Self: Sized + NoTick,

source§

fn source_stream<T, E: FuturesStream<Item = T> + Unpin>( &self, e: impl QuotedWithContext<'a, E, Self>, -) -> Stream<T, Self, Unbounded>
where - Self: Sized + NoTick,

source§

fn source_iter<T, E: IntoIterator<Item = T>>( +) -> Stream<T, Self, Unbounded>
where + Self: Sized + NoTick,

source§

fn source_iter<T, E: IntoIterator<Item = T>>( &self, e: impl QuotedWithContext<'a, E, Self>, -) -> Stream<T, Self, Unbounded>
where - Self: Sized + NoTick,

source§

fn singleton<T: Clone>( +) -> Stream<T, Self, Unbounded>
where + Self: Sized + NoTick,

source§

fn singleton<T: Clone>( &self, e: impl QuotedWithContext<'a, T, Self>, -) -> Singleton<T, Self, Unbounded>
where - Self: Sized + NoTick,

source§

unsafe fn source_interval( +) -> Singleton<T, Self, Unbounded>
where + Self: Sized + NoTick,

source§

unsafe fn source_interval( &self, interval: impl QuotedWithContext<'a, Duration, Self> + Copy + 'a, -) -> Stream<Instant, Self, Unbounded>
where - Self: Sized + NoTick,

Generates a stream with values emitted at a fixed interval, with -each value being the current time (as an [tokio::time::Instant]). Read more
source§

unsafe fn source_interval_delayed( +) -> Stream<Instant, Self, Unbounded>
where + Self: Sized + NoTick,

Generates a stream with values emitted at a fixed interval, with +each value being the current time (as an [tokio::time::Instant]). Read more
source§

unsafe fn source_interval_delayed( &self, delay: impl QuotedWithContext<'a, Duration, Self> + Copy + 'a, interval: impl QuotedWithContext<'a, Duration, Self> + Copy + 'a, -) -> Stream<Instant, Self, Unbounded>
where - Self: Sized + NoTick,

Generates a stream with values emitted at a fixed interval (with an +) -> Stream<Instant, Self, Unbounded>
where + Self: Sized + NoTick,

Generates a stream with values emitted at a fixed interval (with an initial delay), with each value being the current time -(as an [tokio::time::Instant]). Read more
source§

fn forward_ref<S: CycleCollection<'a, ForwardRefMarker, Location = Self>>( +(as an [tokio::time::Instant]). Read more

source§

fn forward_ref<S: CycleCollection<'a, ForwardRefMarker, Location = Self>>( &self, -) -> (ForwardRef<'a, S>, S)
where - Self: NoTick,

source§

impl<L> NoTick for Timestamped<L>

Auto Trait Implementations§

§

impl<L> Freeze for Timestamped<L>
where - L: Freeze,

§

impl<L> RefUnwindSafe for Timestamped<L>
where - L: RefUnwindSafe,

§

impl<L> Send for Timestamped<L>
where - L: Send,

§

impl<L> Sync for Timestamped<L>
where - L: Sync,

§

impl<L> Unpin for Timestamped<L>
where - L: Unpin,

§

impl<L> UnwindSafe for Timestamped<L>
where +) -> (ForwardRef<'a, S>, S)
where + Self: NoTick,

source§

impl<L> NoTick for Timestamped<L>

Auto Trait Implementations§

§

impl<L> Freeze for Timestamped<L>
where + L: Freeze,

§

impl<L> RefUnwindSafe for Timestamped<L>
where + L: RefUnwindSafe,

§

impl<L> Send for Timestamped<L>
where + L: Send,

§

impl<L> Sync for Timestamped<L>
where + L: Sync,

§

impl<L> Unpin for Timestamped<L>
where + L: Unpin,

§

impl<L> UnwindSafe for Timestamped<L>
where L: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where @@ -51,7 +51,7 @@ F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where diff --git a/doc/hydro_lang/location/tick/trait.NoTick.html b/doc/hydro_lang/location/tick/trait.NoTick.html new file mode 100644 index 000000000000..2cfe90dcbcfe --- /dev/null +++ b/doc/hydro_lang/location/tick/trait.NoTick.html @@ -0,0 +1 @@ +NoTick in hydro_lang::location::tick - Rust

Trait hydro_lang::location::tick::NoTick

source ·
pub trait NoTick: Sealed { }

Implementors§

source§

impl<L> NoTick for Timestamped<L>

source§

impl<T> NoTick for Cluster<'_, T>

source§

impl<T> NoTick for Process<'_, T>

\ No newline at end of file diff --git a/doc/hydro_lang/location/tick/trait.NoTimestamp.html b/doc/hydro_lang/location/tick/trait.NoTimestamp.html new file mode 100644 index 000000000000..2562c7a3f2f3 --- /dev/null +++ b/doc/hydro_lang/location/tick/trait.NoTimestamp.html @@ -0,0 +1 @@ +NoTimestamp in hydro_lang::location::tick - Rust

Trait hydro_lang::location::tick::NoTimestamp

source ·
pub trait NoTimestamp: Sealed { }

Implementors§

source§

impl<'a, L: Location<'a>> NoTimestamp for Tick<L>

source§

impl<T> NoTimestamp for Cluster<'_, T>

source§

impl<T> NoTimestamp for Process<'_, T>

\ No newline at end of file diff --git a/doc/hydro_lang/location/trait.Location.html b/doc/hydro_lang/location/trait.Location.html new file mode 100644 index 000000000000..eb506fcfd204 --- /dev/null +++ b/doc/hydro_lang/location/trait.Location.html @@ -0,0 +1,86 @@ +Location in hydro_lang::location - Rust

Trait hydro_lang::location::Location

source ·
pub trait Location<'a>: Clone {
+    type Root: Location<'a>;
+
+    // Required methods
+    fn root(&self) -> Self::Root;
+    fn id(&self) -> LocationId;
+    fn flow_state(&self) -> &FlowState;
+    fn is_top_level() -> bool;
+
+    // Provided methods
+    fn tick(&self) -> Tick<Self>
+       where Self: NoTick { ... }
+    fn spin(&self) -> Stream<(), Self, Unbounded>
+       where Self: Sized + NoTick { ... }
+    fn source_stream<T, E: FuturesStream<Item = T> + Unpin>(
+        &self,
+        e: impl QuotedWithContext<'a, E, Self>,
+    ) -> Stream<T, Self, Unbounded>
+       where Self: Sized + NoTick { ... }
+    fn source_iter<T, E: IntoIterator<Item = T>>(
+        &self,
+        e: impl QuotedWithContext<'a, E, Self>,
+    ) -> Stream<T, Self, Unbounded>
+       where Self: Sized + NoTick { ... }
+    fn singleton<T: Clone>(
+        &self,
+        e: impl QuotedWithContext<'a, T, Self>,
+    ) -> Singleton<T, Self, Unbounded>
+       where Self: Sized + NoTick { ... }
+    unsafe fn source_interval(
+        &self,
+        interval: impl QuotedWithContext<'a, Duration, Self> + Copy + 'a,
+    ) -> Stream<Instant, Self, Unbounded>
+       where Self: Sized + NoTick { ... }
+    unsafe fn source_interval_delayed(
+        &self,
+        delay: impl QuotedWithContext<'a, Duration, Self> + Copy + 'a,
+        interval: impl QuotedWithContext<'a, Duration, Self> + Copy + 'a,
+    ) -> Stream<Instant, Self, Unbounded>
+       where Self: Sized + NoTick { ... }
+    fn forward_ref<S: CycleCollection<'a, ForwardRefMarker, Location = Self>>(
+        &self,
+    ) -> (ForwardRef<'a, S>, S)
+       where Self: NoTick { ... }
+}

Required Associated Types§

Required Methods§

source

fn root(&self) -> Self::Root

source

fn id(&self) -> LocationId

source

fn flow_state(&self) -> &FlowState

source

fn is_top_level() -> bool

Provided Methods§

source

fn tick(&self) -> Tick<Self>
where + Self: NoTick,

source

fn spin(&self) -> Stream<(), Self, Unbounded>
where + Self: Sized + NoTick,

source

fn source_stream<T, E: FuturesStream<Item = T> + Unpin>( + &self, + e: impl QuotedWithContext<'a, E, Self>, +) -> Stream<T, Self, Unbounded>
where + Self: Sized + NoTick,

source

fn source_iter<T, E: IntoIterator<Item = T>>( + &self, + e: impl QuotedWithContext<'a, E, Self>, +) -> Stream<T, Self, Unbounded>
where + Self: Sized + NoTick,

source

fn singleton<T: Clone>( + &self, + e: impl QuotedWithContext<'a, T, Self>, +) -> Singleton<T, Self, Unbounded>
where + Self: Sized + NoTick,

source

unsafe fn source_interval( + &self, + interval: impl QuotedWithContext<'a, Duration, Self> + Copy + 'a, +) -> Stream<Instant, Self, Unbounded>
where + Self: Sized + NoTick,

Generates a stream with values emitted at a fixed interval, with +each value being the current time (as an [tokio::time::Instant]).

+

The clock source used is monotonic, so elements will be emitted in +increasing order.

+
§Safety
+

Because this stream is generated by an OS timer, it will be +non-deterministic because each timestamp will be arbitrary.

+
source

unsafe fn source_interval_delayed( + &self, + delay: impl QuotedWithContext<'a, Duration, Self> + Copy + 'a, + interval: impl QuotedWithContext<'a, Duration, Self> + Copy + 'a, +) -> Stream<Instant, Self, Unbounded>
where + Self: Sized + NoTick,

Generates a stream with values emitted at a fixed interval (with an +initial delay), with each value being the current time +(as an [tokio::time::Instant]).

+

The clock source used is monotonic, so elements will be emitted in +increasing order.

+
§Safety
+

Because this stream is generated by an OS timer, it will be +non-deterministic because each timestamp will be arbitrary.

+
source

fn forward_ref<S: CycleCollection<'a, ForwardRefMarker, Location = Self>>( + &self, +) -> (ForwardRef<'a, S>, S)
where + Self: NoTick,

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<'a, C> Location<'a> for Cluster<'a, C>

source§

type Root = Cluster<'a, C>

source§

impl<'a, L: Location<'a>> Location<'a> for Tick<L>

source§

type Root = <L as Location<'a>>::Root

source§

impl<'a, L: Location<'a>> Location<'a> for Timestamped<L>

source§

type Root = <L as Location<'a>>::Root

source§

impl<'a, P> Location<'a> for ExternalProcess<'a, P>

source§

impl<'a, P> Location<'a> for Process<'a, P>

source§

type Root = Process<'a, P>

\ No newline at end of file diff --git a/doc/hydroflow_plus/macro.q!.html b/doc/hydro_lang/macro.q!.html similarity index 100% rename from doc/hydroflow_plus/macro.q!.html rename to doc/hydro_lang/macro.q!.html diff --git a/doc/hydro_lang/macro.q.html b/doc/hydro_lang/macro.q.html new file mode 100644 index 000000000000..2d1e2c0c0ded --- /dev/null +++ b/doc/hydro_lang/macro.q.html @@ -0,0 +1,7 @@ +q in hydro_lang - Rust

Macro hydro_lang::q

source ·
q!() { /* proc-macro */ }
Expand description

Creates a quoted expression for Hydro.

+

Creates a quoted expression, which can be typechecked but has its AST serialized +until it is spliced into a staged entrypoint. Returns a value which implements +Quoted<T>, where T is the type of the expression, and also may implement +IntoQuotedMut<T> is the values it captures would be safe to capture inside an +FnMut context.

+
\ No newline at end of file diff --git a/doc/hydro_lang/optional/index.html b/doc/hydro_lang/optional/index.html new file mode 100644 index 000000000000..5f1af0f5f3dd --- /dev/null +++ b/doc/hydro_lang/optional/index.html @@ -0,0 +1 @@ +hydro_lang::optional - Rust

Module hydro_lang::optional

source ·

Structs§

\ No newline at end of file diff --git a/doc/hydroflow_plus/optional/sidebar-items.js b/doc/hydro_lang/optional/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus/optional/sidebar-items.js rename to doc/hydro_lang/optional/sidebar-items.js diff --git a/doc/hydro_lang/optional/struct.Optional.html b/doc/hydro_lang/optional/struct.Optional.html new file mode 100644 index 000000000000..d917a70360ba --- /dev/null +++ b/doc/hydro_lang/optional/struct.Optional.html @@ -0,0 +1,82 @@ +Optional in hydro_lang::optional - Rust

Struct hydro_lang::optional::Optional

source ·
pub struct Optional<T, L, B> { /* private fields */ }

Implementations§

source§

impl<'a, T, L: Location<'a>, B> Optional<T, L, B>

source

pub fn some(singleton: Singleton<T, L, B>) -> Self

source§

impl<'a, T, L: Location<'a>, B> Optional<T, L, B>

source

pub fn map<U, F: Fn(T) -> U + 'a>( + self, + f: impl IntoQuotedMut<'a, F, L>, +) -> Optional<U, L, B>

source

pub fn flat_map_ordered<U, I: IntoIterator<Item = U>, F: Fn(T) -> I + 'a>( + self, + f: impl IntoQuotedMut<'a, F, L>, +) -> Stream<U, L, B>

source

pub fn flat_map_unordered<U, I: IntoIterator<Item = U>, F: Fn(T) -> I + 'a>( + self, + f: impl IntoQuotedMut<'a, F, L>, +) -> Stream<U, L, B, NoOrder>

source

pub fn flatten_ordered<U>(self) -> Stream<U, L, B>
where + T: IntoIterator<Item = U>,

source

pub fn flatten_unordered<U>(self) -> Stream<U, L, B, NoOrder>
where + T: IntoIterator<Item = U>,

source

pub fn filter<F: Fn(&T) -> bool + 'a>( + self, + f: impl IntoQuotedMut<'a, F, L>, +) -> Optional<T, L, B>

source

pub fn filter_map<U, F: Fn(T) -> Option<U> + 'a>( + self, + f: impl IntoQuotedMut<'a, F, L>, +) -> Optional<U, L, B>

source

pub fn union(self, other: Optional<T, L, B>) -> Optional<T, L, B>

source

pub fn zip<O>( + self, + other: impl Into<Optional<O, L, B>>, +) -> Optional<(T, O), L, B>
where + O: Clone,

source

pub fn unwrap_or(self, other: Singleton<T, L, B>) -> Singleton<T, L, B>

source

pub fn into_singleton(self) -> Singleton<Option<T>, L, B>
where + T: Clone,

source§

impl<'a, T, L: Location<'a>> Optional<T, L, Bounded>

source

pub fn continue_if<U>( + self, + signal: Optional<U, L, Bounded>, +) -> Optional<T, L, Bounded>

source

pub fn continue_unless<U>( + self, + other: Optional<U, L, Bounded>, +) -> Optional<T, L, Bounded>

source

pub fn then<U>(self, value: Singleton<U, L, Bounded>) -> Optional<U, L, Bounded>
where + Singleton<U, L, Bounded>: ZipResult<'a, Optional<(), L, Bounded>, Location = L, Out = Optional<(U, ()), L, Bounded>>,

source

pub fn into_stream(self) -> Stream<T, L, Bounded>

source§

impl<'a, T, L: Location<'a> + NoTick, B> Optional<T, Timestamped<L>, B>

source

pub unsafe fn latest_tick(self) -> Optional<T, Tick<L>, Bounded>

Given a tick, returns a optional value corresponding to a snapshot of the optional +as of that tick. The snapshot at tick t + 1 is guaranteed to include at least all +relevant data that contributed to the snapshot at tick t.

+
§Safety
+

Because this picks a snapshot of a optional whose value is continuously changing, +the output optional has a non-deterministic value since the snapshot can be at an +arbitrary point in time.

+
source

pub fn drop_timestamp(self) -> Optional<T, L, B>

source§

impl<'a, T, L: Location<'a> + NoTick, B> Optional<T, L, B>

source

pub fn timestamped(self, tick: &Tick<L>) -> Optional<T, Timestamped<L>, B>

source

pub unsafe fn sample_eager(self) -> Stream<T, L, Unbounded>

Eagerly samples the optional as fast as possible, returning a stream of snapshots +with order corresponding to increasing prefixes of data contributing to the optional.

+
§Safety
+

At runtime, the optional will be arbitrarily sampled as fast as possible, but due +to non-deterministic batching and arrival of inputs, the output stream is +non-deterministic.

+
source

pub unsafe fn sample_every( + self, + interval: impl QuotedWithContext<'a, Duration, L> + Copy + 'a, +) -> Stream<T, L, Unbounded>
where + L: NoTimestamp,

Given a time interval, returns a stream corresponding to snapshots of the optional +value taken at various points in time. Because the input optional may be +Unbounded, there are no guarantees on what these snapshots are other than they +represent the value of the optional given some prefix of the streams leading up to +it.

+
§Safety
+

The output stream is non-deterministic in which elements are sampled, since this +is controlled by a clock.

+
source§

impl<'a, T, L: Location<'a>> Optional<T, Tick<L>, Bounded>

source

pub fn all_ticks(self) -> Stream<T, Timestamped<L>, Unbounded>

source

pub fn latest(self) -> Optional<T, Timestamped<L>, Unbounded>

source

pub fn defer_tick(self) -> Optional<T, Tick<L>, Bounded>

source

pub fn persist(self) -> Stream<T, Tick<L>, Bounded>

source

pub fn delta(self) -> Optional<T, Tick<L>, Bounded>

Trait Implementations§

source§

impl<'a, T: Clone, L: Location<'a>, B> Clone for Optional<T, L, B>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a, T, L: Location<'a> + NoTick, B> CycleCollection<'a, ForwardRefMarker> for Optional<T, L, B>

source§

type Location = L

source§

fn create_source(ident: Ident, location: L) -> Self

source§

impl<'a, T, L: Location<'a>> CycleCollection<'a, ForwardRefMarker> for Optional<T, Tick<L>, Bounded>

source§

type Location = Tick<L>

source§

fn create_source(ident: Ident, location: Tick<L>) -> Self

source§

impl<'a, T, L: Location<'a>> CycleCollection<'a, TickCycleMarker> for Optional<T, Tick<L>, Bounded>

source§

type Location = Tick<L>

source§

fn create_source(ident: Ident, location: Tick<L>) -> Self

source§

impl<'a, T, L: Location<'a> + NoTick, B> CycleComplete<'a, ForwardRefMarker> for Optional<T, L, B>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

source§

impl<'a, T, L: Location<'a>> CycleComplete<'a, ForwardRefMarker> for Optional<T, Tick<L>, Bounded>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

source§

impl<'a, T, L: Location<'a>> CycleComplete<'a, TickCycleMarker> for Optional<T, Tick<L>, Bounded>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

source§

impl<'a, T, L: Location<'a>> DeferTick for Optional<T, Tick<L>, Bounded>

source§

fn defer_tick(self) -> Self

source§

impl<'a, T, L: Location<'a>> From<Optional<T, L, Bounded>> for Optional<T, L, Unbounded>

source§

fn from(singleton: Optional<T, L, Bounded>) -> Self

Converts to this type from the input type.
source§

impl<'a, T, L: Location<'a>, B> From<Singleton<T, L, B>> for Optional<T, L, B>

source§

fn from(singleton: Singleton<T, L, B>) -> Self

Converts to this type from the input type.
source§

impl<'a, T, U: Clone, L: Location<'a>, B> ZipResult<'a, Optional<U, Tick<L>, B>> for Singleton<T, Tick<L>, B>

source§

type Out = Optional<(T, U), Tick<L>, B>

source§

type Location = Tick<L>

source§

fn other_location(other: &Optional<U, Tick<L>, B>) -> Tick<L>

source§

fn other_ir_node(other: Optional<U, Tick<L>, B>) -> HydroNode

source§

fn make(location: Tick<L>, ir_node: HydroNode) -> Self::Out

source§

impl<'a, T, U: Clone, L: Location<'a>, B> ZipResult<'a, Optional<U, Timestamped<L>, B>> for Singleton<T, Timestamped<L>, B>

Auto Trait Implementations§

§

impl<T, L, B> !Freeze for Optional<T, L, B>

§

impl<T, L, B> !RefUnwindSafe for Optional<T, L, B>

§

impl<T, L, B> !Send for Optional<T, L, B>

§

impl<T, L, B> !Sync for Optional<T, L, B>

§

impl<T, L, B> Unpin for Optional<T, L, B>
where + L: Unpin, + T: Unpin, + B: Unpin,

§

impl<T, L, B> !UnwindSafe for Optional<T, L, B>

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where + T: Clone,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where + T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/doc/hydro_lang/rewrites/index.html b/doc/hydro_lang/rewrites/index.html new file mode 100644 index 000000000000..d136303e0e6c --- /dev/null +++ b/doc/hydro_lang/rewrites/index.html @@ -0,0 +1 @@ +hydro_lang::rewrites - Rust

Module hydro_lang::rewrites

source ·

Modules§

\ No newline at end of file diff --git a/doc/hydro_lang/rewrites/persist_pullup/fn.persist_pullup.html b/doc/hydro_lang/rewrites/persist_pullup/fn.persist_pullup.html new file mode 100644 index 000000000000..faff2bdd83c7 --- /dev/null +++ b/doc/hydro_lang/rewrites/persist_pullup/fn.persist_pullup.html @@ -0,0 +1 @@ +persist_pullup in hydro_lang::rewrites::persist_pullup - Rust

Function hydro_lang::rewrites::persist_pullup::persist_pullup

source ·
pub fn persist_pullup(ir: Vec<HydroLeaf>) -> Vec<HydroLeaf>
\ No newline at end of file diff --git a/doc/hydro_lang/rewrites/persist_pullup/index.html b/doc/hydro_lang/rewrites/persist_pullup/index.html new file mode 100644 index 000000000000..645b728cad18 --- /dev/null +++ b/doc/hydro_lang/rewrites/persist_pullup/index.html @@ -0,0 +1 @@ +hydro_lang::rewrites::persist_pullup - Rust

Module hydro_lang::rewrites::persist_pullup

source ·

Functions§

\ No newline at end of file diff --git a/doc/hydroflow_plus/rewrites/persist_pullup/sidebar-items.js b/doc/hydro_lang/rewrites/persist_pullup/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus/rewrites/persist_pullup/sidebar-items.js rename to doc/hydro_lang/rewrites/persist_pullup/sidebar-items.js diff --git a/doc/hydro_lang/rewrites/profiler/fn.increment_counter.html b/doc/hydro_lang/rewrites/profiler/fn.increment_counter.html new file mode 100644 index 000000000000..0c1a18bc65f0 --- /dev/null +++ b/doc/hydro_lang/rewrites/profiler/fn.increment_counter.html @@ -0,0 +1 @@ +increment_counter in hydro_lang::rewrites::profiler - Rust

Function hydro_lang::rewrites::profiler::increment_counter

source ·
pub fn increment_counter(count: &mut u64)
\ No newline at end of file diff --git a/doc/hydro_lang/rewrites/profiler/fn.profiling.html b/doc/hydro_lang/rewrites/profiler/fn.profiling.html new file mode 100644 index 000000000000..5cee4e13524b --- /dev/null +++ b/doc/hydro_lang/rewrites/profiler/fn.profiling.html @@ -0,0 +1,6 @@ +profiling in hydro_lang::rewrites::profiler - Rust

Function hydro_lang::rewrites::profiler::profiling

source ·
pub fn profiling<'a>(
+    ir: Vec<HydroLeaf>,
+    counters: RuntimeData<&'a RefCell<Vec<u64>>>,
+    counter_queue: RuntimeData<&'a RefCell<UnboundedSender<(usize, u64)>>>,
+) -> Vec<HydroLeaf>
Expand description

Count the cardinality of each input and periodically output to a file

+
\ No newline at end of file diff --git a/doc/hydro_lang/rewrites/profiler/index.html b/doc/hydro_lang/rewrites/profiler/index.html new file mode 100644 index 000000000000..23dd838b9fb1 --- /dev/null +++ b/doc/hydro_lang/rewrites/profiler/index.html @@ -0,0 +1 @@ +hydro_lang::rewrites::profiler - Rust

Module hydro_lang::rewrites::profiler

source ·

Functions§

\ No newline at end of file diff --git a/doc/hydroflow_plus/rewrites/profiler/sidebar-items.js b/doc/hydro_lang/rewrites/profiler/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus/rewrites/profiler/sidebar-items.js rename to doc/hydro_lang/rewrites/profiler/sidebar-items.js diff --git a/doc/hydro_lang/rewrites/properties/fn.properties_optimize.html b/doc/hydro_lang/rewrites/properties/fn.properties_optimize.html new file mode 100644 index 000000000000..3deefd2eb8c5 --- /dev/null +++ b/doc/hydro_lang/rewrites/properties/fn.properties_optimize.html @@ -0,0 +1,4 @@ +properties_optimize in hydro_lang::rewrites::properties - Rust

Function hydro_lang::rewrites::properties::properties_optimize

source ·
pub fn properties_optimize(
+    ir: Vec<HydroLeaf>,
+    db: &PropertyDatabase,
+) -> Vec<HydroLeaf>
\ No newline at end of file diff --git a/doc/hydro_lang/rewrites/properties/index.html b/doc/hydro_lang/rewrites/properties/index.html new file mode 100644 index 000000000000..c258b398ca0e --- /dev/null +++ b/doc/hydro_lang/rewrites/properties/index.html @@ -0,0 +1 @@ +hydro_lang::rewrites::properties - Rust

Module hydro_lang::rewrites::properties

source ·

Structs§

  • Structure for tracking expressions known to have particular algebraic properties.

Functions§

\ No newline at end of file diff --git a/doc/hydroflow_plus/rewrites/properties/sidebar-items.js b/doc/hydro_lang/rewrites/properties/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus/rewrites/properties/sidebar-items.js rename to doc/hydro_lang/rewrites/properties/sidebar-items.js diff --git a/doc/hydroflow_plus/rewrites/properties/struct.PropertyDatabase.html b/doc/hydro_lang/rewrites/properties/struct.PropertyDatabase.html similarity index 63% rename from doc/hydroflow_plus/rewrites/properties/struct.PropertyDatabase.html rename to doc/hydro_lang/rewrites/properties/struct.PropertyDatabase.html index de893c0f2345..5cfadd04ff84 100644 --- a/doc/hydroflow_plus/rewrites/properties/struct.PropertyDatabase.html +++ b/doc/hydro_lang/rewrites/properties/struct.PropertyDatabase.html @@ -1,16 +1,16 @@ -PropertyDatabase in hydroflow_plus::rewrites::properties - Rust

Struct hydroflow_plus::rewrites::properties::PropertyDatabase

source ·
pub struct PropertyDatabase { /* private fields */ }
Expand description

Structure for tracking expressions known to have particular algebraic properties.

+PropertyDatabase in hydro_lang::rewrites::properties - Rust

Struct hydro_lang::rewrites::properties::PropertyDatabase

source ·
pub struct PropertyDatabase { /* private fields */ }
Expand description

Structure for tracking expressions known to have particular algebraic properties.

§Schema

Each field in this struct corresponds to an algebraic property, and contains the list of expressions that satisfy the property. Currently only commutative.

§Interface

-

“Tag” an expression with a property and it will add it to that table. For example, Self::add_commutative_tag. +

“Tag” an expression with a property and it will add it to that table. For example, Self::add_commutative_tag. Can also run a check to see if an expression satisfies a property.

-

Implementations§

source§

impl PropertyDatabase

source

pub fn add_commutative_tag<'a, I, A, F: Fn(&mut A, I), Ctx, Q: QuotedWithContext<'a, F, Ctx> + Clone>( +

Implementations§

source§

impl PropertyDatabase

source

pub fn add_commutative_tag<'a, I, A, F: Fn(&mut A, I), Ctx, Q: QuotedWithContext<'a, F, Ctx> + Clone>( &mut self, expr: Q, ctx: &Ctx, ) -> Q

Tags the expression as commutative.

-
source

pub fn is_tagged_commutative(&self, expr: &Expr) -> bool

Trait Implementations§

source§

impl Default for PropertyDatabase

source§

fn default() -> PropertyDatabase

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +

source

pub fn is_tagged_commutative(&self, expr: &Expr) -> bool

Trait Implementations§

source§

impl Default for PropertyDatabase

source§

fn default() -> PropertyDatabase

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -27,7 +27,7 @@

§Interface

F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a diff --git a/doc/hydroflow_plus/rewrites/sidebar-items.js b/doc/hydro_lang/rewrites/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus/rewrites/sidebar-items.js rename to doc/hydro_lang/rewrites/sidebar-items.js diff --git a/doc/hydro_lang/runtime_context/index.html b/doc/hydro_lang/runtime_context/index.html new file mode 100644 index 000000000000..99af83ca6ce2 --- /dev/null +++ b/doc/hydro_lang/runtime_context/index.html @@ -0,0 +1 @@ +hydro_lang::runtime_context - Rust

Module hydro_lang::runtime_context

source ·

Structs§

Statics§

\ No newline at end of file diff --git a/doc/hydroflow_plus/runtime_context/sidebar-items.js b/doc/hydro_lang/runtime_context/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus/runtime_context/sidebar-items.js rename to doc/hydro_lang/runtime_context/sidebar-items.js diff --git a/doc/hydro_lang/runtime_context/static.RUNTIME_CONTEXT.html b/doc/hydro_lang/runtime_context/static.RUNTIME_CONTEXT.html new file mode 100644 index 000000000000..def4c6109e05 --- /dev/null +++ b/doc/hydro_lang/runtime_context/static.RUNTIME_CONTEXT.html @@ -0,0 +1 @@ +RUNTIME_CONTEXT in hydro_lang::runtime_context - Rust

Static hydro_lang::runtime_context::RUNTIME_CONTEXT

source ·
pub static RUNTIME_CONTEXT: RuntimeContext<'_>
\ No newline at end of file diff --git a/doc/hydroflow_plus/runtime_context/struct.RuntimeContext.html b/doc/hydro_lang/runtime_context/struct.RuntimeContext.html similarity index 63% rename from doc/hydroflow_plus/runtime_context/struct.RuntimeContext.html rename to doc/hydro_lang/runtime_context/struct.RuntimeContext.html index f23a156b0b79..fb6c5f0e6999 100644 --- a/doc/hydroflow_plus/runtime_context/struct.RuntimeContext.html +++ b/doc/hydro_lang/runtime_context/struct.RuntimeContext.html @@ -1,4 +1,4 @@ -RuntimeContext in hydroflow_plus::runtime_context - Rust

Struct hydroflow_plus::runtime_context::RuntimeContext

source ·
pub struct RuntimeContext<'a> { /* private fields */ }

Trait Implementations§

source§

impl<'a> Clone for RuntimeContext<'a>

source§

fn clone(&self) -> RuntimeContext<'a>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a, L: Location<'a>> FreeVariableWithContext<L> for RuntimeContext<'a>

source§

type O = &'a Context

source§

fn to_tokens(self, _ctx: &L) -> (Option<TokenStream>, Option<TokenStream>)

source§

fn uninitialized(&self, _ctx: &Ctx) -> Self::O

source§

impl<'a> Copy for RuntimeContext<'a>

Auto Trait Implementations§

§

impl<'a> Freeze for RuntimeContext<'a>

§

impl<'a> RefUnwindSafe for RuntimeContext<'a>

§

impl<'a> Send for RuntimeContext<'a>

§

impl<'a> Sync for RuntimeContext<'a>

§

impl<'a> Unpin for RuntimeContext<'a>

§

impl<'a> UnwindSafe for RuntimeContext<'a>

Blanket Implementations§

source§

impl<T> Any for T
where +RuntimeContext in hydro_lang::runtime_context - Rust

Struct hydro_lang::runtime_context::RuntimeContext

source ·
pub struct RuntimeContext<'a> { /* private fields */ }

Trait Implementations§

source§

impl<'a> Clone for RuntimeContext<'a>

source§

fn clone(&self) -> RuntimeContext<'a>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a, L: Location<'a>> FreeVariableWithContext<L> for RuntimeContext<'a>

source§

type O = &'a Context

source§

fn to_tokens(self, _ctx: &L) -> (Option<TokenStream>, Option<TokenStream>)

source§

fn uninitialized(&self, _ctx: &Ctx) -> Self::O

source§

impl<'a> Copy for RuntimeContext<'a>

Auto Trait Implementations§

§

impl<'a> Freeze for RuntimeContext<'a>

§

impl<'a> RefUnwindSafe for RuntimeContext<'a>

§

impl<'a> Send for RuntimeContext<'a>

§

impl<'a> Sync for RuntimeContext<'a>

§

impl<'a> Unpin for RuntimeContext<'a>

§

impl<'a> UnwindSafe for RuntimeContext<'a>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where @@ -16,7 +16,7 @@ F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where diff --git a/doc/hydroflow_plus/sidebar-items.js b/doc/hydro_lang/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus/sidebar-items.js rename to doc/hydro_lang/sidebar-items.js diff --git a/doc/hydro_lang/singleton/index.html b/doc/hydro_lang/singleton/index.html new file mode 100644 index 000000000000..f08f6e8ee8c2 --- /dev/null +++ b/doc/hydro_lang/singleton/index.html @@ -0,0 +1 @@ +hydro_lang::singleton - Rust

Module hydro_lang::singleton

source ·

Structs§

Traits§

\ No newline at end of file diff --git a/doc/hydroflow_plus/singleton/sidebar-items.js b/doc/hydro_lang/singleton/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus/singleton/sidebar-items.js rename to doc/hydro_lang/singleton/sidebar-items.js diff --git a/doc/hydro_lang/singleton/struct.Singleton.html b/doc/hydro_lang/singleton/struct.Singleton.html new file mode 100644 index 000000000000..da19d08795d4 --- /dev/null +++ b/doc/hydro_lang/singleton/struct.Singleton.html @@ -0,0 +1,77 @@ +Singleton in hydro_lang::singleton - Rust

Struct hydro_lang::singleton::Singleton

source ·
pub struct Singleton<T, L, B> { /* private fields */ }

Implementations§

source§

impl<'a, T, L: Location<'a>, B> Singleton<T, L, B>

source

pub fn map<U, F: Fn(T) -> U + 'a>( + self, + f: impl IntoQuotedMut<'a, F, L>, +) -> Singleton<U, L, B>

source

pub fn flat_map_ordered<U, I: IntoIterator<Item = U>, F: Fn(T) -> I + 'a>( + self, + f: impl IntoQuotedMut<'a, F, L>, +) -> Stream<U, L, B>

source

pub fn flat_map_unordered<U, I: IntoIterator<Item = U>, F: Fn(T) -> I + 'a>( + self, + f: impl IntoQuotedMut<'a, F, L>, +) -> Stream<U, L, B>

source

pub fn filter<F: Fn(&T) -> bool + 'a>( + self, + f: impl IntoQuotedMut<'a, F, L>, +) -> Optional<T, L, B>

source

pub fn filter_map<U, F: Fn(T) -> Option<U> + 'a>( + self, + f: impl IntoQuotedMut<'a, F, L>, +) -> Optional<U, L, B>

source

pub fn zip<Other>(self, other: Other) -> <Self as ZipResult<'a, Other>>::Out
where + Self: ZipResult<'a, Other, Location = L>,

source

pub fn continue_if<U>( + self, + signal: Optional<U, L, Bounded>, +) -> Optional<T, L, Bounded>
where + Self: ZipResult<'a, Optional<(), L, Bounded>, Location = L, Out = Optional<(T, ()), L, Bounded>>,

source

pub fn continue_unless<U>( + self, + other: Optional<U, L, Bounded>, +) -> Optional<T, L, Bounded>
where + Singleton<T, L, B>: ZipResult<'a, Optional<(), L, Bounded>, Location = L, Out = Optional<(T, ()), L, Bounded>>,

source§

impl<'a, T, L: Location<'a> + NoTick, B> Singleton<T, Timestamped<L>, B>

source

pub unsafe fn latest_tick(self) -> Singleton<T, Tick<L>, Bounded>

Given a tick, returns a singleton value corresponding to a snapshot of the singleton +as of that tick. The snapshot at tick t + 1 is guaranteed to include at least all +relevant data that contributed to the snapshot at tick t.

+
§Safety
+

Because this picks a snapshot of a singleton whose value is continuously changing, +the output singleton has a non-deterministic value since the snapshot can be at an +arbitrary point in time.

+
source

pub fn drop_timestamp(self) -> Optional<T, L, B>

source§

impl<'a, T, L: Location<'a> + NoTick, B> Singleton<T, L, B>

source

pub fn timestamped(self, tick: &Tick<L>) -> Singleton<T, Timestamped<L>, B>

source

pub unsafe fn sample_eager(self) -> Stream<T, L, Unbounded>

Eagerly samples the singleton as fast as possible, returning a stream of snapshots +with order corresponding to increasing prefixes of data contributing to the singleton.

+
§Safety
+

At runtime, the singleton will be arbitrarily sampled as fast as possible, but due +to non-deterministic batching and arrival of inputs, the output stream is +non-deterministic.

+
source

pub unsafe fn sample_every( + self, + interval: impl QuotedWithContext<'a, Duration, L> + Copy + 'a, +) -> Stream<T, L, Unbounded>
where + L: NoTimestamp,

Given a time interval, returns a stream corresponding to snapshots of the singleton +value taken at various points in time. Because the input singleton may be +Unbounded, there are no guarantees on what these snapshots are other than they +represent the value of the singleton given some prefix of the streams leading up to +it.

+
§Safety
+

The output stream is non-deterministic in which elements are sampled, since this +is controlled by a clock.

+
source§

impl<'a, T, L: Location<'a>> Singleton<T, Tick<L>, Bounded>

source

pub fn all_ticks(self) -> Stream<T, Timestamped<L>, Unbounded>

source

pub fn latest(self) -> Singleton<T, Timestamped<L>, Unbounded>

source

pub fn defer_tick(self) -> Singleton<T, Tick<L>, Bounded>

source

pub fn persist(self) -> Stream<T, Tick<L>, Bounded>

source

pub fn delta(self) -> Optional<T, Tick<L>, Bounded>

source

pub fn into_stream(self) -> Stream<T, Tick<L>, Bounded>

Trait Implementations§

source§

impl<'a, T: Clone, L: Location<'a>, B> Clone for Singleton<T, L, B>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a, T, L: Location<'a> + NoTick, B> CycleCollection<'a, ForwardRefMarker> for Singleton<T, L, B>

source§

type Location = L

source§

fn create_source(ident: Ident, location: L) -> Self

source§

impl<'a, T, L: Location<'a>> CycleCollection<'a, ForwardRefMarker> for Singleton<T, Tick<L>, Bounded>

source§

type Location = Tick<L>

source§

fn create_source(ident: Ident, location: Tick<L>) -> Self

source§

impl<'a, T, L: Location<'a>> CycleCollectionWithInitial<'a, TickCycleMarker> for Singleton<T, Tick<L>, Bounded>

source§

type Location = Tick<L>

source§

fn create_source(ident: Ident, initial: Self, location: Tick<L>) -> Self

source§

impl<'a, T, L: Location<'a> + NoTick, B> CycleComplete<'a, ForwardRefMarker> for Singleton<T, L, B>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

source§

impl<'a, T, L: Location<'a>> CycleComplete<'a, ForwardRefMarker> for Singleton<T, Tick<L>, Bounded>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

source§

impl<'a, T, L: Location<'a>> CycleComplete<'a, TickCycleMarker> for Singleton<T, Tick<L>, Bounded>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

source§

impl<'a, T, L: Location<'a>> DeferTick for Singleton<T, Tick<L>, Bounded>

source§

fn defer_tick(self) -> Self

source§

impl<'a, T, L: Location<'a>, B> From<Singleton<T, L, B>> for Optional<T, L, B>

source§

fn from(singleton: Singleton<T, L, B>) -> Self

Converts to this type from the input type.
source§

impl<'a, T, L: Location<'a>> From<Singleton<T, L, Bounded>> for Singleton<T, L, Unbounded>

source§

fn from(singleton: Singleton<T, L, Bounded>) -> Self

Converts to this type from the input type.
source§

impl<'a, T, U: Clone, L: Location<'a>, B> ZipResult<'a, Optional<U, Tick<L>, B>> for Singleton<T, Tick<L>, B>

source§

type Out = Optional<(T, U), Tick<L>, B>

source§

type Location = Tick<L>

source§

fn other_location(other: &Optional<U, Tick<L>, B>) -> Tick<L>

source§

fn other_ir_node(other: Optional<U, Tick<L>, B>) -> HydroNode

source§

fn make(location: Tick<L>, ir_node: HydroNode) -> Self::Out

source§

impl<'a, T, U: Clone, L: Location<'a>, B> ZipResult<'a, Optional<U, Timestamped<L>, B>> for Singleton<T, Timestamped<L>, B>

source§

impl<'a, T, U: Clone, L: Location<'a>, B> ZipResult<'a, Singleton<U, Tick<L>, B>> for Singleton<T, Tick<L>, B>

source§

type Out = Singleton<(T, U), Tick<L>, B>

source§

type Location = Tick<L>

source§

fn other_location(other: &Singleton<U, Tick<L>, B>) -> Tick<L>

source§

fn other_ir_node(other: Singleton<U, Tick<L>, B>) -> HydroNode

source§

fn make(location: Tick<L>, ir_node: HydroNode) -> Self::Out

source§

impl<'a, T, U: Clone, L: Location<'a>, B> ZipResult<'a, Singleton<U, Timestamped<L>, B>> for Singleton<T, Timestamped<L>, B>

Auto Trait Implementations§

§

impl<T, L, B> !Freeze for Singleton<T, L, B>

§

impl<T, L, B> !RefUnwindSafe for Singleton<T, L, B>

§

impl<T, L, B> !Send for Singleton<T, L, B>

§

impl<T, L, B> !Sync for Singleton<T, L, B>

§

impl<T, L, B> Unpin for Singleton<T, L, B>
where + L: Unpin, + T: Unpin, + B: Unpin,

§

impl<T, L, B> !UnwindSafe for Singleton<T, L, B>

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where + T: Clone,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where + T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/doc/hydro_lang/singleton/trait.ZipResult.html b/doc/hydro_lang/singleton/trait.ZipResult.html new file mode 100644 index 000000000000..411788abf90d --- /dev/null +++ b/doc/hydro_lang/singleton/trait.ZipResult.html @@ -0,0 +1,9 @@ +ZipResult in hydro_lang::singleton - Rust

Trait hydro_lang::singleton::ZipResult

source ·
pub trait ZipResult<'a, Other> {
+    type Out;
+    type Location;
+
+    // Required methods
+    fn other_location(other: &Other) -> Self::Location;
+    fn other_ir_node(other: Other) -> HydroNode;
+    fn make(location: Self::Location, ir_node: HydroNode) -> Self::Out;
+}

Required Associated Types§

Required Methods§

source

fn other_location(other: &Other) -> Self::Location

source

fn other_ir_node(other: Other) -> HydroNode

source

fn make(location: Self::Location, ir_node: HydroNode) -> Self::Out

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<'a, T, U: Clone, L: Location<'a>, B> ZipResult<'a, Optional<U, Tick<L>, B>> for Singleton<T, Tick<L>, B>

source§

impl<'a, T, U: Clone, L: Location<'a>, B> ZipResult<'a, Optional<U, Timestamped<L>, B>> for Singleton<T, Timestamped<L>, B>

source§

impl<'a, T, U: Clone, L: Location<'a>, B> ZipResult<'a, Singleton<U, Tick<L>, B>> for Singleton<T, Tick<L>, B>

source§

impl<'a, T, U: Clone, L: Location<'a>, B> ZipResult<'a, Singleton<U, Timestamped<L>, B>> for Singleton<T, Timestamped<L>, B>

\ No newline at end of file diff --git a/doc/hydro_lang/stream/index.html b/doc/hydro_lang/stream/index.html new file mode 100644 index 000000000000..41e52716d7a3 --- /dev/null +++ b/doc/hydro_lang/stream/index.html @@ -0,0 +1,4 @@ +hydro_lang::stream - Rust

Module hydro_lang::stream

source ·

Structs§

  • Marks the stream as having no order, which means that the order of +elements may be affected by non-determinism.
  • An ordered sequence stream of elements of type T.
  • Marks the stream as being totally ordered, which means that there are +no sources of non-determinism (other than intentional ones) that will +affect the order of elements.

Traits§

  • Helper trait for determining the weakest of two orderings.
\ No newline at end of file diff --git a/doc/hydroflow_plus/stream/sidebar-items.js b/doc/hydro_lang/stream/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus/stream/sidebar-items.js rename to doc/hydro_lang/stream/sidebar-items.js diff --git a/doc/hydroflow_plus/stream/struct.NoOrder.html b/doc/hydro_lang/stream/struct.NoOrder.html similarity index 67% rename from doc/hydroflow_plus/stream/struct.NoOrder.html rename to doc/hydro_lang/stream/struct.NoOrder.html index 4845032cdbd3..58675701c239 100644 --- a/doc/hydroflow_plus/stream/struct.NoOrder.html +++ b/doc/hydro_lang/stream/struct.NoOrder.html @@ -1,8 +1,8 @@ -NoOrder in hydroflow_plus::stream - Rust

Struct hydroflow_plus::stream::NoOrder

source ·
pub struct NoOrder {}
Expand description

Marks the stream as having no order, which means that the order of +NoOrder in hydro_lang::stream - Rust

Struct hydro_lang::stream::NoOrder

source ·
pub struct NoOrder {}
Expand description

Marks the stream as having no order, which means that the order of elements may be affected by non-determinism.

This restricts certain operators, such as fold and reduce, to only be used with commutative aggregation functions.

-

Trait Implementations§

source§

impl MinOrder<NoOrder> for TotalOrder

source§

type Min = NoOrder

The weaker of the two orderings.
source§

impl MinOrder<TotalOrder> for NoOrder

source§

type Min = NoOrder

The weaker of the two orderings.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +

Trait Implementations§

source§

impl MinOrder<NoOrder> for TotalOrder

source§

type Min = NoOrder

The weaker of the two orderings.
source§

impl MinOrder<TotalOrder> for NoOrder

source§

type Min = NoOrder

The weaker of the two orderings.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -19,7 +19,7 @@ F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a diff --git a/doc/hydro_lang/stream/struct.Stream.html b/doc/hydro_lang/stream/struct.Stream.html new file mode 100644 index 000000000000..914b3a542c82 --- /dev/null +++ b/doc/hydro_lang/stream/struct.Stream.html @@ -0,0 +1,264 @@ +Stream in hydro_lang::stream - Rust

Struct hydro_lang::stream::Stream

source ·
pub struct Stream<T, L, B, Order = TotalOrder> { /* private fields */ }
Expand description

An ordered sequence stream of elements of type T.

+

Type Parameters:

+
    +
  • T: the type of elements in the stream
  • +
  • L: the location where the stream is being materialized
  • +
  • B: the boundedness of the stream, which is either Bounded +or Unbounded
  • +
  • Order: the ordering of the stream, which is either TotalOrder +or NoOrder (default is TotalOrder)
  • +
+

Implementations§

source§

impl<'a, T, L: Location<'a>, B, Order> Stream<T, L, B, Order>

source

pub fn map<U, F: Fn(T) -> U + 'a>( + self, + f: impl IntoQuotedMut<'a, F, L>, +) -> Stream<U, L, B, Order>

source

pub fn cloned(self) -> Stream<T, L, B, Order>
where + T: Clone,

source

pub fn flat_map_ordered<U, I: IntoIterator<Item = U>, F: Fn(T) -> I + 'a>( + self, + f: impl IntoQuotedMut<'a, F, L>, +) -> Stream<U, L, B, Order>

source

pub fn flat_map_unordered<U, I: IntoIterator<Item = U>, F: Fn(T) -> I + 'a>( + self, + f: impl IntoQuotedMut<'a, F, L>, +) -> Stream<U, L, B, NoOrder>

source

pub fn flatten_ordered<U>(self) -> Stream<U, L, B, Order>
where + T: IntoIterator<Item = U>,

source

pub fn flatten_unordered<U>(self) -> Stream<U, L, B, NoOrder>
where + T: IntoIterator<Item = U>,

source

pub fn filter<F: Fn(&T) -> bool + 'a>( + self, + f: impl IntoQuotedMut<'a, F, L>, +) -> Stream<T, L, B, Order>

source

pub fn filter_map<U, F: Fn(T) -> Option<U> + 'a>( + self, + f: impl IntoQuotedMut<'a, F, L>, +) -> Stream<U, L, B, Order>

source

pub fn cross_singleton<O>( + self, + other: impl Into<Optional<O, L, Bounded>>, +) -> Stream<(T, O), L, B, Order>
where + O: Clone,

source

pub fn continue_if<U>( + self, + signal: Optional<U, L, Bounded>, +) -> Stream<T, L, B, Order>

Allow this stream through if the other stream has elements, otherwise the output is empty.

+
source

pub fn continue_unless<U>( + self, + other: Optional<U, L, Bounded>, +) -> Stream<T, L, B, Order>

Allow this stream through if the other stream is empty, otherwise the output is empty.

+
source

pub fn cross_product<O>( + self, + other: Stream<O, L, B, Order>, +) -> Stream<(T, O), L, B, Order>
where + T: Clone, + O: Clone,

source

pub fn unique(self) -> Stream<T, L, B, Order>
where + T: Eq + Hash,

source

pub fn filter_not_in<O2>( + self, + other: Stream<T, L, Bounded, O2>, +) -> Stream<T, L, Bounded, Order>
where + T: Eq + Hash,

source

pub fn inspect<F: Fn(&T) + 'a>( + self, + f: impl IntoQuotedMut<'a, F, L>, +) -> Stream<T, L, B, Order>

source

pub unsafe fn assume_ordering<O>(self) -> Stream<T, L, B, O>

Explicitly “casts” the stream to a type with a different ordering +guarantee. Useful in unsafe code where the ordering cannot be proven +by the type-system.

+
§Safety
+

This function is used as an escape hatch, and any mistakes in the +provided ordering guarantee will propogate into the guarantees +for the rest of the program.

+
source§

impl<'a, T, L: Location<'a>, B, Order> Stream<T, L, B, Order>
where + Order: MinOrder<NoOrder, Min = NoOrder>,

source

pub fn fold_commutative<A, I: Fn() -> A + 'a, F: Fn(&mut A, T)>( + self, + init: impl IntoQuotedMut<'a, I, L>, + comb: impl IntoQuotedMut<'a, F, L>, +) -> Singleton<A, L, B>

source

pub fn reduce_commutative<F: Fn(&mut T, T) + 'a>( + self, + comb: impl IntoQuotedMut<'a, F, L>, +) -> Optional<T, L, B>

source

pub fn max(self) -> Optional<T, L, B>
where + T: Ord,

source

pub fn max_by_key<K: Ord, F: Fn(&T) -> K + 'a>( + self, + key: impl IntoQuotedMut<'a, F, L> + Copy, +) -> Optional<T, L, B>

source

pub fn min(self) -> Optional<T, L, B>
where + T: Ord,

source

pub fn count(self) -> Singleton<usize, L, B>

source§

impl<'a, T, L: Location<'a>, B> Stream<T, L, B, TotalOrder>

source

pub fn enumerate(self) -> Stream<(usize, T), L, B, TotalOrder>

source

pub fn first(self) -> Optional<T, L, B>

source

pub fn last(self) -> Optional<T, L, B>

source

pub fn fold<A, I: Fn() -> A + 'a, F: Fn(&mut A, T)>( + self, + init: impl IntoQuotedMut<'a, I, L>, + comb: impl IntoQuotedMut<'a, F, L>, +) -> Singleton<A, L, B>

source

pub fn reduce<F: Fn(&mut T, T) + 'a>( + self, + comb: impl IntoQuotedMut<'a, F, L>, +) -> Optional<T, L, B>

source§

impl<'a, T, L: Location<'a>> Stream<T, L, Bounded, TotalOrder>

source

pub fn chain( + self, + other: Stream<T, L, Bounded, TotalOrder>, +) -> Stream<T, L, Bounded, TotalOrder>

source§

impl<'a, T, L: Location<'a> + NoTick + NoTimestamp> Stream<T, L, Unbounded, NoOrder>

source

pub fn union( + self, + other: Stream<T, L, Unbounded, NoOrder>, +) -> Stream<T, L, Unbounded, NoOrder>

source§

impl<'a, T, L: Location<'a>, Order> Stream<T, L, Bounded, Order>

source

pub fn sort(self) -> Stream<T, L, Bounded, TotalOrder>
where + T: Ord,

source

pub fn union<B2, O2>( + self, + other: Stream<T, L, B2, O2>, +) -> Stream<T, L, B2, Order::Min>
where + Order: MinOrder<O2>,

source§

impl<'a, K, V1, L: Location<'a>, B, Order> Stream<(K, V1), L, B, Order>

source

pub fn join<V2, O2>( + self, + n: Stream<(K, V2), L, B, O2>, +) -> Stream<(K, (V1, V2)), L, B, NoOrder>
where + K: Eq + Hash,

source

pub fn anti_join<O2>( + self, + n: Stream<K, L, Bounded, O2>, +) -> Stream<(K, V1), L, B, Order>
where + K: Eq + Hash,

source§

impl<'a, K: Eq + Hash, V, L: Location<'a>> Stream<(K, V), Tick<L>, Bounded>

source

pub fn fold_keyed<A, I: Fn() -> A + 'a, F: Fn(&mut A, V) + 'a>( + self, + init: impl IntoQuotedMut<'a, I, Tick<L>>, + comb: impl IntoQuotedMut<'a, F, Tick<L>>, +) -> Stream<(K, A), Tick<L>, Bounded>

source

pub fn reduce_keyed<F: Fn(&mut V, V) + 'a>( + self, + comb: impl IntoQuotedMut<'a, F, Tick<L>>, +) -> Stream<(K, V), Tick<L>, Bounded>

source§

impl<'a, K: Eq + Hash, V, L: Location<'a>, Order> Stream<(K, V), Tick<L>, Bounded, Order>

source

pub fn fold_keyed_commutative<A, I: Fn() -> A + 'a, F: Fn(&mut A, V) + 'a>( + self, + init: impl IntoQuotedMut<'a, I, Tick<L>>, + comb: impl IntoQuotedMut<'a, F, Tick<L>>, +) -> Stream<(K, A), Tick<L>, Bounded, Order>

source

pub fn keys(self) -> Stream<K, Tick<L>, Bounded, Order>

source

pub fn reduce_keyed_commutative<F: Fn(&mut V, V) + 'a>( + self, + comb: impl IntoQuotedMut<'a, F, Tick<L>>, +) -> Stream<(K, V), Tick<L>, Bounded, Order>

source§

impl<'a, T, L: Location<'a> + NoTick, B, Order> Stream<T, Timestamped<L>, B, Order>

source

pub unsafe fn tick_batch(self) -> Stream<T, Tick<L>, Bounded, Order>

Given a tick, returns a stream corresponding to a batch of elements for that tick. +These batches are guaranteed to be contiguous across ticks and preserve the order +of the input.

+
§Safety
+

The batch boundaries are non-deterministic and may change across executions.

+
source

pub fn drop_timestamp(self) -> Stream<T, L, B, Order>

source

pub fn timestamp_source(&self) -> Tick<L>

source§

impl<'a, T, L: Location<'a> + NoTick + NoTimestamp, B, Order> Stream<T, L, B, Order>

source

pub fn timestamped(self, tick: &Tick<L>) -> Stream<T, Timestamped<L>, B, Order>

source

pub unsafe fn sample_every( + self, + interval: impl QuotedWithContext<'a, Duration, L> + Copy + 'a, +) -> Stream<T, L, Unbounded, Order>

Given a time interval, returns a stream corresponding to samples taken from the +stream roughly at that interval. The output will have elements in the same order +as the input, but with arbitrary elements skipped between samples. There is also +no guarantee on the exact timing of the samples.

+
§Safety
+

The output stream is non-deterministic in which elements are sampled, since this +is controlled by a clock.

+
source

pub unsafe fn timeout( + self, + duration: impl QuotedWithContext<'a, Duration, Tick<L>> + Copy + 'a, +) -> Optional<(), L, Unbounded>
where + Order: MinOrder<NoOrder, Min = NoOrder>,

Given a timeout duration, returns an Optional which will have a value if the +stream has not emitted a value since that duration.

+
§Safety
+

Timeout relies on non-deterministic sampling of the stream, so depending on when +samples take place, timeouts may be non-deterministically generated or missed, +and the notification of the timeout may be delayed as well. There is also no +guarantee on how long the Optional will have a value after the timeout is +detected based on when the next sample is taken.

+
source§

impl<'a, T, L: Location<'a> + NoTick, B, Order> Stream<T, L, B, Order>

source

pub fn for_each<F: Fn(T) + 'a>(self, f: impl IntoQuotedMut<'a, F, L>)

source

pub fn dest_sink<S: Unpin + Sink<T> + 'a>( + self, + sink: impl QuotedWithContext<'a, S, L>, +)

source§

impl<'a, T, L: Location<'a>, Order> Stream<T, Tick<L>, Bounded, Order>

source

pub fn all_ticks(self) -> Stream<T, Timestamped<L>, Unbounded, Order>

source

pub fn persist(self) -> Stream<T, Tick<L>, Bounded, Order>
where + T: Clone,

source

pub fn defer_tick(self) -> Stream<T, Tick<L>, Bounded, Order>

source

pub fn delta(self) -> Stream<T, Tick<L>, Bounded, Order>

source§

impl<'a, T, C1, B, Order> Stream<T, Cluster<'a, C1>, B, Order>

source

pub fn decouple_cluster<C2: 'a, Tag>( + self, + other: &Cluster<'a, C2>, +) -> Stream<T, Cluster<'a, C2>, Unbounded, Order>
where + Cluster<'a, C1>: Location<'a, Root = Cluster<'a, C1>> + CanSend<'a, Cluster<'a, C2>, In<T> = (ClusterId<C2>, T), Out<T> = (Tag, T)>, + T: Clone + Serialize + DeserializeOwned, + Order: MinOrder<<Cluster<'a, C1> as CanSend<'a, Cluster<'a, C2>>>::OutStrongestOrder<Order>>,

source§

impl<'a, T, L: Location<'a> + NoTick, B, Order> Stream<T, L, B, Order>

source

pub fn decouple_process<P2>( + self, + other: &Process<'a, P2>, +) -> Stream<T, Process<'a, P2>, Unbounded, Order>
where + L::Root: CanSend<'a, Process<'a, P2>, In<T> = T, Out<T> = T>, + T: Clone + Serialize + DeserializeOwned, + Order: MinOrder<<L::Root as CanSend<'a, Process<'a, P2>>>::OutStrongestOrder<Order>, Min = Order>,

source

pub fn send_bincode<L2: Location<'a>, CoreType>( + self, + other: &L2, +) -> Stream<<L::Root as CanSend<'a, L2>>::Out<CoreType>, L2, Unbounded, Order::Min>
where + L::Root: CanSend<'a, L2, In<CoreType> = T>, + CoreType: Serialize + DeserializeOwned, + Order: MinOrder<<L::Root as CanSend<'a, L2>>::OutStrongestOrder<Order>>,

source

pub fn send_bincode_external<L2: 'a, CoreType>( + self, + other: &ExternalProcess<'_, L2>, +) -> ExternalBincodeStream<L::Out<CoreType>>
where + L: CanSend<'a, ExternalProcess<'a, L2>, In<CoreType> = T, Out<CoreType> = CoreType>, + CoreType: Serialize + DeserializeOwned,

source

pub fn send_bytes<L2: Location<'a>>( + self, + other: &L2, +) -> Stream<<L::Root as CanSend<'a, L2>>::Out<Bytes>, L2, Unbounded, Order::Min>
where + L::Root: CanSend<'a, L2, In<Bytes> = T>, + Order: MinOrder<<L::Root as CanSend<'a, L2>>::OutStrongestOrder<Order>>,

source

pub fn send_bytes_external<L2: 'a>( + self, + other: &ExternalProcess<'_, L2>, +) -> ExternalBytesPort
where + L::Root: CanSend<'a, ExternalProcess<'a, L2>, In<Bytes> = T, Out<Bytes> = Bytes>,

source

pub fn send_bincode_interleaved<L2: Location<'a>, Tag, CoreType>( + self, + other: &L2, +) -> Stream<CoreType, L2, Unbounded, Order::Min>
where + L::Root: CanSend<'a, L2, In<CoreType> = T, Out<CoreType> = (Tag, CoreType)>, + CoreType: Serialize + DeserializeOwned, + Order: MinOrder<<L::Root as CanSend<'a, L2>>::OutStrongestOrder<Order>>,

source

pub fn send_bytes_interleaved<L2: Location<'a>, Tag>( + self, + other: &L2, +) -> Stream<Bytes, L2, Unbounded, Order::Min>
where + L::Root: CanSend<'a, L2, In<Bytes> = T, Out<Bytes> = (Tag, Bytes)>, + Order: MinOrder<<L::Root as CanSend<'a, L2>>::OutStrongestOrder<Order>>,

source

pub fn broadcast_bincode<C2: 'a>( + self, + other: &Cluster<'a, C2>, +) -> Stream<<L::Root as CanSend<'a, Cluster<'a, C2>>>::Out<T>, Cluster<'a, C2>, Unbounded, Order::Min>
where + L::Root: CanSend<'a, Cluster<'a, C2>, In<T> = (ClusterId<C2>, T)>, + T: Clone + Serialize + DeserializeOwned, + Order: MinOrder<<L::Root as CanSend<'a, Cluster<'a, C2>>>::OutStrongestOrder<Order>>,

source

pub fn broadcast_bincode_interleaved<C2: 'a, Tag>( + self, + other: &Cluster<'a, C2>, +) -> Stream<T, Cluster<'a, C2>, Unbounded, Order::Min>
where + L::Root: CanSend<'a, Cluster<'a, C2>, In<T> = (ClusterId<C2>, T), Out<T> = (Tag, T)> + 'a, + T: Clone + Serialize + DeserializeOwned, + Order: MinOrder<<L::Root as CanSend<'a, Cluster<'a, C2>>>::OutStrongestOrder<Order>>,

source

pub fn broadcast_bytes<C2: 'a>( + self, + other: &Cluster<'a, C2>, +) -> Stream<<L::Root as CanSend<'a, Cluster<'a, C2>>>::Out<Bytes>, Cluster<'a, C2>, Unbounded, Order::Min>
where + L::Root: CanSend<'a, Cluster<'a, C2>, In<Bytes> = (ClusterId<C2>, T)> + 'a, + T: Clone, + Order: MinOrder<<L::Root as CanSend<'a, Cluster<'a, C2>>>::OutStrongestOrder<Order>>,

source

pub fn broadcast_bytes_interleaved<C2: 'a, Tag>( + self, + other: &Cluster<'a, C2>, +) -> Stream<Bytes, Cluster<'a, C2>, Unbounded, Order::Min>
where + L::Root: CanSend<'a, Cluster<'a, C2>, In<Bytes> = (ClusterId<C2>, T), Out<Bytes> = (Tag, Bytes)> + 'a, + T: Clone, + Order: MinOrder<<L::Root as CanSend<'a, Cluster<'a, C2>>>::OutStrongestOrder<Order>>,

source§

impl<'a, T, L: Location<'a> + NoTick, B> Stream<T, L, B, TotalOrder>

source

pub fn round_robin_bincode<C2: 'a>( + self, + other: &Cluster<'a, C2>, +) -> Stream<<L::Root as CanSend<'a, Cluster<'a, C2>>>::Out<T>, Cluster<'a, C2>, Unbounded, <TotalOrder as MinOrder<<L::Root as CanSend<'a, Cluster<'a, C2>>>::OutStrongestOrder<TotalOrder>>>::Min>
where + L::Root: CanSend<'a, Cluster<'a, C2>, In<T> = (ClusterId<C2>, T)>, + T: Clone + Serialize + DeserializeOwned, + TotalOrder: MinOrder<<L::Root as CanSend<'a, Cluster<'a, C2>>>::OutStrongestOrder<TotalOrder>>,

source

pub fn round_robin_bincode_interleaved<C2: 'a, Tag>( + self, + other: &Cluster<'a, C2>, +) -> Stream<T, Cluster<'a, C2>, Unbounded, <TotalOrder as MinOrder<<L::Root as CanSend<'a, Cluster<'a, C2>>>::OutStrongestOrder<TotalOrder>>>::Min>
where + L::Root: CanSend<'a, Cluster<'a, C2>, In<T> = (ClusterId<C2>, T), Out<T> = (Tag, T)> + 'a, + T: Clone + Serialize + DeserializeOwned, + TotalOrder: MinOrder<<L::Root as CanSend<'a, Cluster<'a, C2>>>::OutStrongestOrder<TotalOrder>>,

source

pub fn round_robin_bytes<C2: 'a>( + self, + other: &Cluster<'a, C2>, +) -> Stream<<L::Root as CanSend<'a, Cluster<'a, C2>>>::Out<Bytes>, Cluster<'a, C2>, Unbounded, <TotalOrder as MinOrder<<L::Root as CanSend<'a, Cluster<'a, C2>>>::OutStrongestOrder<TotalOrder>>>::Min>
where + L::Root: CanSend<'a, Cluster<'a, C2>, In<Bytes> = (ClusterId<C2>, T)> + 'a, + T: Clone, + TotalOrder: MinOrder<<L::Root as CanSend<'a, Cluster<'a, C2>>>::OutStrongestOrder<TotalOrder>>,

source

pub fn round_robin_bytes_interleaved<C2: 'a, Tag>( + self, + other: &Cluster<'a, C2>, +) -> Stream<Bytes, Cluster<'a, C2>, Unbounded, <TotalOrder as MinOrder<<L::Root as CanSend<'a, Cluster<'a, C2>>>::OutStrongestOrder<TotalOrder>>>::Min>
where + L::Root: CanSend<'a, Cluster<'a, C2>, In<Bytes> = (ClusterId<C2>, T), Out<Bytes> = (Tag, Bytes)> + 'a, + T: Clone, + TotalOrder: MinOrder<<L::Root as CanSend<'a, Cluster<'a, C2>>>::OutStrongestOrder<TotalOrder>>,

Trait Implementations§

source§

impl<'a, T: Clone, L: Location<'a>, B, Order> Clone for Stream<T, L, B, Order>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a, T, L: Location<'a> + NoTick, B, Order> CycleCollection<'a, ForwardRefMarker> for Stream<T, L, B, Order>

source§

type Location = L

source§

fn create_source(ident: Ident, location: L) -> Self

source§

impl<'a, T, L: Location<'a>, Order> CycleCollection<'a, TickCycleMarker> for Stream<T, Tick<L>, Bounded, Order>

source§

type Location = Tick<L>

source§

fn create_source(ident: Ident, location: Tick<L>) -> Self

source§

impl<'a, T, L: Location<'a> + NoTick, B, Order> CycleComplete<'a, ForwardRefMarker> for Stream<T, L, B, Order>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

source§

impl<'a, T, L: Location<'a>, Order> CycleComplete<'a, TickCycleMarker> for Stream<T, Tick<L>, Bounded, Order>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

source§

impl<'a, T, L: Location<'a>, Order> DeferTick for Stream<T, Tick<L>, Bounded, Order>

source§

fn defer_tick(self) -> Self

source§

impl<'a, T, L: Location<'a>, B> From<Stream<T, L, B>> for Stream<T, L, B, NoOrder>

source§

fn from(stream: Stream<T, L, B, TotalOrder>) -> Stream<T, L, B, NoOrder>

Converts to this type from the input type.

Auto Trait Implementations§

§

impl<T, L, B, Order = TotalOrder> !Freeze for Stream<T, L, B, Order>

§

impl<T, L, B, Order = TotalOrder> !RefUnwindSafe for Stream<T, L, B, Order>

§

impl<T, L, B, Order = TotalOrder> !Send for Stream<T, L, B, Order>

§

impl<T, L, B, Order = TotalOrder> !Sync for Stream<T, L, B, Order>

§

impl<T, L, B, Order> Unpin for Stream<T, L, B, Order>
where + L: Unpin, + T: Unpin, + B: Unpin, + Order: Unpin,

§

impl<T, L, B, Order = TotalOrder> !UnwindSafe for Stream<T, L, B, Order>

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where + T: Clone,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where + T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/doc/hydroflow_plus/stream/struct.TotalOrder.html b/doc/hydro_lang/stream/struct.TotalOrder.html similarity index 67% rename from doc/hydroflow_plus/stream/struct.TotalOrder.html rename to doc/hydro_lang/stream/struct.TotalOrder.html index 64f50b30aace..6486ab8ab9a8 100644 --- a/doc/hydroflow_plus/stream/struct.TotalOrder.html +++ b/doc/hydro_lang/stream/struct.TotalOrder.html @@ -1,7 +1,7 @@ -TotalOrder in hydroflow_plus::stream - Rust

Struct hydroflow_plus::stream::TotalOrder

source ·
pub struct TotalOrder {}
Expand description

Marks the stream as being totally ordered, which means that there are +TotalOrder in hydro_lang::stream - Rust

Struct hydro_lang::stream::TotalOrder

source ·
pub struct TotalOrder {}
Expand description

Marks the stream as being totally ordered, which means that there are no sources of non-determinism (other than intentional ones) that will affect the order of elements.

-

Trait Implementations§

source§

impl MinOrder<NoOrder> for TotalOrder

source§

type Min = NoOrder

The weaker of the two orderings.
source§

impl MinOrder<TotalOrder> for NoOrder

source§

type Min = NoOrder

The weaker of the two orderings.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +

Trait Implementations§

source§

impl MinOrder<NoOrder> for TotalOrder

source§

type Min = NoOrder

The weaker of the two orderings.
source§

impl MinOrder<TotalOrder> for NoOrder

source§

type Min = NoOrder

The weaker of the two orderings.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

@@ -18,7 +18,7 @@ F: FnOnce(&Self) -> bool,
Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where +otherwise. Read more

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a diff --git a/doc/hydro_lang/stream/trait.MinOrder.html b/doc/hydro_lang/stream/trait.MinOrder.html new file mode 100644 index 000000000000..2a747da9d962 --- /dev/null +++ b/doc/hydro_lang/stream/trait.MinOrder.html @@ -0,0 +1,5 @@ +MinOrder in hydro_lang::stream - Rust

Trait hydro_lang::stream::MinOrder

source ·
pub trait MinOrder<Other>: Sealed<Other> {
+    type Min;
+}
Expand description

Helper trait for determining the weakest of two orderings.

+

Required Associated Types§

source

type Min

The weaker of the two orderings.

+

Implementors§

\ No newline at end of file diff --git a/doc/hydro_std/all.html b/doc/hydro_std/all.html new file mode 100644 index 000000000000..6c9541c97f36 --- /dev/null +++ b/doc/hydro_std/all.html @@ -0,0 +1 @@ +List of all items in this crate
\ No newline at end of file diff --git a/doc/hydro_std/index.html b/doc/hydro_std/index.html new file mode 100644 index 000000000000..9eb3d9cb3daa --- /dev/null +++ b/doc/hydro_std/index.html @@ -0,0 +1 @@ +hydro_std - Rust

Crate hydro_std

source ·

Modules§

\ No newline at end of file diff --git a/doc/hydro_std/quorum/fn.collect_quorum.html b/doc/hydro_std/quorum/fn.collect_quorum.html new file mode 100644 index 000000000000..2699f9dddf75 --- /dev/null +++ b/doc/hydro_std/quorum/fn.collect_quorum.html @@ -0,0 +1,5 @@ +collect_quorum in hydro_std::quorum - Rust

Function hydro_std::quorum::collect_quorum

source ·
pub fn collect_quorum<'a, L: Location<'a> + NoTick, Order, K: Clone + Eq + Hash, E: Clone>(
+    responses: Stream<(K, Result<(), E>), Timestamped<L>, Unbounded, Order>,
+    min: usize,
+    max: usize,
+) -> (Stream<K, Timestamped<L>, Unbounded, Order>, Stream<(K, E), Timestamped<L>, Unbounded, Order>)
\ No newline at end of file diff --git a/doc/hydro_std/quorum/fn.collect_quorum_with_response.html b/doc/hydro_std/quorum/fn.collect_quorum_with_response.html new file mode 100644 index 000000000000..93d86f4055ea --- /dev/null +++ b/doc/hydro_std/quorum/fn.collect_quorum_with_response.html @@ -0,0 +1,5 @@ +collect_quorum_with_response in hydro_std::quorum - Rust

Function hydro_std::quorum::collect_quorum_with_response

source ·
pub fn collect_quorum_with_response<'a, L: Location<'a> + NoTick, Order, K: Clone + Eq + Hash, V: Clone, E: Clone>(
+    responses: Stream<(K, Result<V, E>), Timestamped<L>, Unbounded, Order>,
+    min: usize,
+    max: usize,
+) -> (Stream<(K, V), Timestamped<L>, Unbounded, Order>, Stream<(K, E), Timestamped<L>, Unbounded, Order>)
\ No newline at end of file diff --git a/doc/hydro_std/quorum/index.html b/doc/hydro_std/quorum/index.html new file mode 100644 index 000000000000..817c15e1357a --- /dev/null +++ b/doc/hydro_std/quorum/index.html @@ -0,0 +1 @@ +hydro_std::quorum - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus_std/quorum/sidebar-items.js b/doc/hydro_std/quorum/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus_std/quorum/sidebar-items.js rename to doc/hydro_std/quorum/sidebar-items.js diff --git a/doc/hydro_std/request_response/fn.join_responses.html b/doc/hydro_std/request_response/fn.join_responses.html new file mode 100644 index 000000000000..dc1ae82dbc3a --- /dev/null +++ b/doc/hydro_std/request_response/fn.join_responses.html @@ -0,0 +1,10 @@ +join_responses in hydro_std::request_response - Rust

Function hydro_std::request_response::join_responses

source ·
pub fn join_responses<'a, K: Clone + Eq + Hash, M: Clone, V: Clone, L: Location<'a> + NoTick>(
+    tick: &Tick<L>,
+    responses: Stream<(K, V), Timestamped<L>, Unbounded, NoOrder>,
+    metadata: Stream<(K, M), Tick<L>, Bounded, NoOrder>,
+) -> Stream<(K, (M, V)), Timestamped<L>, Unbounded, NoOrder>
Expand description

Given an incoming stream of request-response responses, joins with metadata generated +at request time that is stored in-memory.

+

The metadata must be generated in the same or a previous tick than the response, +typically at request time. Only one response element should be produced with a given +key, same for the metadata stream.

+
\ No newline at end of file diff --git a/doc/hydro_std/request_response/index.html b/doc/hydro_std/request_response/index.html new file mode 100644 index 000000000000..44f8a210a345 --- /dev/null +++ b/doc/hydro_std/request_response/index.html @@ -0,0 +1,2 @@ +hydro_std::request_response - Rust

Module hydro_std::request_response

source ·

Functions§

  • Given an incoming stream of request-response responses, joins with metadata generated +at request time that is stored in-memory.
\ No newline at end of file diff --git a/doc/hydroflow_plus_std/request_response/sidebar-items.js b/doc/hydro_std/request_response/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus_std/request_response/sidebar-items.js rename to doc/hydro_std/request_response/sidebar-items.js diff --git a/doc/hydroflow_plus_std/sidebar-items.js b/doc/hydro_std/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus_std/sidebar-items.js rename to doc/hydro_std/sidebar-items.js diff --git a/doc/hydro_test/all.html b/doc/hydro_test/all.html new file mode 100644 index 000000000000..981d90a431e1 --- /dev/null +++ b/doc/hydro_test/all.html @@ -0,0 +1 @@ +List of all items in this crate
\ No newline at end of file diff --git a/doc/hydro_test/cluster/compute_pi/fn.compute_pi.html b/doc/hydro_test/cluster/compute_pi/fn.compute_pi.html new file mode 100644 index 000000000000..b80706ea225a --- /dev/null +++ b/doc/hydro_test/cluster/compute_pi/fn.compute_pi.html @@ -0,0 +1,4 @@ +compute_pi in hydro_test::cluster::compute_pi - Rust

Function hydro_test::cluster::compute_pi::compute_pi

source ·
pub fn compute_pi<'a>(
+    flow: &FlowBuilder<'a>,
+    batch_size: usize,
+) -> (Cluster<'a, Worker>, Process<'a, Leader>)
\ No newline at end of file diff --git a/doc/hydro_test/cluster/compute_pi/index.html b/doc/hydro_test/cluster/compute_pi/index.html new file mode 100644 index 000000000000..ebd84f158591 --- /dev/null +++ b/doc/hydro_test/cluster/compute_pi/index.html @@ -0,0 +1 @@ +hydro_test::cluster::compute_pi - Rust

Module hydro_test::cluster::compute_pi

source ·

Structs§

Functions§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/compute_pi/sidebar-items.js b/doc/hydro_test/cluster/compute_pi/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus_test/cluster/compute_pi/sidebar-items.js rename to doc/hydro_test/cluster/compute_pi/sidebar-items.js diff --git a/doc/hydroflow_plus_test/cluster/compute_pi/struct.Leader.html b/doc/hydro_test/cluster/compute_pi/struct.Leader.html similarity index 72% rename from doc/hydroflow_plus_test/cluster/compute_pi/struct.Leader.html rename to doc/hydro_test/cluster/compute_pi/struct.Leader.html index eccead5e404c..1c59c2d4a859 100644 --- a/doc/hydroflow_plus_test/cluster/compute_pi/struct.Leader.html +++ b/doc/hydro_test/cluster/compute_pi/struct.Leader.html @@ -1,4 +1,4 @@ -Leader in hydroflow_plus_test::cluster::compute_pi - Rust

Struct hydroflow_plus_test::cluster::compute_pi::Leader

source ·
pub struct Leader {}

Auto Trait Implementations§

§

impl Freeze for Leader

§

impl RefUnwindSafe for Leader

§

impl Send for Leader

§

impl Sync for Leader

§

impl Unpin for Leader

§

impl UnwindSafe for Leader

Blanket Implementations§

source§

impl<T> Any for T
where +Leader in hydro_test::cluster::compute_pi - Rust

Struct hydro_test::cluster::compute_pi::Leader

source ·
pub struct Leader {}

Auto Trait Implementations§

§

impl Freeze for Leader

§

impl RefUnwindSafe for Leader

§

impl Send for Leader

§

impl Sync for Leader

§

impl Unpin for Leader

§

impl UnwindSafe for Leader

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/doc/hydroflow_plus_test/cluster/compute_pi/struct.Worker.html b/doc/hydro_test/cluster/compute_pi/struct.Worker.html similarity index 72% rename from doc/hydroflow_plus_test/cluster/compute_pi/struct.Worker.html rename to doc/hydro_test/cluster/compute_pi/struct.Worker.html index 3e8fe5c14c2c..6946a4ce8356 100644 --- a/doc/hydroflow_plus_test/cluster/compute_pi/struct.Worker.html +++ b/doc/hydro_test/cluster/compute_pi/struct.Worker.html @@ -1,4 +1,4 @@ -Worker in hydroflow_plus_test::cluster::compute_pi - Rust

Struct hydroflow_plus_test::cluster::compute_pi::Worker

source ·
pub struct Worker {}

Auto Trait Implementations§

§

impl Freeze for Worker

§

impl RefUnwindSafe for Worker

§

impl Send for Worker

§

impl Sync for Worker

§

impl Unpin for Worker

§

impl UnwindSafe for Worker

Blanket Implementations§

source§

impl<T> Any for T
where +Worker in hydro_test::cluster::compute_pi - Rust

Struct hydro_test::cluster::compute_pi::Worker

source ·
pub struct Worker {}

Auto Trait Implementations§

§

impl Freeze for Worker

§

impl RefUnwindSafe for Worker

§

impl Send for Worker

§

impl Sync for Worker

§

impl Unpin for Worker

§

impl UnwindSafe for Worker

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/doc/hydro_test/cluster/index.html b/doc/hydro_test/cluster/index.html new file mode 100644 index 000000000000..913f10d20f88 --- /dev/null +++ b/doc/hydro_test/cluster/index.html @@ -0,0 +1 @@ +hydro_test::cluster - Rust
\ No newline at end of file diff --git a/doc/hydro_test/cluster/many_to_many/fn.many_to_many.html b/doc/hydro_test/cluster/many_to_many/fn.many_to_many.html new file mode 100644 index 000000000000..2aae4449d8ac --- /dev/null +++ b/doc/hydro_test/cluster/many_to_many/fn.many_to_many.html @@ -0,0 +1 @@ +many_to_many in hydro_test::cluster::many_to_many - Rust

Function hydro_test::cluster::many_to_many::many_to_many

source ·
pub fn many_to_many<'a>(flow: &FlowBuilder<'a>) -> Cluster<'a, ()>
\ No newline at end of file diff --git a/doc/hydro_test/cluster/many_to_many/index.html b/doc/hydro_test/cluster/many_to_many/index.html new file mode 100644 index 000000000000..51495dac932c --- /dev/null +++ b/doc/hydro_test/cluster/many_to_many/index.html @@ -0,0 +1 @@ +hydro_test::cluster::many_to_many - Rust

Module hydro_test::cluster::many_to_many

source ·

Functions§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/many_to_many/sidebar-items.js b/doc/hydro_test/cluster/many_to_many/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus_test/cluster/many_to_many/sidebar-items.js rename to doc/hydro_test/cluster/many_to_many/sidebar-items.js diff --git a/doc/hydro_test/cluster/map_reduce/fn.map_reduce.html b/doc/hydro_test/cluster/map_reduce/fn.map_reduce.html new file mode 100644 index 000000000000..020c15ba5d9f --- /dev/null +++ b/doc/hydro_test/cluster/map_reduce/fn.map_reduce.html @@ -0,0 +1,3 @@ +map_reduce in hydro_test::cluster::map_reduce - Rust

Function hydro_test::cluster::map_reduce::map_reduce

source ·
pub fn map_reduce<'a>(
+    flow: &FlowBuilder<'a>,
+) -> (Process<'a, Leader>, Cluster<'a, Worker>)
\ No newline at end of file diff --git a/doc/hydro_test/cluster/map_reduce/index.html b/doc/hydro_test/cluster/map_reduce/index.html new file mode 100644 index 000000000000..4b81cff4bb6e --- /dev/null +++ b/doc/hydro_test/cluster/map_reduce/index.html @@ -0,0 +1 @@ +hydro_test::cluster::map_reduce - Rust

Module hydro_test::cluster::map_reduce

source ·

Structs§

Functions§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/map_reduce/sidebar-items.js b/doc/hydro_test/cluster/map_reduce/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus_test/cluster/map_reduce/sidebar-items.js rename to doc/hydro_test/cluster/map_reduce/sidebar-items.js diff --git a/doc/hydro_test/cluster/map_reduce/struct.Leader.html b/doc/hydro_test/cluster/map_reduce/struct.Leader.html new file mode 100644 index 000000000000..d630b47191b7 --- /dev/null +++ b/doc/hydro_test/cluster/map_reduce/struct.Leader.html @@ -0,0 +1,24 @@ +Leader in hydro_test::cluster::map_reduce - Rust

Struct hydro_test::cluster::map_reduce::Leader

source ·
pub struct Leader {}

Auto Trait Implementations§

§

impl Freeze for Leader

§

impl RefUnwindSafe for Leader

§

impl Send for Leader

§

impl Sync for Leader

§

impl Unpin for Leader

§

impl UnwindSafe for Leader

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an +Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an +Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> +if into_left is true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where + F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> +if into_left(&self) returns true. +Converts self into a Right variant of Either<Self, Self> +otherwise. Read more
§

impl<T> MinOrder<T> for T

§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where + S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a +[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/map_reduce/struct.Worker.html b/doc/hydro_test/cluster/map_reduce/struct.Worker.html similarity index 72% rename from doc/hydroflow_plus_test/cluster/map_reduce/struct.Worker.html rename to doc/hydro_test/cluster/map_reduce/struct.Worker.html index d5c0ef1e69d2..d02cb23ec562 100644 --- a/doc/hydroflow_plus_test/cluster/map_reduce/struct.Worker.html +++ b/doc/hydro_test/cluster/map_reduce/struct.Worker.html @@ -1,4 +1,4 @@ -Worker in hydroflow_plus_test::cluster::map_reduce - Rust

Struct hydroflow_plus_test::cluster::map_reduce::Worker

source ·
pub struct Worker {}

Auto Trait Implementations§

§

impl Freeze for Worker

§

impl RefUnwindSafe for Worker

§

impl Send for Worker

§

impl Sync for Worker

§

impl Unpin for Worker

§

impl UnwindSafe for Worker

Blanket Implementations§

source§

impl<T> Any for T
where +Worker in hydro_test::cluster::map_reduce - Rust

Struct hydro_test::cluster::map_reduce::Worker

source ·
pub struct Worker {}

Auto Trait Implementations§

§

impl Freeze for Worker

§

impl RefUnwindSafe for Worker

§

impl Send for Worker

§

impl Sync for Worker

§

impl Unpin for Worker

§

impl UnwindSafe for Worker

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/doc/hydro_test/cluster/paxos/fn.paxos_core.html b/doc/hydro_test/cluster/paxos/fn.paxos_core.html new file mode 100644 index 000000000000..b5dde09e8a10 --- /dev/null +++ b/doc/hydro_test/cluster/paxos/fn.paxos_core.html @@ -0,0 +1,23 @@ +paxos_core in hydro_test::cluster::paxos - Rust

Function hydro_test::cluster::paxos::paxos_core

source ·
pub unsafe fn paxos_core<'a, P: PaxosPayload, R>(
+    proposers: &Cluster<'a, Proposer>,
+    acceptors: &Cluster<'a, Acceptor>,
+    r_to_acceptors_checkpoint: Stream<(ClusterId<R>, usize), Cluster<'a, Acceptor>, Unbounded, NoOrder>,
+    c_to_proposers: Stream<P, Cluster<'a, Proposer>, Unbounded>,
+    f: usize,
+    i_am_leader_send_timeout: u64,
+    i_am_leader_check_timeout: u64,
+    i_am_leader_check_timeout_delay_multiplier: usize,
+) -> (Stream<Ballot, Cluster<'a, Proposer>, Unbounded>, Stream<(usize, Option<P>), Cluster<'a, Proposer>, Unbounded, NoOrder>)
Expand description

Implements the core Paxos algorithm, which uses a cluster of propsers and acceptors +to sequence payloads being sent to the proposers.

+

Proposers that currently are the leader will work with acceptors to sequence incoming +payloads, but may drop payloads if they are not the lader or lose leadership during +the commit process.

+

Returns a stream of ballots, where new values are emitted when a new leader is elected, +and a stream of sequenced payloads with an index and optional payload (in the case of +holes in the log).

+

§Safety

+

When the leader is stable, the algorithm will commit incoming payloads to the leader +in deterministic order. However, when the leader is changing, payloads may be +non-deterministically dropped. The stream of ballots is also non-deterministic because +leaders are elected in a non-deterministic process.

+
\ No newline at end of file diff --git a/doc/hydro_test/cluster/paxos/index.html b/doc/hydro_test/cluster/paxos/index.html new file mode 100644 index 000000000000..0b84b2b2654c --- /dev/null +++ b/doc/hydro_test/cluster/paxos/index.html @@ -0,0 +1,2 @@ +hydro_test::cluster::paxos - Rust

Module hydro_test::cluster::paxos

source ·

Structs§

Traits§

Functions§

  • Implements the core Paxos algorithm, which uses a cluster of propsers and acceptors +to sequence payloads being sent to the proposers.
\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/paxos/sidebar-items.js b/doc/hydro_test/cluster/paxos/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus_test/cluster/paxos/sidebar-items.js rename to doc/hydro_test/cluster/paxos/sidebar-items.js diff --git a/doc/hydroflow_plus_test/cluster/paxos/struct.Acceptor.html b/doc/hydro_test/cluster/paxos/struct.Acceptor.html similarity index 72% rename from doc/hydroflow_plus_test/cluster/paxos/struct.Acceptor.html rename to doc/hydro_test/cluster/paxos/struct.Acceptor.html index 8b0a6a5594cd..c8ba130f1802 100644 --- a/doc/hydroflow_plus_test/cluster/paxos/struct.Acceptor.html +++ b/doc/hydro_test/cluster/paxos/struct.Acceptor.html @@ -1,4 +1,4 @@ -Acceptor in hydroflow_plus_test::cluster::paxos - Rust

Struct hydroflow_plus_test::cluster::paxos::Acceptor

source ·
pub struct Acceptor {}

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +Acceptor in hydro_test::cluster::paxos - Rust

Struct hydro_test::cluster::paxos::Acceptor

source ·
pub struct Acceptor {}

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/doc/hydroflow_plus_test/cluster/paxos/struct.Ballot.html b/doc/hydro_test/cluster/paxos/struct.Ballot.html similarity index 60% rename from doc/hydroflow_plus_test/cluster/paxos/struct.Ballot.html rename to doc/hydro_test/cluster/paxos/struct.Ballot.html index f25f91dc8ae1..284fe544922f 100644 --- a/doc/hydroflow_plus_test/cluster/paxos/struct.Ballot.html +++ b/doc/hydro_test/cluster/paxos/struct.Ballot.html @@ -1,18 +1,18 @@ -Ballot in hydroflow_plus_test::cluster::paxos - Rust

Struct hydroflow_plus_test::cluster::paxos::Ballot

source ·
pub struct Ballot {
+Ballot in hydro_test::cluster::paxos - Rust

Struct hydro_test::cluster::paxos::Ballot

source ·
pub struct Ballot {
     pub num: u32,
-    pub proposer_id: ClusterId<Proposer>,
-}

Fields§

§num: u32§proposer_id: ClusterId<Proposer>

Trait Implementations§

source§

impl Clone for Ballot

source§

fn clone(&self) -> Ballot

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Ballot

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Ballot

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Hash for Ballot

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where + pub proposer_id: ClusterId<Proposer>, +}

Fields§

§num: u32§proposer_id: ClusterId<Proposer>

Trait Implementations§

source§

impl Clone for Ballot

source§

fn clone(&self) -> Ballot

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Ballot

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for Ballot

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Hash for Ballot

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for Ballot

source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for Ballot

source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for Ballot

source§

fn eq(&self, other: &Ballot) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
source§

impl PartialOrd for Ballot

source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the + Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for Ballot

source§

fn eq(&self, other: &Ballot) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
source§

impl PartialOrd for Ballot

source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by -the >= operator. Read more
source§

impl Serialize for Ballot

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for Ballot

source§

impl Eq for Ballot

source§

impl StructuralPartialEq for Ballot

Auto Trait Implementations§

§

impl Freeze for Ballot

§

impl RefUnwindSafe for Ballot

§

impl Send for Ballot

§

impl Sync for Ballot

§

impl Unpin for Ballot

§

impl UnwindSafe for Ballot

Blanket Implementations§

source§

impl<T> Any for T
where +the >= operator. Read more

source§

impl Serialize for Ballot

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for Ballot

source§

impl Eq for Ballot

source§

impl StructuralPartialEq for Ballot

Auto Trait Implementations§

§

impl Freeze for Ballot

§

impl RefUnwindSafe for Ballot

§

impl Send for Ballot

§

impl Sync for Ballot

§

impl Unpin for Ballot

§

impl UnwindSafe for Ballot

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where @@ -46,7 +46,7 @@ S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more

source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

source§

impl<K> KvKey for K

source§

impl<V> KvValue for V

source§

impl<T> PaxosPayload for T
where + T: for<'de> Deserialize<'de>,

source§

impl<K> KvKey for K

source§

impl<V> KvValue for V

source§

impl<T> PaxosPayload for T

\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/paxos/struct.Proposer.html b/doc/hydro_test/cluster/paxos/struct.Proposer.html similarity index 72% rename from doc/hydroflow_plus_test/cluster/paxos/struct.Proposer.html rename to doc/hydro_test/cluster/paxos/struct.Proposer.html index d383630e74e0..cb932478bda8 100644 --- a/doc/hydroflow_plus_test/cluster/paxos/struct.Proposer.html +++ b/doc/hydro_test/cluster/paxos/struct.Proposer.html @@ -1,4 +1,4 @@ -Proposer in hydroflow_plus_test::cluster::paxos - Rust

Struct hydroflow_plus_test::cluster::paxos::Proposer

source ·
pub struct Proposer {}

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +Proposer in hydro_test::cluster::paxos - Rust

Struct hydro_test::cluster::paxos::Proposer

source ·
pub struct Proposer {}

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/doc/hydro_test/cluster/paxos/trait.PaxosPayload.html b/doc/hydro_test/cluster/paxos/trait.PaxosPayload.html new file mode 100644 index 000000000000..a62fb7ec188f --- /dev/null +++ b/doc/hydro_test/cluster/paxos/trait.PaxosPayload.html @@ -0,0 +1,7 @@ +PaxosPayload in hydro_test::cluster::paxos - Rust

Trait hydro_test::cluster::paxos::PaxosPayload

source ·
pub trait PaxosPayload:
+    Serialize
+    + DeserializeOwned
+    + PartialEq
+    + Eq
+    + Clone
+    + Debug { }

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/doc/hydro_test/cluster/paxos_bench/fn.paxos_bench.html b/doc/hydro_test/cluster/paxos_bench/fn.paxos_bench.html new file mode 100644 index 000000000000..6926d1b207ef --- /dev/null +++ b/doc/hydro_test/cluster/paxos_bench/fn.paxos_bench.html @@ -0,0 +1,10 @@ +paxos_bench in hydro_test::cluster::paxos_bench - Rust

Function hydro_test::cluster::paxos_bench::paxos_bench

source ·
pub fn paxos_bench<'a>(
+    flow: &FlowBuilder<'a>,
+    f: usize,
+    num_clients_per_node: usize,
+    median_latency_window_size: usize,
+    checkpoint_frequency: usize,
+    i_am_leader_send_timeout: u64,
+    i_am_leader_check_timeout: u64,
+    i_am_leader_check_timeout_delay_multiplier: usize,
+) -> (Cluster<'a, Proposer>, Cluster<'a, Acceptor>, Cluster<'a, Client>, Cluster<'a, Replica>)
\ No newline at end of file diff --git a/doc/hydro_test/cluster/paxos_bench/index.html b/doc/hydro_test/cluster/paxos_bench/index.html new file mode 100644 index 000000000000..b756d59047f5 --- /dev/null +++ b/doc/hydro_test/cluster/paxos_bench/index.html @@ -0,0 +1 @@ +hydro_test::cluster::paxos_bench - Rust

Module hydro_test::cluster::paxos_bench

source ·

Structs§

Functions§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/paxos_bench/sidebar-items.js b/doc/hydro_test/cluster/paxos_bench/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus_test/cluster/paxos_bench/sidebar-items.js rename to doc/hydro_test/cluster/paxos_bench/sidebar-items.js diff --git a/doc/hydroflow_plus_test/cluster/paxos_bench/struct.Client.html b/doc/hydro_test/cluster/paxos_bench/struct.Client.html similarity index 72% rename from doc/hydroflow_plus_test/cluster/paxos_bench/struct.Client.html rename to doc/hydro_test/cluster/paxos_bench/struct.Client.html index 01039f705e7d..96fa600f64c8 100644 --- a/doc/hydroflow_plus_test/cluster/paxos_bench/struct.Client.html +++ b/doc/hydro_test/cluster/paxos_bench/struct.Client.html @@ -1,4 +1,4 @@ -Client in hydroflow_plus_test::cluster::paxos_bench - Rust

Struct hydroflow_plus_test::cluster::paxos_bench::Client

source ·
pub struct Client {}

Auto Trait Implementations§

§

impl Freeze for Client

§

impl RefUnwindSafe for Client

§

impl Send for Client

§

impl Sync for Client

§

impl Unpin for Client

§

impl UnwindSafe for Client

Blanket Implementations§

source§

impl<T> Any for T
where +Client in hydro_test::cluster::paxos_bench - Rust

Struct hydro_test::cluster::paxos_bench::Client

source ·
pub struct Client {}

Auto Trait Implementations§

§

impl Freeze for Client

§

impl RefUnwindSafe for Client

§

impl Send for Client

§

impl Sync for Client

§

impl Unpin for Client

§

impl UnwindSafe for Client

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/doc/hydro_test/cluster/paxos_kv/fn.paxos_kv.html b/doc/hydro_test/cluster/paxos_kv/fn.paxos_kv.html new file mode 100644 index 000000000000..2cdc3ddae11b --- /dev/null +++ b/doc/hydro_test/cluster/paxos_kv/fn.paxos_kv.html @@ -0,0 +1,15 @@ +paxos_kv in hydro_test::cluster::paxos_kv - Rust

Function hydro_test::cluster::paxos_kv::paxos_kv

source ·
pub unsafe fn paxos_kv<'a, K: KvKey, V: KvValue>(
+    proposers: &Cluster<'a, Proposer>,
+    acceptors: &Cluster<'a, Acceptor>,
+    replicas: &Cluster<'a, Replica>,
+    c_to_proposers: Stream<KvPayload<K, V>, Cluster<'a, Proposer>, Unbounded>,
+    f: usize,
+    i_am_leader_send_timeout: u64,
+    i_am_leader_check_timeout: u64,
+    i_am_leader_check_timeout_delay_multiplier: usize,
+    checkpoint_frequency: usize,
+) -> (Stream<Ballot, Cluster<'a, Proposer>, Unbounded>, Stream<KvPayload<K, V>, Cluster<'a, Replica>, Unbounded>)
Expand description

Sets up a linearizable key-value store using Paxos.

+

§Safety

+

Notifications for leader election are non-deterministic. When the leader is changing, +writes may be dropped by the old leader.

+
\ No newline at end of file diff --git a/doc/hydro_test/cluster/paxos_kv/fn.replica.html b/doc/hydro_test/cluster/paxos_kv/fn.replica.html new file mode 100644 index 000000000000..231d34087754 --- /dev/null +++ b/doc/hydro_test/cluster/paxos_kv/fn.replica.html @@ -0,0 +1,5 @@ +replica in hydro_test::cluster::paxos_kv - Rust

Function hydro_test::cluster::paxos_kv::replica

source ·
pub fn replica<'a, K: KvKey, V: KvValue>(
+    replicas: &Cluster<'a, Replica>,
+    p_to_replicas: Stream<SequencedKv<K, V>, Cluster<'a, Replica>, Unbounded, NoOrder>,
+    checkpoint_frequency: usize,
+) -> (Stream<usize, Cluster<'a, Replica>, Unbounded>, Stream<KvPayload<K, V>, Cluster<'a, Replica>, Unbounded>)
\ No newline at end of file diff --git a/doc/hydro_test/cluster/paxos_kv/index.html b/doc/hydro_test/cluster/paxos_kv/index.html new file mode 100644 index 000000000000..0e843b670d49 --- /dev/null +++ b/doc/hydro_test/cluster/paxos_kv/index.html @@ -0,0 +1 @@ +hydro_test::cluster::paxos_kv - Rust

Module hydro_test::cluster::paxos_kv

source ·

Structs§

Traits§

Functions§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/paxos_kv/sidebar-items.js b/doc/hydro_test/cluster/paxos_kv/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus_test/cluster/paxos_kv/sidebar-items.js rename to doc/hydro_test/cluster/paxos_kv/sidebar-items.js diff --git a/doc/hydroflow_plus_test/cluster/paxos_kv/struct.KvPayload.html b/doc/hydro_test/cluster/paxos_kv/struct.KvPayload.html similarity index 68% rename from doc/hydroflow_plus_test/cluster/paxos_kv/struct.KvPayload.html rename to doc/hydro_test/cluster/paxos_kv/struct.KvPayload.html index 5e5b5c65ad0f..334e7ab50279 100644 --- a/doc/hydroflow_plus_test/cluster/paxos_kv/struct.KvPayload.html +++ b/doc/hydro_test/cluster/paxos_kv/struct.KvPayload.html @@ -1,24 +1,24 @@ -KvPayload in hydroflow_plus_test::cluster::paxos_kv - Rust

Struct hydroflow_plus_test::cluster::paxos_kv::KvPayload

source ·
pub struct KvPayload<K, V> {
+KvPayload in hydro_test::cluster::paxos_kv - Rust

Struct hydro_test::cluster::paxos_kv::KvPayload

source ·
pub struct KvPayload<K, V> {
     pub key: K,
     pub value: V,
-}

Fields§

§key: K§value: V

Trait Implementations§

source§

impl<K: Clone, V: Clone> Clone for KvPayload<K, V>

source§

fn clone(&self) -> KvPayload<K, V>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<K: Debug, V: Debug> Debug for KvPayload<K, V>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de, K, V> Deserialize<'de> for KvPayload<K, V>
where +}

Fields§

§key: K§value: V

Trait Implementations§

source§

impl<K: Clone, V: Clone> Clone for KvPayload<K, V>

source§

fn clone(&self) -> KvPayload<K, V>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<K: Debug, V: Debug> Debug for KvPayload<K, V>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de, K, V> Deserialize<'de> for KvPayload<K, V>
where K: Deserialize<'de>, - V: Deserialize<'de>,

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<K: PartialEq, V: PartialEq> PartialEq for KvPayload<K, V>

source§

fn eq(&self, other: &KvPayload<K, V>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
source§

impl<K, V> Serialize for KvPayload<K, V>
where + V: Deserialize<'de>,

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<K: PartialEq, V: PartialEq> PartialEq for KvPayload<K, V>

source§

fn eq(&self, other: &KvPayload<K, V>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
source§

impl<K, V> Serialize for KvPayload<K, V>
where K: Serialize, - V: Serialize,

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl<K: Eq, V: Eq> Eq for KvPayload<K, V>

source§

impl<K, V> StructuralPartialEq for KvPayload<K, V>

Auto Trait Implementations§

§

impl<K, V> Freeze for KvPayload<K, V>
where + V: Serialize,

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl<K: Eq, V: Eq> Eq for KvPayload<K, V>

source§

impl<K, V> StructuralPartialEq for KvPayload<K, V>

Auto Trait Implementations§

§

impl<K, V> Freeze for KvPayload<K, V>
where K: Freeze, - V: Freeze,

§

impl<K, V> RefUnwindSafe for KvPayload<K, V>
where + V: Freeze,

§

impl<K, V> RefUnwindSafe for KvPayload<K, V>

§

impl<K, V> Send for KvPayload<K, V>
where + V: RefUnwindSafe,

§

impl<K, V> Send for KvPayload<K, V>
where K: Send, - V: Send,

§

impl<K, V> Sync for KvPayload<K, V>
where + V: Send,

§

impl<K, V> Sync for KvPayload<K, V>
where K: Sync, - V: Sync,

§

impl<K, V> Unpin for KvPayload<K, V>
where + V: Sync,

§

impl<K, V> Unpin for KvPayload<K, V>
where K: Unpin, - V: Unpin,

§

impl<K, V> UnwindSafe for KvPayload<K, V>
where + V: Unpin,

§

impl<K, V> UnwindSafe for KvPayload<K, V>
where K: UnwindSafe, V: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where @@ -52,6 +52,6 @@ S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

source§

impl<V> KvValue for V

source§

impl<T> PaxosPayload for T
where + T: for<'de> Deserialize<'de>,

source§

impl<V> KvValue for V

source§

impl<T> PaxosPayload for T

\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/two_pc/struct.Participants.html b/doc/hydro_test/cluster/paxos_kv/struct.Replica.html similarity index 73% rename from doc/hydroflow_plus_test/cluster/two_pc/struct.Participants.html rename to doc/hydro_test/cluster/paxos_kv/struct.Replica.html index c8ed4c5440cb..23f0f01696bd 100644 --- a/doc/hydroflow_plus_test/cluster/two_pc/struct.Participants.html +++ b/doc/hydro_test/cluster/paxos_kv/struct.Replica.html @@ -1,4 +1,4 @@ -Participants in hydroflow_plus_test::cluster::two_pc - Rust

Struct hydroflow_plus_test::cluster::two_pc::Participants

source ·
pub struct Participants {}

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +Replica in hydro_test::cluster::paxos_kv - Rust

Struct hydro_test::cluster::paxos_kv::Replica

source ·
pub struct Replica {}

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/doc/hydroflow_plus_test/cluster/paxos_kv/struct.SequencedKv.html b/doc/hydro_test/cluster/paxos_kv/struct.SequencedKv.html similarity index 65% rename from doc/hydroflow_plus_test/cluster/paxos_kv/struct.SequencedKv.html rename to doc/hydro_test/cluster/paxos_kv/struct.SequencedKv.html index 3a9d3946487a..488f4e94476d 100644 --- a/doc/hydroflow_plus_test/cluster/paxos_kv/struct.SequencedKv.html +++ b/doc/hydro_test/cluster/paxos_kv/struct.SequencedKv.html @@ -1,30 +1,30 @@ -SequencedKv in hydroflow_plus_test::cluster::paxos_kv - Rust

Struct hydroflow_plus_test::cluster::paxos_kv::SequencedKv

source ·
pub struct SequencedKv<K, V> {
+SequencedKv in hydro_test::cluster::paxos_kv - Rust

Struct hydro_test::cluster::paxos_kv::SequencedKv

source ·
pub struct SequencedKv<K, V> {
     pub seq: usize,
-    pub kv: Option<KvPayload<K, V>>,
-}

Fields§

§seq: usize§kv: Option<KvPayload<K, V>>

Trait Implementations§

source§

impl<K: Clone, V: Clone> Clone for SequencedKv<K, V>

source§

fn clone(&self) -> SequencedKv<K, V>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<K: Debug, V: Debug> Debug for SequencedKv<K, V>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de, K, V> Deserialize<'de> for SequencedKv<K, V>
where + pub kv: Option<KvPayload<K, V>>, +}

Fields§

§seq: usize§kv: Option<KvPayload<K, V>>

Trait Implementations§

source§

impl<K: Clone, V: Clone> Clone for SequencedKv<K, V>

source§

fn clone(&self) -> SequencedKv<K, V>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<K: Debug, V: Debug> Debug for SequencedKv<K, V>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de, K, V> Deserialize<'de> for SequencedKv<K, V>
where K: Deserialize<'de>, - V: Deserialize<'de>,

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where - __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<K: KvKey, V: KvValue> Ord for SequencedKv<K, V>

source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where + V: Deserialize<'de>,

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where + __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<K: KvKey, V: KvValue> Ord for SequencedKv<K, V>

source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where - Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl<K: PartialEq, V: PartialEq> PartialEq for SequencedKv<K, V>

source§

fn eq(&self, other: &SequencedKv<K, V>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, -and should not be overridden without very good reason.
source§

impl<K: KvKey, V: KvValue> PartialOrd for SequencedKv<K, V>

source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the + Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more

source§

impl<K: PartialEq, V: PartialEq> PartialEq for SequencedKv<K, V>

source§

fn eq(&self, other: &SequencedKv<K, V>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
source§

impl<K: KvKey, V: KvValue> PartialOrd for SequencedKv<K, V>

source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by -the >= operator. Read more
source§

impl<K, V> Serialize for SequencedKv<K, V>
where +the >= operator. Read more

source§

impl<K, V> Serialize for SequencedKv<K, V>
where K: Serialize, - V: Serialize,

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where - __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl<K: Eq, V: Eq> Eq for SequencedKv<K, V>

source§

impl<K, V> StructuralPartialEq for SequencedKv<K, V>

Auto Trait Implementations§

§

impl<K, V> Freeze for SequencedKv<K, V>
where + V: Serialize,

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where + __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl<K: Eq, V: Eq> Eq for SequencedKv<K, V>

source§

impl<K, V> StructuralPartialEq for SequencedKv<K, V>

Auto Trait Implementations§

§

impl<K, V> Freeze for SequencedKv<K, V>
where K: Freeze, - V: Freeze,

§

impl<K, V> RefUnwindSafe for SequencedKv<K, V>
where + V: Freeze,

§

impl<K, V> RefUnwindSafe for SequencedKv<K, V>

§

impl<K, V> Send for SequencedKv<K, V>
where + V: RefUnwindSafe,

§

impl<K, V> Send for SequencedKv<K, V>
where K: Send, - V: Send,

§

impl<K, V> Sync for SequencedKv<K, V>
where + V: Send,

§

impl<K, V> Sync for SequencedKv<K, V>
where K: Sync, - V: Sync,

§

impl<K, V> Unpin for SequencedKv<K, V>
where + V: Sync,

§

impl<K, V> Unpin for SequencedKv<K, V>
where K: Unpin, - V: Unpin,

§

impl<K, V> UnwindSafe for SequencedKv<K, V>
where + V: Unpin,

§

impl<K, V> UnwindSafe for SequencedKv<K, V>
where K: UnwindSafe, V: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where @@ -60,6 +60,6 @@ S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
source§

impl<T> DeserializeOwned for T
where - T: for<'de> Deserialize<'de>,

source§

impl<V> KvValue for V

source§

impl<T> PaxosPayload for T
where + T: for<'de> Deserialize<'de>,

source§

impl<V> KvValue for V

source§

impl<T> PaxosPayload for T

\ No newline at end of file diff --git a/doc/hydro_test/cluster/paxos_kv/trait.KvKey.html b/doc/hydro_test/cluster/paxos_kv/trait.KvKey.html new file mode 100644 index 000000000000..f90d3bb3f1e4 --- /dev/null +++ b/doc/hydro_test/cluster/paxos_kv/trait.KvKey.html @@ -0,0 +1,7 @@ +KvKey in hydro_test::cluster::paxos_kv - Rust

Trait hydro_test::cluster::paxos_kv::KvKey

source ·
pub trait KvKey:
+    Serialize
+    + DeserializeOwned
+    + Hash
+    + Eq
+    + Clone
+    + Debug { }

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/doc/hydro_test/cluster/paxos_kv/trait.KvValue.html b/doc/hydro_test/cluster/paxos_kv/trait.KvValue.html new file mode 100644 index 000000000000..d748c7967118 --- /dev/null +++ b/doc/hydro_test/cluster/paxos_kv/trait.KvValue.html @@ -0,0 +1,6 @@ +KvValue in hydro_test::cluster::paxos_kv - Rust

Trait hydro_test::cluster::paxos_kv::KvValue

source ·
pub trait KvValue:
+    Serialize
+    + DeserializeOwned
+    + Eq
+    + Clone
+    + Debug { }

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/sidebar-items.js b/doc/hydro_test/cluster/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus_test/cluster/sidebar-items.js rename to doc/hydro_test/cluster/sidebar-items.js diff --git a/doc/hydro_test/cluster/simple_cluster/fn.decouple_cluster.html b/doc/hydro_test/cluster/simple_cluster/fn.decouple_cluster.html new file mode 100644 index 000000000000..a29b595bbc31 --- /dev/null +++ b/doc/hydro_test/cluster/simple_cluster/fn.decouple_cluster.html @@ -0,0 +1,3 @@ +decouple_cluster in hydro_test::cluster::simple_cluster - Rust

Function hydro_test::cluster::simple_cluster::decouple_cluster

source ·
pub fn decouple_cluster<'a>(
+    flow: &FlowBuilder<'a>,
+) -> (Cluster<'a, ()>, Cluster<'a, ()>)
\ No newline at end of file diff --git a/doc/hydro_test/cluster/simple_cluster/fn.decouple_process.html b/doc/hydro_test/cluster/simple_cluster/fn.decouple_process.html new file mode 100644 index 000000000000..e856b54ff3f8 --- /dev/null +++ b/doc/hydro_test/cluster/simple_cluster/fn.decouple_process.html @@ -0,0 +1,3 @@ +decouple_process in hydro_test::cluster::simple_cluster - Rust

Function hydro_test::cluster::simple_cluster::decouple_process

source ·
pub fn decouple_process<'a>(
+    flow: &FlowBuilder<'a>,
+) -> (Process<'a, ()>, Process<'a, ()>)
\ No newline at end of file diff --git a/doc/hydro_test/cluster/simple_cluster/fn.simple_cluster.html b/doc/hydro_test/cluster/simple_cluster/fn.simple_cluster.html new file mode 100644 index 000000000000..4cd879407f23 --- /dev/null +++ b/doc/hydro_test/cluster/simple_cluster/fn.simple_cluster.html @@ -0,0 +1,3 @@ +simple_cluster in hydro_test::cluster::simple_cluster - Rust

Function hydro_test::cluster::simple_cluster::simple_cluster

source ·
pub fn simple_cluster<'a>(
+    flow: &FlowBuilder<'a>,
+) -> (Process<'a, ()>, Cluster<'a, ()>)
\ No newline at end of file diff --git a/doc/hydro_test/cluster/simple_cluster/index.html b/doc/hydro_test/cluster/simple_cluster/index.html new file mode 100644 index 000000000000..8f2b092fde7c --- /dev/null +++ b/doc/hydro_test/cluster/simple_cluster/index.html @@ -0,0 +1 @@ +hydro_test::cluster::simple_cluster - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/simple_cluster/sidebar-items.js b/doc/hydro_test/cluster/simple_cluster/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus_test/cluster/simple_cluster/sidebar-items.js rename to doc/hydro_test/cluster/simple_cluster/sidebar-items.js diff --git a/doc/hydro_test/cluster/two_pc/fn.two_pc.html b/doc/hydro_test/cluster/two_pc/fn.two_pc.html new file mode 100644 index 000000000000..f4947a3cd7c8 --- /dev/null +++ b/doc/hydro_test/cluster/two_pc/fn.two_pc.html @@ -0,0 +1,4 @@ +two_pc in hydro_test::cluster::two_pc - Rust

Function hydro_test::cluster::two_pc::two_pc

source ·
pub fn two_pc<'a>(
+    flow: &FlowBuilder<'a>,
+    num_participants: u32,
+) -> (Process<'a, Coordinator>, Cluster<'a, Participants>, Process<'a, Client>)
\ No newline at end of file diff --git a/doc/hydro_test/cluster/two_pc/index.html b/doc/hydro_test/cluster/two_pc/index.html new file mode 100644 index 000000000000..bece6007461b --- /dev/null +++ b/doc/hydro_test/cluster/two_pc/index.html @@ -0,0 +1 @@ +hydro_test::cluster::two_pc - Rust

Module hydro_test::cluster::two_pc

source ·

Structs§

Functions§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/two_pc/sidebar-items.js b/doc/hydro_test/cluster/two_pc/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus_test/cluster/two_pc/sidebar-items.js rename to doc/hydro_test/cluster/two_pc/sidebar-items.js diff --git a/doc/hydroflow_plus_test/cluster/two_pc/struct.Client.html b/doc/hydro_test/cluster/two_pc/struct.Client.html similarity index 72% rename from doc/hydroflow_plus_test/cluster/two_pc/struct.Client.html rename to doc/hydro_test/cluster/two_pc/struct.Client.html index ea613dcd9a43..fc5f1cd6dcf3 100644 --- a/doc/hydroflow_plus_test/cluster/two_pc/struct.Client.html +++ b/doc/hydro_test/cluster/two_pc/struct.Client.html @@ -1,4 +1,4 @@ -Client in hydroflow_plus_test::cluster::two_pc - Rust

Struct hydroflow_plus_test::cluster::two_pc::Client

source ·
pub struct Client {}

Auto Trait Implementations§

§

impl Freeze for Client

§

impl RefUnwindSafe for Client

§

impl Send for Client

§

impl Sync for Client

§

impl Unpin for Client

§

impl UnwindSafe for Client

Blanket Implementations§

source§

impl<T> Any for T
where +Client in hydro_test::cluster::two_pc - Rust

Struct hydro_test::cluster::two_pc::Client

source ·
pub struct Client {}

Auto Trait Implementations§

§

impl Freeze for Client

§

impl RefUnwindSafe for Client

§

impl Send for Client

§

impl Sync for Client

§

impl Unpin for Client

§

impl UnwindSafe for Client

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/doc/hydroflow_plus_test/cluster/two_pc/struct.Coordinator.html b/doc/hydro_test/cluster/two_pc/struct.Coordinator.html similarity index 72% rename from doc/hydroflow_plus_test/cluster/two_pc/struct.Coordinator.html rename to doc/hydro_test/cluster/two_pc/struct.Coordinator.html index 793164c2c1c9..ec8291e9af36 100644 --- a/doc/hydroflow_plus_test/cluster/two_pc/struct.Coordinator.html +++ b/doc/hydro_test/cluster/two_pc/struct.Coordinator.html @@ -1,4 +1,4 @@ -Coordinator in hydroflow_plus_test::cluster::two_pc - Rust

Struct hydroflow_plus_test::cluster::two_pc::Coordinator

source ·
pub struct Coordinator {}

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where +Coordinator in hydro_test::cluster::two_pc - Rust

Struct hydro_test::cluster::two_pc::Coordinator

source ·
pub struct Coordinator {}

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/doc/hydroflow_plus_test/cluster/map_reduce/struct.Leader.html b/doc/hydro_test/cluster/two_pc/struct.Participants.html similarity index 74% rename from doc/hydroflow_plus_test/cluster/map_reduce/struct.Leader.html rename to doc/hydro_test/cluster/two_pc/struct.Participants.html index 548097bd148f..124f481f7170 100644 --- a/doc/hydroflow_plus_test/cluster/map_reduce/struct.Leader.html +++ b/doc/hydro_test/cluster/two_pc/struct.Participants.html @@ -1,4 +1,4 @@ -Leader in hydroflow_plus_test::cluster::map_reduce - Rust

Struct hydroflow_plus_test::cluster::map_reduce::Leader

source ·
pub struct Leader {}

Auto Trait Implementations§

§

impl Freeze for Leader

§

impl RefUnwindSafe for Leader

§

impl Send for Leader

§

impl Sync for Leader

§

impl Unpin for Leader

§

impl UnwindSafe for Leader

Blanket Implementations§

source§

impl<T> Any for T
where +Participants in hydro_test::cluster::two_pc - Rust

Struct hydro_test::cluster::two_pc::Participants

source ·
pub struct Participants {}

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/doc/hydro_test/distributed/first_ten/fn.first_ten_distributed.html b/doc/hydro_test/distributed/first_ten/fn.first_ten_distributed.html new file mode 100644 index 000000000000..f57e697059eb --- /dev/null +++ b/doc/hydro_test/distributed/first_ten/fn.first_ten_distributed.html @@ -0,0 +1,5 @@ +first_ten_distributed in hydro_test::distributed::first_ten - Rust

Function hydro_test::distributed::first_ten::first_ten_distributed

source ·
pub fn first_ten_distributed<'a>(
+    external: &ExternalProcess<'a, ()>,
+    process: &Process<'a, P1>,
+    second_process: &Process<'a, P2>,
+) -> ExternalBincodeSink<String>
\ No newline at end of file diff --git a/doc/hydro_test/distributed/first_ten/index.html b/doc/hydro_test/distributed/first_ten/index.html new file mode 100644 index 000000000000..53f50bac459e --- /dev/null +++ b/doc/hydro_test/distributed/first_ten/index.html @@ -0,0 +1 @@ +hydro_test::distributed::first_ten - Rust

Module hydro_test::distributed::first_ten

source ·

Structs§

Functions§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test/distributed/first_ten/sidebar-items.js b/doc/hydro_test/distributed/first_ten/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus_test/distributed/first_ten/sidebar-items.js rename to doc/hydro_test/distributed/first_ten/sidebar-items.js diff --git a/doc/hydroflow_plus_test/distributed/first_ten/struct.P1.html b/doc/hydro_test/distributed/first_ten/struct.P1.html similarity index 73% rename from doc/hydroflow_plus_test/distributed/first_ten/struct.P1.html rename to doc/hydro_test/distributed/first_ten/struct.P1.html index 3360a9fe0ac8..120b3b601f2d 100644 --- a/doc/hydroflow_plus_test/distributed/first_ten/struct.P1.html +++ b/doc/hydro_test/distributed/first_ten/struct.P1.html @@ -1,4 +1,4 @@ -P1 in hydroflow_plus_test::distributed::first_ten - Rust

Struct hydroflow_plus_test::distributed::first_ten::P1

source ·
pub struct P1 {}

Auto Trait Implementations§

§

impl Freeze for P1

§

impl RefUnwindSafe for P1

§

impl Send for P1

§

impl Sync for P1

§

impl Unpin for P1

§

impl UnwindSafe for P1

Blanket Implementations§

source§

impl<T> Any for T
where +P1 in hydro_test::distributed::first_ten - Rust

Struct hydro_test::distributed::first_ten::P1

source ·
pub struct P1 {}

Auto Trait Implementations§

§

impl Freeze for P1

§

impl RefUnwindSafe for P1

§

impl Send for P1

§

impl Sync for P1

§

impl Unpin for P1

§

impl UnwindSafe for P1

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/doc/hydroflow_plus_test/distributed/first_ten/struct.P2.html b/doc/hydro_test/distributed/first_ten/struct.P2.html similarity index 73% rename from doc/hydroflow_plus_test/distributed/first_ten/struct.P2.html rename to doc/hydro_test/distributed/first_ten/struct.P2.html index c9a6eb67f80b..26c18d23cf1f 100644 --- a/doc/hydroflow_plus_test/distributed/first_ten/struct.P2.html +++ b/doc/hydro_test/distributed/first_ten/struct.P2.html @@ -1,4 +1,4 @@ -P2 in hydroflow_plus_test::distributed::first_ten - Rust

Struct hydroflow_plus_test::distributed::first_ten::P2

source ·
pub struct P2 {}

Auto Trait Implementations§

§

impl Freeze for P2

§

impl RefUnwindSafe for P2

§

impl Send for P2

§

impl Sync for P2

§

impl Unpin for P2

§

impl UnwindSafe for P2

Blanket Implementations§

source§

impl<T> Any for T
where +P2 in hydro_test::distributed::first_ten - Rust

Struct hydro_test::distributed::first_ten::P2

source ·
pub struct P2 {}

Auto Trait Implementations§

§

impl Freeze for P2

§

impl RefUnwindSafe for P2

§

impl Send for P2

§

impl Sync for P2

§

impl Unpin for P2

§

impl UnwindSafe for P2

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/doc/hydro_test/distributed/index.html b/doc/hydro_test/distributed/index.html new file mode 100644 index 000000000000..94c84ad29b46 --- /dev/null +++ b/doc/hydro_test/distributed/index.html @@ -0,0 +1 @@ +hydro_test::distributed - Rust

Module hydro_test::distributed

source ·

Modules§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test/distributed/sidebar-items.js b/doc/hydro_test/distributed/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus_test/distributed/sidebar-items.js rename to doc/hydro_test/distributed/sidebar-items.js diff --git a/doc/hydro_test/index.html b/doc/hydro_test/index.html new file mode 100644 index 000000000000..cd13104f4c03 --- /dev/null +++ b/doc/hydro_test/index.html @@ -0,0 +1 @@ +hydro_test - Rust

Crate hydro_test

source ·

Modules§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test/sidebar-items.js b/doc/hydro_test/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus_test/sidebar-items.js rename to doc/hydro_test/sidebar-items.js diff --git a/doc/hydro_test_local/all.html b/doc/hydro_test_local/all.html new file mode 100644 index 000000000000..e43e54c2cdbf --- /dev/null +++ b/doc/hydro_test_local/all.html @@ -0,0 +1 @@ +List of all items in this crate
\ No newline at end of file diff --git a/doc/hydro_test_local/index.html b/doc/hydro_test_local/index.html new file mode 100644 index 000000000000..010120f73abe --- /dev/null +++ b/doc/hydro_test_local/index.html @@ -0,0 +1 @@ +hydro_test_local - Rust

Crate hydro_test_local

source ·

Modules§

\ No newline at end of file diff --git a/doc/hydro_test_local/local/chat_app/index.html b/doc/hydro_test_local/local/chat_app/index.html new file mode 100644 index 000000000000..c81d412b9684 --- /dev/null +++ b/doc/hydro_test_local/local/chat_app/index.html @@ -0,0 +1 @@ +hydro_test_local::local::chat_app - Rust

Module hydro_test_local::local::chat_app

source ·

Macros§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/chat_app/macro.chat_app!.html b/doc/hydro_test_local/local/chat_app/macro.chat_app!.html similarity index 100% rename from doc/hydroflow_plus_test_local/local/chat_app/macro.chat_app!.html rename to doc/hydro_test_local/local/chat_app/macro.chat_app!.html diff --git a/doc/hydro_test_local/local/chat_app/macro.chat_app.html b/doc/hydro_test_local/local/chat_app/macro.chat_app.html new file mode 100644 index 000000000000..d5e2c7512f03 --- /dev/null +++ b/doc/hydro_test_local/local/chat_app/macro.chat_app.html @@ -0,0 +1 @@ +chat_app in hydro_test_local::local::chat_app - Rust

Macro hydro_test_local::local::chat_app::chat_app

source ·
chat_app!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/chat_app/sidebar-items.js b/doc/hydro_test_local/local/chat_app/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus_test_local/local/chat_app/sidebar-items.js rename to doc/hydro_test_local/local/chat_app/sidebar-items.js diff --git a/doc/hydro_test_local/local/compute_pi/fn.compute_pi.html b/doc/hydro_test_local/local/compute_pi/fn.compute_pi.html new file mode 100644 index 000000000000..631935890b4c --- /dev/null +++ b/doc/hydro_test_local/local/compute_pi/fn.compute_pi.html @@ -0,0 +1,4 @@ +compute_pi in hydro_test_local::local::compute_pi - Rust

Function hydro_test_local::local::compute_pi::compute_pi

source ·
pub fn compute_pi<'a>(
+    flow: &FlowBuilder<'a>,
+    batch_size: RuntimeData<usize>,
+) -> Process<'a, ()>
\ No newline at end of file diff --git a/doc/hydro_test_local/local/compute_pi/index.html b/doc/hydro_test_local/local/compute_pi/index.html new file mode 100644 index 000000000000..63f3be0ef7be --- /dev/null +++ b/doc/hydro_test_local/local/compute_pi/index.html @@ -0,0 +1 @@ +hydro_test_local::local::compute_pi - Rust

Module hydro_test_local::local::compute_pi

source ·

Macros§

Functions§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/compute_pi/macro.compute_pi_runtime!.html b/doc/hydro_test_local/local/compute_pi/macro.compute_pi_runtime!.html similarity index 100% rename from doc/hydroflow_plus_test_local/local/compute_pi/macro.compute_pi_runtime!.html rename to doc/hydro_test_local/local/compute_pi/macro.compute_pi_runtime!.html diff --git a/doc/hydro_test_local/local/compute_pi/macro.compute_pi_runtime.html b/doc/hydro_test_local/local/compute_pi/macro.compute_pi_runtime.html new file mode 100644 index 000000000000..a4a5acc30800 --- /dev/null +++ b/doc/hydro_test_local/local/compute_pi/macro.compute_pi_runtime.html @@ -0,0 +1 @@ +compute_pi_runtime in hydro_test_local::local::compute_pi - Rust
compute_pi_runtime!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/compute_pi/sidebar-items.js b/doc/hydro_test_local/local/compute_pi/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus_test_local/local/compute_pi/sidebar-items.js rename to doc/hydro_test_local/local/compute_pi/sidebar-items.js diff --git a/doc/hydro_test_local/local/count_elems/fn.count_elems_generic.html b/doc/hydro_test_local/local/count_elems/fn.count_elems_generic.html new file mode 100644 index 000000000000..289c3c4db60c --- /dev/null +++ b/doc/hydro_test_local/local/count_elems/fn.count_elems_generic.html @@ -0,0 +1,5 @@ +count_elems_generic in hydro_test_local::local::count_elems - Rust

Function hydro_test_local::local::count_elems::count_elems_generic

source ·
pub fn count_elems_generic<'a, T: 'a>(
+    flow: FlowBuilder<'a>,
+    input_stream: RuntimeData<UnboundedReceiverStream<T>>,
+    output: RuntimeData<&'a UnboundedSender<u32>>,
+) -> impl Quoted<'a, Hydroflow<'a>>
\ No newline at end of file diff --git a/doc/hydro_test_local/local/count_elems/index.html b/doc/hydro_test_local/local/count_elems/index.html new file mode 100644 index 000000000000..12bd29800599 --- /dev/null +++ b/doc/hydro_test_local/local/count_elems/index.html @@ -0,0 +1 @@ +hydro_test_local::local::count_elems - Rust

Module hydro_test_local::local::count_elems

source ·

Macros§

Functions§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/count_elems/macro.count_elems!.html b/doc/hydro_test_local/local/count_elems/macro.count_elems!.html similarity index 100% rename from doc/hydroflow_plus_test_local/local/count_elems/macro.count_elems!.html rename to doc/hydro_test_local/local/count_elems/macro.count_elems!.html diff --git a/doc/hydro_test_local/local/count_elems/macro.count_elems.html b/doc/hydro_test_local/local/count_elems/macro.count_elems.html new file mode 100644 index 000000000000..cfedc9b96f36 --- /dev/null +++ b/doc/hydro_test_local/local/count_elems/macro.count_elems.html @@ -0,0 +1 @@ +count_elems in hydro_test_local::local::count_elems - Rust

Macro hydro_test_local::local::count_elems::count_elems

source ·
count_elems!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/count_elems/sidebar-items.js b/doc/hydro_test_local/local/count_elems/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus_test_local/local/count_elems/sidebar-items.js rename to doc/hydro_test_local/local/count_elems/sidebar-items.js diff --git a/doc/hydro_test_local/local/first_ten/fn.first_ten.html b/doc/hydro_test_local/local/first_ten/fn.first_ten.html new file mode 100644 index 000000000000..cb3ab4eeafe8 --- /dev/null +++ b/doc/hydro_test_local/local/first_ten/fn.first_ten.html @@ -0,0 +1 @@ +first_ten in hydro_test_local::local::first_ten - Rust

Function hydro_test_local::local::first_ten::first_ten

source ·
pub fn first_ten(flow: &FlowBuilder<'_>)
\ No newline at end of file diff --git a/doc/hydro_test_local/local/first_ten/index.html b/doc/hydro_test_local/local/first_ten/index.html new file mode 100644 index 000000000000..04d226373c98 --- /dev/null +++ b/doc/hydro_test_local/local/first_ten/index.html @@ -0,0 +1 @@ +hydro_test_local::local::first_ten - Rust

Module hydro_test_local::local::first_ten

source ·

Macros§

Functions§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/first_ten/macro.first_ten_runtime!.html b/doc/hydro_test_local/local/first_ten/macro.first_ten_runtime!.html similarity index 100% rename from doc/hydroflow_plus_test_local/local/first_ten/macro.first_ten_runtime!.html rename to doc/hydro_test_local/local/first_ten/macro.first_ten_runtime!.html diff --git a/doc/hydro_test_local/local/first_ten/macro.first_ten_runtime.html b/doc/hydro_test_local/local/first_ten/macro.first_ten_runtime.html new file mode 100644 index 000000000000..ec46468d6892 --- /dev/null +++ b/doc/hydro_test_local/local/first_ten/macro.first_ten_runtime.html @@ -0,0 +1 @@ +first_ten_runtime in hydro_test_local::local::first_ten - Rust
first_ten_runtime!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/first_ten/sidebar-items.js b/doc/hydro_test_local/local/first_ten/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus_test_local/local/first_ten/sidebar-items.js rename to doc/hydro_test_local/local/first_ten/sidebar-items.js diff --git a/doc/hydro_test_local/local/graph_reachability/index.html b/doc/hydro_test_local/local/graph_reachability/index.html new file mode 100644 index 000000000000..5883586cedaa --- /dev/null +++ b/doc/hydro_test_local/local/graph_reachability/index.html @@ -0,0 +1 @@ +hydro_test_local::local::graph_reachability - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/graph_reachability/macro.graph_reachability!.html b/doc/hydro_test_local/local/graph_reachability/macro.graph_reachability!.html similarity index 100% rename from doc/hydroflow_plus_test_local/local/graph_reachability/macro.graph_reachability!.html rename to doc/hydro_test_local/local/graph_reachability/macro.graph_reachability!.html diff --git a/doc/hydro_test_local/local/graph_reachability/macro.graph_reachability.html b/doc/hydro_test_local/local/graph_reachability/macro.graph_reachability.html new file mode 100644 index 000000000000..3041cb8fd59f --- /dev/null +++ b/doc/hydro_test_local/local/graph_reachability/macro.graph_reachability.html @@ -0,0 +1 @@ +graph_reachability in hydro_test_local::local::graph_reachability - Rust
graph_reachability!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/graph_reachability/sidebar-items.js b/doc/hydro_test_local/local/graph_reachability/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus_test_local/local/graph_reachability/sidebar-items.js rename to doc/hydro_test_local/local/graph_reachability/sidebar-items.js diff --git a/doc/hydro_test_local/local/index.html b/doc/hydro_test_local/local/index.html new file mode 100644 index 000000000000..01f5b5bfeac1 --- /dev/null +++ b/doc/hydro_test_local/local/index.html @@ -0,0 +1 @@ +hydro_test_local::local - Rust
\ No newline at end of file diff --git a/doc/hydro_test_local/local/negation/index.html b/doc/hydro_test_local/local/negation/index.html new file mode 100644 index 000000000000..b05c247954ca --- /dev/null +++ b/doc/hydro_test_local/local/negation/index.html @@ -0,0 +1 @@ +hydro_test_local::local::negation - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/negation/macro.test_anti_join!.html b/doc/hydro_test_local/local/negation/macro.test_anti_join!.html similarity index 100% rename from doc/hydroflow_plus_test_local/local/negation/macro.test_anti_join!.html rename to doc/hydro_test_local/local/negation/macro.test_anti_join!.html diff --git a/doc/hydro_test_local/local/negation/macro.test_anti_join.html b/doc/hydro_test_local/local/negation/macro.test_anti_join.html new file mode 100644 index 000000000000..02327388bd10 --- /dev/null +++ b/doc/hydro_test_local/local/negation/macro.test_anti_join.html @@ -0,0 +1 @@ +test_anti_join in hydro_test_local::local::negation - Rust

Macro hydro_test_local::local::negation::test_anti_join

source ·
test_anti_join!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/negation/macro.test_difference!.html b/doc/hydro_test_local/local/negation/macro.test_difference!.html similarity index 100% rename from doc/hydroflow_plus_test_local/local/negation/macro.test_difference!.html rename to doc/hydro_test_local/local/negation/macro.test_difference!.html diff --git a/doc/hydro_test_local/local/negation/macro.test_difference.html b/doc/hydro_test_local/local/negation/macro.test_difference.html new file mode 100644 index 000000000000..4699d26eea80 --- /dev/null +++ b/doc/hydro_test_local/local/negation/macro.test_difference.html @@ -0,0 +1 @@ +test_difference in hydro_test_local::local::negation - Rust

Macro hydro_test_local::local::negation::test_difference

source ·
test_difference!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/negation/sidebar-items.js b/doc/hydro_test_local/local/negation/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus_test_local/local/negation/sidebar-items.js rename to doc/hydro_test_local/local/negation/sidebar-items.js diff --git a/doc/hydroflow_plus_test_local/local/sidebar-items.js b/doc/hydro_test_local/local/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus_test_local/local/sidebar-items.js rename to doc/hydro_test_local/local/sidebar-items.js diff --git a/doc/hydro_test_local/local/teed_join/index.html b/doc/hydro_test_local/local/teed_join/index.html new file mode 100644 index 000000000000..6934510daa9c --- /dev/null +++ b/doc/hydro_test_local/local/teed_join/index.html @@ -0,0 +1 @@ +hydro_test_local::local::teed_join - Rust

Module hydro_test_local::local::teed_join

source ·

Macros§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/teed_join/macro.teed_join!.html b/doc/hydro_test_local/local/teed_join/macro.teed_join!.html similarity index 100% rename from doc/hydroflow_plus_test_local/local/teed_join/macro.teed_join!.html rename to doc/hydro_test_local/local/teed_join/macro.teed_join!.html diff --git a/doc/hydro_test_local/local/teed_join/macro.teed_join.html b/doc/hydro_test_local/local/teed_join/macro.teed_join.html new file mode 100644 index 000000000000..c6411e1df629 --- /dev/null +++ b/doc/hydro_test_local/local/teed_join/macro.teed_join.html @@ -0,0 +1 @@ +teed_join in hydro_test_local::local::teed_join - Rust

Macro hydro_test_local::local::teed_join::teed_join

source ·
teed_join!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/teed_join/sidebar-items.js b/doc/hydro_test_local/local/teed_join/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus_test_local/local/teed_join/sidebar-items.js rename to doc/hydro_test_local/local/teed_join/sidebar-items.js diff --git a/doc/hydroflow_plus_test_local/sidebar-items.js b/doc/hydro_test_local/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus_test_local/sidebar-items.js rename to doc/hydro_test_local/sidebar-items.js diff --git a/doc/hydro_test_local_macro/all.html b/doc/hydro_test_local_macro/all.html new file mode 100644 index 000000000000..5616eed220f0 --- /dev/null +++ b/doc/hydro_test_local_macro/all.html @@ -0,0 +1 @@ +List of all items in this crate
\ No newline at end of file diff --git a/doc/hydro_test_local_macro/index.html b/doc/hydro_test_local_macro/index.html new file mode 100644 index 000000000000..b2d585b0aec9 --- /dev/null +++ b/doc/hydro_test_local_macro/index.html @@ -0,0 +1 @@ +hydro_test_local_macro - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local_macro/macro.macro_0317123C21A365AAC8F7C904D715749D52C4408A36766C2EA4952E8548FDF2CF!.html b/doc/hydro_test_local_macro/macro.macro_0317123C21A365AAC8F7C904D715749D52C4408A36766C2EA4952E8548FDF2CF!.html similarity index 100% rename from doc/hydroflow_plus_test_local_macro/macro.macro_0317123C21A365AAC8F7C904D715749D52C4408A36766C2EA4952E8548FDF2CF!.html rename to doc/hydro_test_local_macro/macro.macro_0317123C21A365AAC8F7C904D715749D52C4408A36766C2EA4952E8548FDF2CF!.html diff --git a/doc/hydro_test_local_macro/macro.macro_0317123C21A365AAC8F7C904D715749D52C4408A36766C2EA4952E8548FDF2CF.html b/doc/hydro_test_local_macro/macro.macro_0317123C21A365AAC8F7C904D715749D52C4408A36766C2EA4952E8548FDF2CF.html new file mode 100644 index 000000000000..b053b2216159 --- /dev/null +++ b/doc/hydro_test_local_macro/macro.macro_0317123C21A365AAC8F7C904D715749D52C4408A36766C2EA4952E8548FDF2CF.html @@ -0,0 +1 @@ +macro_0317123C21A365AAC8F7C904D715749D52C4408A36766C2EA4952E8548FDF2CF in hydro_test_local_macro - Rust
macro_0317123C21A365AAC8F7C904D715749D52C4408A36766C2EA4952E8548FDF2CF!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local_macro/macro.macro_1C0FE8523A30CEE48113F7CA958EDC55F81545A0CB32FC13A73E2E0B86C69967!.html b/doc/hydro_test_local_macro/macro.macro_1C0FE8523A30CEE48113F7CA958EDC55F81545A0CB32FC13A73E2E0B86C69967!.html similarity index 100% rename from doc/hydroflow_plus_test_local_macro/macro.macro_1C0FE8523A30CEE48113F7CA958EDC55F81545A0CB32FC13A73E2E0B86C69967!.html rename to doc/hydro_test_local_macro/macro.macro_1C0FE8523A30CEE48113F7CA958EDC55F81545A0CB32FC13A73E2E0B86C69967!.html diff --git a/doc/hydro_test_local_macro/macro.macro_1C0FE8523A30CEE48113F7CA958EDC55F81545A0CB32FC13A73E2E0B86C69967.html b/doc/hydro_test_local_macro/macro.macro_1C0FE8523A30CEE48113F7CA958EDC55F81545A0CB32FC13A73E2E0B86C69967.html new file mode 100644 index 000000000000..7138894df0e8 --- /dev/null +++ b/doc/hydro_test_local_macro/macro.macro_1C0FE8523A30CEE48113F7CA958EDC55F81545A0CB32FC13A73E2E0B86C69967.html @@ -0,0 +1 @@ +macro_1C0FE8523A30CEE48113F7CA958EDC55F81545A0CB32FC13A73E2E0B86C69967 in hydro_test_local_macro - Rust
macro_1C0FE8523A30CEE48113F7CA958EDC55F81545A0CB32FC13A73E2E0B86C69967!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local_macro/macro.macro_88FF4FF66B42C3C3EA6A3A776AD3BBB5A0E778C545379CD74D8134F1BDE2467B!.html b/doc/hydro_test_local_macro/macro.macro_88FF4FF66B42C3C3EA6A3A776AD3BBB5A0E778C545379CD74D8134F1BDE2467B!.html similarity index 100% rename from doc/hydroflow_plus_test_local_macro/macro.macro_88FF4FF66B42C3C3EA6A3A776AD3BBB5A0E778C545379CD74D8134F1BDE2467B!.html rename to doc/hydro_test_local_macro/macro.macro_88FF4FF66B42C3C3EA6A3A776AD3BBB5A0E778C545379CD74D8134F1BDE2467B!.html diff --git a/doc/hydro_test_local_macro/macro.macro_88FF4FF66B42C3C3EA6A3A776AD3BBB5A0E778C545379CD74D8134F1BDE2467B.html b/doc/hydro_test_local_macro/macro.macro_88FF4FF66B42C3C3EA6A3A776AD3BBB5A0E778C545379CD74D8134F1BDE2467B.html new file mode 100644 index 000000000000..8b96eb3e4752 --- /dev/null +++ b/doc/hydro_test_local_macro/macro.macro_88FF4FF66B42C3C3EA6A3A776AD3BBB5A0E778C545379CD74D8134F1BDE2467B.html @@ -0,0 +1 @@ +macro_88FF4FF66B42C3C3EA6A3A776AD3BBB5A0E778C545379CD74D8134F1BDE2467B in hydro_test_local_macro - Rust
macro_88FF4FF66B42C3C3EA6A3A776AD3BBB5A0E778C545379CD74D8134F1BDE2467B!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local_macro/macro.macro_B8B04B5C82DD37E36A884DD155638B3BB603ECEE77232C187CB7749C8C3633D4!.html b/doc/hydro_test_local_macro/macro.macro_B8B04B5C82DD37E36A884DD155638B3BB603ECEE77232C187CB7749C8C3633D4!.html similarity index 100% rename from doc/hydroflow_plus_test_local_macro/macro.macro_B8B04B5C82DD37E36A884DD155638B3BB603ECEE77232C187CB7749C8C3633D4!.html rename to doc/hydro_test_local_macro/macro.macro_B8B04B5C82DD37E36A884DD155638B3BB603ECEE77232C187CB7749C8C3633D4!.html diff --git a/doc/hydro_test_local_macro/macro.macro_B8B04B5C82DD37E36A884DD155638B3BB603ECEE77232C187CB7749C8C3633D4.html b/doc/hydro_test_local_macro/macro.macro_B8B04B5C82DD37E36A884DD155638B3BB603ECEE77232C187CB7749C8C3633D4.html new file mode 100644 index 000000000000..2ce5c7bf98e2 --- /dev/null +++ b/doc/hydro_test_local_macro/macro.macro_B8B04B5C82DD37E36A884DD155638B3BB603ECEE77232C187CB7749C8C3633D4.html @@ -0,0 +1 @@ +macro_B8B04B5C82DD37E36A884DD155638B3BB603ECEE77232C187CB7749C8C3633D4 in hydro_test_local_macro - Rust
macro_B8B04B5C82DD37E36A884DD155638B3BB603ECEE77232C187CB7749C8C3633D4!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local_macro/macro.macro_DBD6835F761FB7B759E0367E64D404553FF74D0CDA5EC33E48C8D94A09338A20!.html b/doc/hydro_test_local_macro/macro.macro_DBD6835F761FB7B759E0367E64D404553FF74D0CDA5EC33E48C8D94A09338A20!.html similarity index 100% rename from doc/hydroflow_plus_test_local_macro/macro.macro_DBD6835F761FB7B759E0367E64D404553FF74D0CDA5EC33E48C8D94A09338A20!.html rename to doc/hydro_test_local_macro/macro.macro_DBD6835F761FB7B759E0367E64D404553FF74D0CDA5EC33E48C8D94A09338A20!.html diff --git a/doc/hydro_test_local_macro/macro.macro_DBD6835F761FB7B759E0367E64D404553FF74D0CDA5EC33E48C8D94A09338A20.html b/doc/hydro_test_local_macro/macro.macro_DBD6835F761FB7B759E0367E64D404553FF74D0CDA5EC33E48C8D94A09338A20.html new file mode 100644 index 000000000000..90bafa84ace5 --- /dev/null +++ b/doc/hydro_test_local_macro/macro.macro_DBD6835F761FB7B759E0367E64D404553FF74D0CDA5EC33E48C8D94A09338A20.html @@ -0,0 +1 @@ +macro_DBD6835F761FB7B759E0367E64D404553FF74D0CDA5EC33E48C8D94A09338A20 in hydro_test_local_macro - Rust
macro_DBD6835F761FB7B759E0367E64D404553FF74D0CDA5EC33E48C8D94A09338A20!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local_macro/macro.macro_E29C1936765CFB0AEE40C7D85645A072229E6DD9B20D78BFFDFDF0B90F8550E2!.html b/doc/hydro_test_local_macro/macro.macro_E29C1936765CFB0AEE40C7D85645A072229E6DD9B20D78BFFDFDF0B90F8550E2!.html similarity index 100% rename from doc/hydroflow_plus_test_local_macro/macro.macro_E29C1936765CFB0AEE40C7D85645A072229E6DD9B20D78BFFDFDF0B90F8550E2!.html rename to doc/hydro_test_local_macro/macro.macro_E29C1936765CFB0AEE40C7D85645A072229E6DD9B20D78BFFDFDF0B90F8550E2!.html diff --git a/doc/hydro_test_local_macro/macro.macro_E29C1936765CFB0AEE40C7D85645A072229E6DD9B20D78BFFDFDF0B90F8550E2.html b/doc/hydro_test_local_macro/macro.macro_E29C1936765CFB0AEE40C7D85645A072229E6DD9B20D78BFFDFDF0B90F8550E2.html new file mode 100644 index 000000000000..5400fcb165e9 --- /dev/null +++ b/doc/hydro_test_local_macro/macro.macro_E29C1936765CFB0AEE40C7D85645A072229E6DD9B20D78BFFDFDF0B90F8550E2.html @@ -0,0 +1 @@ +macro_E29C1936765CFB0AEE40C7D85645A072229E6DD9B20D78BFFDFDF0B90F8550E2 in hydro_test_local_macro - Rust
macro_E29C1936765CFB0AEE40C7D85645A072229E6DD9B20D78BFFDFDF0B90F8550E2!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local_macro/macro.macro_F32B896FDC4E575B912C55F307713AE1C491601401B080576A445697B5F5D872!.html b/doc/hydro_test_local_macro/macro.macro_F32B896FDC4E575B912C55F307713AE1C491601401B080576A445697B5F5D872!.html similarity index 100% rename from doc/hydroflow_plus_test_local_macro/macro.macro_F32B896FDC4E575B912C55F307713AE1C491601401B080576A445697B5F5D872!.html rename to doc/hydro_test_local_macro/macro.macro_F32B896FDC4E575B912C55F307713AE1C491601401B080576A445697B5F5D872!.html diff --git a/doc/hydro_test_local_macro/macro.macro_F32B896FDC4E575B912C55F307713AE1C491601401B080576A445697B5F5D872.html b/doc/hydro_test_local_macro/macro.macro_F32B896FDC4E575B912C55F307713AE1C491601401B080576A445697B5F5D872.html new file mode 100644 index 000000000000..5f5daf55ce22 --- /dev/null +++ b/doc/hydro_test_local_macro/macro.macro_F32B896FDC4E575B912C55F307713AE1C491601401B080576A445697B5F5D872.html @@ -0,0 +1 @@ +macro_F32B896FDC4E575B912C55F307713AE1C491601401B080576A445697B5F5D872 in hydro_test_local_macro - Rust
macro_F32B896FDC4E575B912C55F307713AE1C491601401B080576A445697B5F5D872!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local_macro/macro.macro_F395CBD2498F0C0291586D539B1C53802F7DE61514FE27DB041B53B7578FA011!.html b/doc/hydro_test_local_macro/macro.macro_F395CBD2498F0C0291586D539B1C53802F7DE61514FE27DB041B53B7578FA011!.html similarity index 100% rename from doc/hydroflow_plus_test_local_macro/macro.macro_F395CBD2498F0C0291586D539B1C53802F7DE61514FE27DB041B53B7578FA011!.html rename to doc/hydro_test_local_macro/macro.macro_F395CBD2498F0C0291586D539B1C53802F7DE61514FE27DB041B53B7578FA011!.html diff --git a/doc/hydro_test_local_macro/macro.macro_F395CBD2498F0C0291586D539B1C53802F7DE61514FE27DB041B53B7578FA011.html b/doc/hydro_test_local_macro/macro.macro_F395CBD2498F0C0291586D539B1C53802F7DE61514FE27DB041B53B7578FA011.html new file mode 100644 index 000000000000..34f411009361 --- /dev/null +++ b/doc/hydro_test_local_macro/macro.macro_F395CBD2498F0C0291586D539B1C53802F7DE61514FE27DB041B53B7578FA011.html @@ -0,0 +1 @@ +macro_F395CBD2498F0C0291586D539B1C53802F7DE61514FE27DB041B53B7578FA011 in hydro_test_local_macro - Rust
macro_F395CBD2498F0C0291586D539B1C53802F7DE61514FE27DB041B53B7578FA011!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local_macro/sidebar-items.js b/doc/hydro_test_local_macro/sidebar-items.js similarity index 100% rename from doc/hydroflow_plus_test_local_macro/sidebar-items.js rename to doc/hydro_test_local_macro/sidebar-items.js diff --git a/doc/hydroflow_plus/__staged/builder/macro.q.html b/doc/hydroflow_plus/__staged/builder/macro.q.html deleted file mode 100644 index 8d94077ed0fc..000000000000 --- a/doc/hydroflow_plus/__staged/builder/macro.q.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../hydroflow_plus/macro.q.html...

- - - \ No newline at end of file diff --git a/doc/hydroflow_plus/__staged/deploy_runtime/macro.q.html b/doc/hydroflow_plus/__staged/deploy_runtime/macro.q.html deleted file mode 100644 index 8d94077ed0fc..000000000000 --- a/doc/hydroflow_plus/__staged/deploy_runtime/macro.q.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../hydroflow_plus/macro.q.html...

- - - \ No newline at end of file diff --git a/doc/hydroflow_plus/__staged/location/macro.q.html b/doc/hydroflow_plus/__staged/location/macro.q.html deleted file mode 100644 index 8d94077ed0fc..000000000000 --- a/doc/hydroflow_plus/__staged/location/macro.q.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../hydroflow_plus/macro.q.html...

- - - \ No newline at end of file diff --git a/doc/hydroflow_plus/__staged/location/tick/macro.q.html b/doc/hydroflow_plus/__staged/location/tick/macro.q.html deleted file mode 100644 index 85b0084ea962..000000000000 --- a/doc/hydroflow_plus/__staged/location/tick/macro.q.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../hydroflow_plus/macro.q.html...

- - - \ No newline at end of file diff --git a/doc/hydroflow_plus/__staged/macro.q.html b/doc/hydroflow_plus/__staged/macro.q.html deleted file mode 100644 index bacb97a842e4..000000000000 --- a/doc/hydroflow_plus/__staged/macro.q.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../hydroflow_plus/macro.q.html...

- - - \ No newline at end of file diff --git a/doc/hydroflow_plus/__staged/optional/macro.q.html b/doc/hydroflow_plus/__staged/optional/macro.q.html deleted file mode 100644 index 8d94077ed0fc..000000000000 --- a/doc/hydroflow_plus/__staged/optional/macro.q.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../hydroflow_plus/macro.q.html...

- - - \ No newline at end of file diff --git a/doc/hydroflow_plus/__staged/rewrites/profiler/macro.q.html b/doc/hydroflow_plus/__staged/rewrites/profiler/macro.q.html deleted file mode 100644 index 85b0084ea962..000000000000 --- a/doc/hydroflow_plus/__staged/rewrites/profiler/macro.q.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../hydroflow_plus/macro.q.html...

- - - \ No newline at end of file diff --git a/doc/hydroflow_plus/__staged/rewrites/profiler/myself/macro.q.html b/doc/hydroflow_plus/__staged/rewrites/profiler/myself/macro.q.html deleted file mode 100644 index bcf3d60f2c22..000000000000 --- a/doc/hydroflow_plus/__staged/rewrites/profiler/myself/macro.q.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../../hydroflow_plus/macro.q.html...

- - - \ No newline at end of file diff --git a/doc/hydroflow_plus/__staged/rewrites/properties/macro.q.html b/doc/hydroflow_plus/__staged/rewrites/properties/macro.q.html deleted file mode 100644 index 85b0084ea962..000000000000 --- a/doc/hydroflow_plus/__staged/rewrites/properties/macro.q.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../hydroflow_plus/macro.q.html...

- - - \ No newline at end of file diff --git a/doc/hydroflow_plus/__staged/singleton/macro.q.html b/doc/hydroflow_plus/__staged/singleton/macro.q.html deleted file mode 100644 index 8d94077ed0fc..000000000000 --- a/doc/hydroflow_plus/__staged/singleton/macro.q.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../hydroflow_plus/macro.q.html...

- - - \ No newline at end of file diff --git a/doc/hydroflow_plus/__staged/stream/macro.q.html b/doc/hydroflow_plus/__staged/stream/macro.q.html deleted file mode 100644 index 8d94077ed0fc..000000000000 --- a/doc/hydroflow_plus/__staged/stream/macro.q.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../hydroflow_plus/macro.q.html...

- - - \ No newline at end of file diff --git a/doc/hydroflow_plus/all.html b/doc/hydroflow_plus/all.html deleted file mode 100644 index 9b56c1104a2f..000000000000 --- a/doc/hydroflow_plus/all.html +++ /dev/null @@ -1 +0,0 @@ -List of all items in this crate

List of all items

Structs

Enums

Traits

Macros

Functions

Type Aliases

Statics

Constants

\ No newline at end of file diff --git a/doc/hydroflow_plus/boundedness/index.html b/doc/hydroflow_plus/boundedness/index.html deleted file mode 100644 index e3b5341a9b98..000000000000 --- a/doc/hydroflow_plus/boundedness/index.html +++ /dev/null @@ -1,3 +0,0 @@ -hydroflow_plus::boundedness - Rust

Module hydroflow_plus::boundedness

source ·

Enums§

  • Marks the stream as being bounded, which means that it is guaranteed -to be complete in finite time.
  • Marks the stream as being unbounded, which means that it is not -guaranteed to be complete in finite time.
\ No newline at end of file diff --git a/doc/hydroflow_plus/builder/built/index.html b/doc/hydroflow_plus/builder/built/index.html deleted file mode 100644 index 5579c9ea6394..000000000000 --- a/doc/hydroflow_plus/builder/built/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus::builder::built - Rust

Module hydroflow_plus::builder::built

source ·

Structs§

\ No newline at end of file diff --git a/doc/hydroflow_plus/builder/compiled/index.html b/doc/hydroflow_plus/builder/compiled/index.html deleted file mode 100644 index cfaf5bb0c494..000000000000 --- a/doc/hydroflow_plus/builder/compiled/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus::builder::compiled - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus/builder/constant.FLOW_USED_MESSAGE.html b/doc/hydroflow_plus/builder/constant.FLOW_USED_MESSAGE.html deleted file mode 100644 index 9123fbf74972..000000000000 --- a/doc/hydroflow_plus/builder/constant.FLOW_USED_MESSAGE.html +++ /dev/null @@ -1 +0,0 @@ -FLOW_USED_MESSAGE in hydroflow_plus::builder - Rust

Constant hydroflow_plus::builder::FLOW_USED_MESSAGE

source ·
pub const FLOW_USED_MESSAGE: &str = "Attempted to add a leaf to a flow that has already been finalized. No leaves can be added after the flow has been compiled.";
\ No newline at end of file diff --git a/doc/hydroflow_plus/builder/deploy/index.html b/doc/hydroflow_plus/builder/deploy/index.html deleted file mode 100644 index 9d8c1f1d85f0..000000000000 --- a/doc/hydroflow_plus/builder/deploy/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus::builder::deploy - Rust

Module hydroflow_plus::builder::deploy

source ·

Structs§

\ No newline at end of file diff --git a/doc/hydroflow_plus/builder/index.html b/doc/hydroflow_plus/builder/index.html deleted file mode 100644 index 7025e35c951a..000000000000 --- a/doc/hydroflow_plus/builder/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus::builder - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus/builder/type.FlowState.html b/doc/hydroflow_plus/builder/type.FlowState.html deleted file mode 100644 index b22a73aa488f..000000000000 --- a/doc/hydroflow_plus/builder/type.FlowState.html +++ /dev/null @@ -1 +0,0 @@ -FlowState in hydroflow_plus::builder - Rust

Type Alias hydroflow_plus::builder::FlowState

source ·
pub type FlowState = Rc<RefCell<FlowStateInner>>;

Aliased Type§

struct FlowState { /* private fields */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus/cycle/enum.ForwardRefMarker.html b/doc/hydroflow_plus/cycle/enum.ForwardRefMarker.html deleted file mode 100644 index 8825fb81a895..000000000000 --- a/doc/hydroflow_plus/cycle/enum.ForwardRefMarker.html +++ /dev/null @@ -1,23 +0,0 @@ -ForwardRefMarker in hydroflow_plus::cycle - Rust

Enum hydroflow_plus::cycle::ForwardRefMarker

source ·
pub enum ForwardRefMarker {}

Trait Implementations§

source§

impl<'a, T, L: Location<'a> + NoTick, B> CycleCollection<'a, ForwardRefMarker> for Optional<T, L, B>

source§

type Location = L

source§

fn create_source(ident: Ident, location: L) -> Self

source§

impl<'a, T, L: Location<'a>> CycleCollection<'a, ForwardRefMarker> for Optional<T, Tick<L>, Bounded>

source§

type Location = Tick<L>

source§

fn create_source(ident: Ident, location: Tick<L>) -> Self

source§

impl<'a, T, L: Location<'a> + NoTick, B> CycleCollection<'a, ForwardRefMarker> for Singleton<T, L, B>

source§

type Location = L

source§

fn create_source(ident: Ident, location: L) -> Self

source§

impl<'a, T, L: Location<'a>> CycleCollection<'a, ForwardRefMarker> for Singleton<T, Tick<L>, Bounded>

source§

type Location = Tick<L>

source§

fn create_source(ident: Ident, location: Tick<L>) -> Self

source§

impl<'a, T, L: Location<'a> + NoTick, B, Order> CycleCollection<'a, ForwardRefMarker> for Stream<T, L, B, Order>

source§

type Location = L

source§

fn create_source(ident: Ident, location: L) -> Self

source§

impl<'a, T, L: Location<'a> + NoTick, B> CycleComplete<'a, ForwardRefMarker> for Optional<T, L, B>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

source§

impl<'a, T, L: Location<'a>> CycleComplete<'a, ForwardRefMarker> for Optional<T, Tick<L>, Bounded>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

source§

impl<'a, T, L: Location<'a> + NoTick, B> CycleComplete<'a, ForwardRefMarker> for Singleton<T, L, B>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

source§

impl<'a, T, L: Location<'a>> CycleComplete<'a, ForwardRefMarker> for Singleton<T, Tick<L>, Bounded>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

source§

impl<'a, T, L: Location<'a> + NoTick, B, Order> CycleComplete<'a, ForwardRefMarker> for Stream<T, L, B, Order>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/doc/hydroflow_plus/cycle/index.html b/doc/hydroflow_plus/cycle/index.html deleted file mode 100644 index 0efa23ef9767..000000000000 --- a/doc/hydroflow_plus/cycle/index.html +++ /dev/null @@ -1,2 +0,0 @@ -hydroflow_plus::cycle - Rust

Module hydroflow_plus::cycle

source ·

Structs§

  • Represents a forward reference in the graph that will be fulfilled -by a stream that is not yet known.

Enums§

Traits§

\ No newline at end of file diff --git a/doc/hydroflow_plus/cycle/trait.CycleCollection.html b/doc/hydroflow_plus/cycle/trait.CycleCollection.html deleted file mode 100644 index 7948924ede45..000000000000 --- a/doc/hydroflow_plus/cycle/trait.CycleCollection.html +++ /dev/null @@ -1,6 +0,0 @@ -CycleCollection in hydroflow_plus::cycle - Rust

Trait hydroflow_plus::cycle::CycleCollection

source ·
pub trait CycleCollection<'a, T>: CycleComplete<'a, T> {
-    type Location: Location<'a>;
-
-    // Required method
-    fn create_source(ident: Ident, location: Self::Location) -> Self;
-}

Required Associated Types§

Required Methods§

source

fn create_source(ident: Ident, location: Self::Location) -> Self

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<'a, T, L: Location<'a> + NoTick, B> CycleCollection<'a, ForwardRefMarker> for Optional<T, L, B>

source§

impl<'a, T, L: Location<'a> + NoTick, B> CycleCollection<'a, ForwardRefMarker> for Singleton<T, L, B>

source§

impl<'a, T, L: Location<'a> + NoTick, B, Order> CycleCollection<'a, ForwardRefMarker> for Stream<T, L, B, Order>

source§

impl<'a, T, L: Location<'a>> CycleCollection<'a, ForwardRefMarker> for Optional<T, Tick<L>, Bounded>

source§

impl<'a, T, L: Location<'a>> CycleCollection<'a, ForwardRefMarker> for Singleton<T, Tick<L>, Bounded>

source§

impl<'a, T, L: Location<'a>> CycleCollection<'a, TickCycleMarker> for Optional<T, Tick<L>, Bounded>

source§

impl<'a, T, L: Location<'a>, Order> CycleCollection<'a, TickCycleMarker> for Stream<T, Tick<L>, Bounded, Order>

\ No newline at end of file diff --git a/doc/hydroflow_plus/cycle/trait.CycleCollectionWithInitial.html b/doc/hydroflow_plus/cycle/trait.CycleCollectionWithInitial.html deleted file mode 100644 index ee00dd8f40c4..000000000000 --- a/doc/hydroflow_plus/cycle/trait.CycleCollectionWithInitial.html +++ /dev/null @@ -1,10 +0,0 @@ -CycleCollectionWithInitial in hydroflow_plus::cycle - Rust
pub trait CycleCollectionWithInitial<'a, T>: CycleComplete<'a, T> {
-    type Location: Location<'a>;
-
-    // Required method
-    fn create_source(
-        ident: Ident,
-        initial: Self,
-        location: Self::Location,
-    ) -> Self;
-}

Required Associated Types§

Required Methods§

source

fn create_source(ident: Ident, initial: Self, location: Self::Location) -> Self

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/doc/hydroflow_plus/cycle/trait.CycleComplete.html b/doc/hydroflow_plus/cycle/trait.CycleComplete.html deleted file mode 100644 index 27c01dfcc483..000000000000 --- a/doc/hydroflow_plus/cycle/trait.CycleComplete.html +++ /dev/null @@ -1,4 +0,0 @@ -CycleComplete in hydroflow_plus::cycle - Rust

Trait hydroflow_plus::cycle::CycleComplete

source ·
pub trait CycleComplete<'a, T> {
-    // Required method
-    fn complete(self, ident: Ident, expected_location: LocationId);
-}

Required Methods§

source

fn complete(self, ident: Ident, expected_location: LocationId)

Implementors§

source§

impl<'a, T, L: Location<'a> + NoTick, B> CycleComplete<'a, ForwardRefMarker> for Optional<T, L, B>

source§

impl<'a, T, L: Location<'a> + NoTick, B> CycleComplete<'a, ForwardRefMarker> for Singleton<T, L, B>

source§

impl<'a, T, L: Location<'a> + NoTick, B, Order> CycleComplete<'a, ForwardRefMarker> for Stream<T, L, B, Order>

source§

impl<'a, T, L: Location<'a>> CycleComplete<'a, ForwardRefMarker> for Optional<T, Tick<L>, Bounded>

source§

impl<'a, T, L: Location<'a>> CycleComplete<'a, ForwardRefMarker> for Singleton<T, Tick<L>, Bounded>

source§

impl<'a, T, L: Location<'a>> CycleComplete<'a, TickCycleMarker> for Optional<T, Tick<L>, Bounded>

source§

impl<'a, T, L: Location<'a>> CycleComplete<'a, TickCycleMarker> for Singleton<T, Tick<L>, Bounded>

source§

impl<'a, T, L: Location<'a>, Order> CycleComplete<'a, TickCycleMarker> for Stream<T, Tick<L>, Bounded, Order>

\ No newline at end of file diff --git a/doc/hydroflow_plus/cycle/trait.DeferTick.html b/doc/hydroflow_plus/cycle/trait.DeferTick.html deleted file mode 100644 index 6d83fffbdb30..000000000000 --- a/doc/hydroflow_plus/cycle/trait.DeferTick.html +++ /dev/null @@ -1,4 +0,0 @@ -DeferTick in hydroflow_plus::cycle - Rust

Trait hydroflow_plus::cycle::DeferTick

source ·
pub trait DeferTick {
-    // Required method
-    fn defer_tick(self) -> Self;
-}

Required Methods§

source

fn defer_tick(self) -> Self

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<'a, T, L: Location<'a>> DeferTick for Optional<T, Tick<L>, Bounded>

source§

impl<'a, T, L: Location<'a>> DeferTick for Singleton<T, Tick<L>, Bounded>

source§

impl<'a, T, L: Location<'a>, Order> DeferTick for Stream<T, Tick<L>, Bounded, Order>

\ No newline at end of file diff --git a/doc/hydroflow_plus/deploy/in_memory_graph/index.html b/doc/hydroflow_plus/deploy/in_memory_graph/index.html deleted file mode 100644 index 2f6cac54cf6f..000000000000 --- a/doc/hydroflow_plus/deploy/in_memory_graph/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus::deploy::in_memory_graph - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus/deploy/in_memory_graph/struct.MultiGraph.html b/doc/hydroflow_plus/deploy/in_memory_graph/struct.MultiGraph.html deleted file mode 100644 index a498741b51e0..000000000000 --- a/doc/hydroflow_plus/deploy/in_memory_graph/struct.MultiGraph.html +++ /dev/null @@ -1,23 +0,0 @@ -MultiGraph in hydroflow_plus::deploy::in_memory_graph - Rust

Struct hydroflow_plus::deploy::in_memory_graph::MultiGraph

source ·
pub struct MultiGraph {}

Trait Implementations§

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/doc/hydroflow_plus/deploy/in_memory_graph/struct.SingleProcessGraph.html b/doc/hydroflow_plus/deploy/in_memory_graph/struct.SingleProcessGraph.html deleted file mode 100644 index efdc6aa97951..000000000000 --- a/doc/hydroflow_plus/deploy/in_memory_graph/struct.SingleProcessGraph.html +++ /dev/null @@ -1,23 +0,0 @@ -SingleProcessGraph in hydroflow_plus::deploy::in_memory_graph - Rust
pub struct SingleProcessGraph {}

Trait Implementations§

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/doc/hydroflow_plus/deploy/index.html b/doc/hydroflow_plus/deploy/index.html deleted file mode 100644 index 256a80f7f6da..000000000000 --- a/doc/hydroflow_plus/deploy/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus::deploy - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus/deploy/macro_runtime/index.html b/doc/hydroflow_plus/deploy/macro_runtime/index.html deleted file mode 100644 index b1a02223a90e..000000000000 --- a/doc/hydroflow_plus/deploy/macro_runtime/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus::deploy::macro_runtime - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus/deploy/macro_runtime/struct.DeployRuntime.html b/doc/hydroflow_plus/deploy/macro_runtime/struct.DeployRuntime.html deleted file mode 100644 index 245ea1830aa5..000000000000 --- a/doc/hydroflow_plus/deploy/macro_runtime/struct.DeployRuntime.html +++ /dev/null @@ -1,114 +0,0 @@ -DeployRuntime in hydroflow_plus::deploy::macro_runtime - Rust

Struct hydroflow_plus::deploy::macro_runtime::DeployRuntime

source ·
pub struct DeployRuntime {}

Trait Implementations§

source§

impl ClusterSpec<'_, DeployRuntime> for ()

source§

fn build(self, _id: usize, _name_hint: &str) -> DeployRuntimeCluster

source§

impl<'a> Deploy<'a> for DeployRuntime

source§

type InstantiateEnv = ()

source§

type CompileEnv = RuntimeData<&'a DeployPorts<HydroflowPlusMeta>>

source§

type Process = DeployRuntimeNode

source§

type Cluster = DeployRuntimeCluster

source§

type ExternalProcess = DeployRuntimeNode

source§

type Port = String

source§

type ExternalRawPort = ()

source§

type Meta = ()

source§

type GraphId = usize

Type of ID used to switch between different subgraphs at runtime.
source§

fn has_trivial_node() -> bool

source§

fn trivial_process(_id: usize) -> Self::Process

source§

fn trivial_cluster(_id: usize) -> Self::Cluster

source§

fn allocate_process_port(process: &Self::Process) -> Self::Port

source§

fn allocate_cluster_port(cluster: &Self::Cluster) -> Self::Port

source§

fn allocate_external_port(_external: &Self::ExternalProcess) -> Self::Port

source§

fn o2o_sink_source( - env: &Self::CompileEnv, - _p1: &Self::Process, - p1_port: &Self::Port, - _p2: &Self::Process, - p2_port: &Self::Port, -) -> (Expr, Expr)

source§

fn o2o_connect( - _p1: &Self::Process, - _p1_port: &Self::Port, - _p2: &Self::Process, - _p2_port: &Self::Port, -) -> Box<dyn FnOnce()>

source§

fn o2m_sink_source( - env: &Self::CompileEnv, - _p1: &Self::Process, - p1_port: &Self::Port, - _c2: &Self::Cluster, - c2_port: &Self::Port, -) -> (Expr, Expr)

source§

fn o2m_connect( - _p1: &Self::Process, - _p1_port: &Self::Port, - _c2: &Self::Cluster, - _c2_port: &Self::Port, -) -> Box<dyn FnOnce()>

source§

fn m2o_sink_source( - env: &Self::CompileEnv, - _c1: &Self::Cluster, - c1_port: &Self::Port, - _p2: &Self::Process, - p2_port: &Self::Port, -) -> (Expr, Expr)

source§

fn m2o_connect( - _c1: &Self::Cluster, - _c1_port: &Self::Port, - _p2: &Self::Process, - _p2_port: &Self::Port, -) -> Box<dyn FnOnce()>

source§

fn m2m_sink_source( - env: &Self::CompileEnv, - _c1: &Self::Cluster, - c1_port: &Self::Port, - _c2: &Self::Cluster, - c2_port: &Self::Port, -) -> (Expr, Expr)

source§

fn m2m_connect( - _c1: &Self::Cluster, - _c1_port: &Self::Port, - _c2: &Self::Cluster, - _c2_port: &Self::Port, -) -> Box<dyn FnOnce()>

source§

fn e2o_source( - _compile_env: &Self::CompileEnv, - _p1: &Self::ExternalProcess, - _p1_port: &Self::Port, - _p2: &Self::Process, - _p2_port: &Self::Port, -) -> Expr

source§

fn e2o_connect( - _p1: &Self::ExternalProcess, - _p1_port: &Self::Port, - _p2: &Self::Process, - _p2_port: &Self::Port, -) -> Box<dyn FnOnce()>

source§

fn o2e_sink( - _compile_env: &Self::CompileEnv, - _p1: &Self::Process, - _p1_port: &Self::Port, - _p2: &Self::ExternalProcess, - _p2_port: &Self::Port, -) -> Expr

source§

fn o2e_connect( - _p1: &Self::Process, - _p1_port: &Self::Port, - _p2: &Self::ExternalProcess, - _p2_port: &Self::Port, -) -> Box<dyn FnOnce()>

source§

fn cluster_ids( - env: &Self::CompileEnv, - of_cluster: usize, -) -> impl QuotedWithContext<'a, &'a Vec<u32>, ()> + Copy + 'a

source§

fn cluster_self_id( - env: &Self::CompileEnv, -) -> impl QuotedWithContext<'a, u32, ()> + Copy + 'a

source§

impl ExternalSpec<'_, DeployRuntime> for ()

source§

fn build(self, _id: usize, _name_hint: &str) -> DeployRuntimeNode

source§

impl ProcessSpec<'_, DeployRuntime> for ()

source§

fn build(self, _id: usize, _name_hint: &str) -> DeployRuntimeNode

source§

impl<'a> RegisterPort<'a, DeployRuntime> for DeployRuntimeNode

source§

fn register(&self, _key: usize, _port: <DeployRuntime as Deploy<'_>>::Port)

source§

fn raw_port( - &self, - _key: usize, -) -> <DeployRuntime as Deploy<'_>>::ExternalRawPort

source§

fn as_bytes_sink( - &self, - _key: usize, -) -> impl Future<Output = Pin<Box<dyn Sink<Bytes, Error = Error>>>> + 'a

source§

fn as_bincode_sink<T: Serialize + 'static>( - &self, - _key: usize, -) -> impl Future<Output = Pin<Box<dyn Sink<T, Error = Error>>>> + 'a

source§

fn as_bytes_source( - &self, - _key: usize, -) -> impl Future<Output = Pin<Box<dyn Stream<Item = Bytes>>>> + 'a

source§

fn as_bincode_source<T: DeserializeOwned + 'static>( - &self, - _key: usize, -) -> impl Future<Output = Pin<Box<dyn Stream<Item = T>>>> + 'a

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<'a, T, N, C, E, M, R> LocalDeploy<'a> for T
where - N: Node<Meta = M>, - C: Node<Meta = M>, - T: Deploy<'a, Process = N, Cluster = C, ExternalProcess = E, Meta = M, GraphId = R>, - E: Node<Meta = M>, - M: Default,

source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/doc/hydroflow_plus/deploy/trait.ClusterSpec.html b/doc/hydroflow_plus/deploy/trait.ClusterSpec.html deleted file mode 100644 index 9b2222752ecb..000000000000 --- a/doc/hydroflow_plus/deploy/trait.ClusterSpec.html +++ /dev/null @@ -1,4 +0,0 @@ -ClusterSpec in hydroflow_plus::deploy - Rust

Trait hydroflow_plus::deploy::ClusterSpec

source ·
pub trait ClusterSpec<'a, D: LocalDeploy<'a> + ?Sized> {
-    // Required method
-    fn build(self, id: usize, name_hint: &str) -> D::Cluster;
-}

Required Methods§

source

fn build(self, id: usize, name_hint: &str) -> D::Cluster

Implementations on Foreign Types§

source§

impl ClusterSpec<'_, DeployRuntime> for ()

source§

fn build(self, _id: usize, _name_hint: &str) -> DeployRuntimeCluster

Implementors§

\ No newline at end of file diff --git a/doc/hydroflow_plus/deploy/trait.Deploy.html b/doc/hydroflow_plus/deploy/trait.Deploy.html deleted file mode 100644 index f782030ce6d1..000000000000 --- a/doc/hydroflow_plus/deploy/trait.Deploy.html +++ /dev/null @@ -1,178 +0,0 @@ -Deploy in hydroflow_plus::deploy - Rust

Trait hydroflow_plus::deploy::Deploy

source ·
pub trait Deploy<'a> {
-    type InstantiateEnv;
-    type CompileEnv;
-    type Process: Node<Meta = Self::Meta, InstantiateEnv = Self::InstantiateEnv> + Clone;
-    type Cluster: Node<Meta = Self::Meta, InstantiateEnv = Self::InstantiateEnv> + Clone;
-    type ExternalProcess: Node<Meta = Self::Meta, InstantiateEnv = Self::InstantiateEnv> + RegisterPort<'a, Self>;
-    type Port: Clone;
-    type ExternalRawPort;
-    type Meta: Default;
-    type GraphId;
-
-
Show 20 methods // Required methods - fn allocate_process_port(process: &Self::Process) -> Self::Port; - fn allocate_cluster_port(cluster: &Self::Cluster) -> Self::Port; - fn allocate_external_port(external: &Self::ExternalProcess) -> Self::Port; - fn o2o_sink_source( - compile_env: &Self::CompileEnv, - p1: &Self::Process, - p1_port: &Self::Port, - p2: &Self::Process, - p2_port: &Self::Port, - ) -> (Expr, Expr); - fn o2o_connect( - p1: &Self::Process, - p1_port: &Self::Port, - p2: &Self::Process, - p2_port: &Self::Port, - ) -> Box<dyn FnOnce()>; - fn o2m_sink_source( - compile_env: &Self::CompileEnv, - p1: &Self::Process, - p1_port: &Self::Port, - c2: &Self::Cluster, - c2_port: &Self::Port, - ) -> (Expr, Expr); - fn o2m_connect( - p1: &Self::Process, - p1_port: &Self::Port, - c2: &Self::Cluster, - c2_port: &Self::Port, - ) -> Box<dyn FnOnce()>; - fn m2o_sink_source( - compile_env: &Self::CompileEnv, - c1: &Self::Cluster, - c1_port: &Self::Port, - p2: &Self::Process, - p2_port: &Self::Port, - ) -> (Expr, Expr); - fn m2o_connect( - c1: &Self::Cluster, - c1_port: &Self::Port, - p2: &Self::Process, - p2_port: &Self::Port, - ) -> Box<dyn FnOnce()>; - fn m2m_sink_source( - compile_env: &Self::CompileEnv, - c1: &Self::Cluster, - c1_port: &Self::Port, - c2: &Self::Cluster, - c2_port: &Self::Port, - ) -> (Expr, Expr); - fn m2m_connect( - c1: &Self::Cluster, - c1_port: &Self::Port, - c2: &Self::Cluster, - c2_port: &Self::Port, - ) -> Box<dyn FnOnce()>; - fn e2o_source( - compile_env: &Self::CompileEnv, - p1: &Self::ExternalProcess, - p1_port: &Self::Port, - p2: &Self::Process, - p2_port: &Self::Port, - ) -> Expr; - fn e2o_connect( - p1: &Self::ExternalProcess, - p1_port: &Self::Port, - p2: &Self::Process, - p2_port: &Self::Port, - ) -> Box<dyn FnOnce()>; - fn o2e_sink( - compile_env: &Self::CompileEnv, - p1: &Self::Process, - p1_port: &Self::Port, - p2: &Self::ExternalProcess, - p2_port: &Self::Port, - ) -> Expr; - fn o2e_connect( - p1: &Self::Process, - p1_port: &Self::Port, - p2: &Self::ExternalProcess, - p2_port: &Self::Port, - ) -> Box<dyn FnOnce()>; - fn cluster_ids( - env: &Self::CompileEnv, - of_cluster: usize, - ) -> impl QuotedWithContext<'a, &'a Vec<u32>, ()> + Copy + 'a; - fn cluster_self_id( - env: &Self::CompileEnv, - ) -> impl QuotedWithContext<'a, u32, ()> + Copy + 'a; - - // Provided methods - fn has_trivial_node() -> bool { ... } - fn trivial_process(_id: usize) -> Self::Process { ... } - fn trivial_cluster(_id: usize) -> Self::Cluster { ... } -
}

Required Associated Types§

source

type InstantiateEnv

source

type CompileEnv

source

type Process: Node<Meta = Self::Meta, InstantiateEnv = Self::InstantiateEnv> + Clone

source

type Cluster: Node<Meta = Self::Meta, InstantiateEnv = Self::InstantiateEnv> + Clone

source

type ExternalProcess: Node<Meta = Self::Meta, InstantiateEnv = Self::InstantiateEnv> + RegisterPort<'a, Self>

source

type Port: Clone

source

type ExternalRawPort

source

type Meta: Default

source

type GraphId

Type of ID used to switch between different subgraphs at runtime.

-

Required Methods§

source

fn allocate_process_port(process: &Self::Process) -> Self::Port

source

fn allocate_cluster_port(cluster: &Self::Cluster) -> Self::Port

source

fn allocate_external_port(external: &Self::ExternalProcess) -> Self::Port

source

fn o2o_sink_source( - compile_env: &Self::CompileEnv, - p1: &Self::Process, - p1_port: &Self::Port, - p2: &Self::Process, - p2_port: &Self::Port, -) -> (Expr, Expr)

source

fn o2o_connect( - p1: &Self::Process, - p1_port: &Self::Port, - p2: &Self::Process, - p2_port: &Self::Port, -) -> Box<dyn FnOnce()>

source

fn o2m_sink_source( - compile_env: &Self::CompileEnv, - p1: &Self::Process, - p1_port: &Self::Port, - c2: &Self::Cluster, - c2_port: &Self::Port, -) -> (Expr, Expr)

source

fn o2m_connect( - p1: &Self::Process, - p1_port: &Self::Port, - c2: &Self::Cluster, - c2_port: &Self::Port, -) -> Box<dyn FnOnce()>

source

fn m2o_sink_source( - compile_env: &Self::CompileEnv, - c1: &Self::Cluster, - c1_port: &Self::Port, - p2: &Self::Process, - p2_port: &Self::Port, -) -> (Expr, Expr)

source

fn m2o_connect( - c1: &Self::Cluster, - c1_port: &Self::Port, - p2: &Self::Process, - p2_port: &Self::Port, -) -> Box<dyn FnOnce()>

source

fn m2m_sink_source( - compile_env: &Self::CompileEnv, - c1: &Self::Cluster, - c1_port: &Self::Port, - c2: &Self::Cluster, - c2_port: &Self::Port, -) -> (Expr, Expr)

source

fn m2m_connect( - c1: &Self::Cluster, - c1_port: &Self::Port, - c2: &Self::Cluster, - c2_port: &Self::Port, -) -> Box<dyn FnOnce()>

source

fn e2o_source( - compile_env: &Self::CompileEnv, - p1: &Self::ExternalProcess, - p1_port: &Self::Port, - p2: &Self::Process, - p2_port: &Self::Port, -) -> Expr

source

fn e2o_connect( - p1: &Self::ExternalProcess, - p1_port: &Self::Port, - p2: &Self::Process, - p2_port: &Self::Port, -) -> Box<dyn FnOnce()>

source

fn o2e_sink( - compile_env: &Self::CompileEnv, - p1: &Self::Process, - p1_port: &Self::Port, - p2: &Self::ExternalProcess, - p2_port: &Self::Port, -) -> Expr

source

fn o2e_connect( - p1: &Self::Process, - p1_port: &Self::Port, - p2: &Self::ExternalProcess, - p2_port: &Self::Port, -) -> Box<dyn FnOnce()>

source

fn cluster_ids( - env: &Self::CompileEnv, - of_cluster: usize, -) -> impl QuotedWithContext<'a, &'a Vec<u32>, ()> + Copy + 'a

source

fn cluster_self_id( - env: &Self::CompileEnv, -) -> impl QuotedWithContext<'a, u32, ()> + Copy + 'a

Provided Methods§

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/doc/hydroflow_plus/deploy/trait.ExternalSpec.html b/doc/hydroflow_plus/deploy/trait.ExternalSpec.html deleted file mode 100644 index 3424806c97ed..000000000000 --- a/doc/hydroflow_plus/deploy/trait.ExternalSpec.html +++ /dev/null @@ -1,4 +0,0 @@ -ExternalSpec in hydroflow_plus::deploy - Rust

Trait hydroflow_plus::deploy::ExternalSpec

source ·
pub trait ExternalSpec<'a, D: LocalDeploy<'a> + ?Sized> {
-    // Required method
-    fn build(self, id: usize, name_hint: &str) -> D::ExternalProcess;
-}

Required Methods§

source

fn build(self, id: usize, name_hint: &str) -> D::ExternalProcess

Implementations on Foreign Types§

source§

impl ExternalSpec<'_, DeployRuntime> for ()

source§

fn build(self, _id: usize, _name_hint: &str) -> DeployRuntimeNode

Implementors§

\ No newline at end of file diff --git a/doc/hydroflow_plus/deploy/trait.IntoProcessSpec.html b/doc/hydroflow_plus/deploy/trait.IntoProcessSpec.html deleted file mode 100644 index e2e8fe057f0b..000000000000 --- a/doc/hydroflow_plus/deploy/trait.IntoProcessSpec.html +++ /dev/null @@ -1,6 +0,0 @@ -IntoProcessSpec in hydroflow_plus::deploy - Rust

Trait hydroflow_plus::deploy::IntoProcessSpec

source ·
pub trait IntoProcessSpec<'a, D: LocalDeploy<'a> + ?Sized> {
-    type ProcessSpec: ProcessSpec<'a, D>;
-
-    // Required method
-    fn into_process_spec(self) -> Self::ProcessSpec;
-}

Required Associated Types§

Required Methods§

Implementors§

source§

impl<'a, D: LocalDeploy<'a> + ?Sized, T: ProcessSpec<'a, D>> IntoProcessSpec<'a, D> for T

\ No newline at end of file diff --git a/doc/hydroflow_plus/deploy/trait.LocalDeploy.html b/doc/hydroflow_plus/deploy/trait.LocalDeploy.html deleted file mode 100644 index 22ae1e98ed17..000000000000 --- a/doc/hydroflow_plus/deploy/trait.LocalDeploy.html +++ /dev/null @@ -1,12 +0,0 @@ -LocalDeploy in hydroflow_plus::deploy - Rust

Trait hydroflow_plus::deploy::LocalDeploy

source ·
pub trait LocalDeploy<'a> {
-    type Process: Node<Meta = Self::Meta>;
-    type Cluster: Node<Meta = Self::Meta>;
-    type ExternalProcess: Node<Meta = Self::Meta>;
-    type Meta: Default;
-    type GraphId;
-
-    // Provided methods
-    fn has_trivial_node() -> bool { ... }
-    fn trivial_process(_id: usize) -> Self::Process { ... }
-    fn trivial_cluster(_id: usize) -> Self::Cluster { ... }
-}

Required Associated Types§

source

type Process: Node<Meta = Self::Meta>

source

type Cluster: Node<Meta = Self::Meta>

source

type ExternalProcess: Node<Meta = Self::Meta>

source

type Meta: Default

source

type GraphId

Provided Methods§

Object Safety§

This trait is not object safe.

Implementors§

source§

impl LocalDeploy<'_> for MultiGraph

source§

impl LocalDeploy<'_> for SingleProcessGraph

source§

impl<'a, T: Deploy<'a, Process = N, Cluster = C, ExternalProcess = E, Meta = M, GraphId = R>, N: Node<Meta = M>, C: Node<Meta = M>, E: Node<Meta = M>, M: Default, R> LocalDeploy<'a> for T

\ No newline at end of file diff --git a/doc/hydroflow_plus/deploy/trait.Node.html b/doc/hydroflow_plus/deploy/trait.Node.html deleted file mode 100644 index 69fb06a185cf..000000000000 --- a/doc/hydroflow_plus/deploy/trait.Node.html +++ /dev/null @@ -1,22 +0,0 @@ -Node in hydroflow_plus::deploy - Rust

Trait hydroflow_plus::deploy::Node

source ·
pub trait Node {
-    type Port;
-    type Meta;
-    type InstantiateEnv;
-
-    // Required methods
-    fn next_port(&self) -> Self::Port;
-    fn update_meta(&mut self, meta: &Self::Meta);
-    fn instantiate(
-        &self,
-        env: &mut Self::InstantiateEnv,
-        meta: &mut Self::Meta,
-        graph: HydroflowGraph,
-        extra_stmts: Vec<Stmt>,
-    );
-}

Required Associated Types§

Required Methods§

source

fn next_port(&self) -> Self::Port

source

fn update_meta(&mut self, meta: &Self::Meta)

source

fn instantiate( - &self, - env: &mut Self::InstantiateEnv, - meta: &mut Self::Meta, - graph: HydroflowGraph, - extra_stmts: Vec<Stmt>, -)

Implementors§

\ No newline at end of file diff --git a/doc/hydroflow_plus/deploy/trait.ProcessSpec.html b/doc/hydroflow_plus/deploy/trait.ProcessSpec.html deleted file mode 100644 index 018abf44dab3..000000000000 --- a/doc/hydroflow_plus/deploy/trait.ProcessSpec.html +++ /dev/null @@ -1,4 +0,0 @@ -ProcessSpec in hydroflow_plus::deploy - Rust

Trait hydroflow_plus::deploy::ProcessSpec

source ·
pub trait ProcessSpec<'a, D: LocalDeploy<'a> + ?Sized> {
-    // Required method
-    fn build(self, id: usize, name_hint: &str) -> D::Process;
-}

Required Methods§

source

fn build(self, id: usize, name_hint: &str) -> D::Process

Implementations on Foreign Types§

source§

impl ProcessSpec<'_, MultiGraph> for ()

source§

fn build(self, _id: usize, _name_hint: &str) -> MultiNode

source§

impl ProcessSpec<'_, SingleProcessGraph> for ()

source§

fn build(self, _id: usize, _name_hint: &str) -> SingleNode

source§

impl ProcessSpec<'_, DeployRuntime> for ()

source§

fn build(self, _id: usize, _name_hint: &str) -> DeployRuntimeNode

Implementors§

\ No newline at end of file diff --git a/doc/hydroflow_plus/deploy_runtime/fn.cluster_members.html b/doc/hydroflow_plus/deploy_runtime/fn.cluster_members.html deleted file mode 100644 index fe0b991d46e8..000000000000 --- a/doc/hydroflow_plus/deploy_runtime/fn.cluster_members.html +++ /dev/null @@ -1,4 +0,0 @@ -cluster_members in hydroflow_plus::deploy_runtime - Rust

Function hydroflow_plus::deploy_runtime::cluster_members

source ·
pub fn cluster_members(
-    cli: RuntimeData<&DeployPorts<HydroflowPlusMeta>>,
-    of_cluster: usize,
-) -> impl QuotedWithContext<'_, &Vec<u32>, ()> + Copy
\ No newline at end of file diff --git a/doc/hydroflow_plus/deploy_runtime/fn.cluster_self_id.html b/doc/hydroflow_plus/deploy_runtime/fn.cluster_self_id.html deleted file mode 100644 index 0beafe003d51..000000000000 --- a/doc/hydroflow_plus/deploy_runtime/fn.cluster_self_id.html +++ /dev/null @@ -1,3 +0,0 @@ -cluster_self_id in hydroflow_plus::deploy_runtime - Rust

Function hydroflow_plus::deploy_runtime::cluster_self_id

source ·
pub fn cluster_self_id(
-    cli: RuntimeData<&DeployPorts<HydroflowPlusMeta>>,
-) -> impl QuotedWithContext<'_, u32, ()> + Copy
\ No newline at end of file diff --git a/doc/hydroflow_plus/deploy_runtime/fn.deploy_e2o.html b/doc/hydroflow_plus/deploy_runtime/fn.deploy_e2o.html deleted file mode 100644 index fb6e7e8ddf3b..000000000000 --- a/doc/hydroflow_plus/deploy_runtime/fn.deploy_e2o.html +++ /dev/null @@ -1,5 +0,0 @@ -deploy_e2o in hydroflow_plus::deploy_runtime - Rust

Function hydroflow_plus::deploy_runtime::deploy_e2o

source ·
pub fn deploy_e2o(
-    env: RuntimeData<&DeployPorts<HydroflowPlusMeta>>,
-    _e1_port: &str,
-    p2_port: &str,
-) -> Expr
\ No newline at end of file diff --git a/doc/hydroflow_plus/deploy_runtime/fn.deploy_m2m.html b/doc/hydroflow_plus/deploy_runtime/fn.deploy_m2m.html deleted file mode 100644 index c660f47c14e3..000000000000 --- a/doc/hydroflow_plus/deploy_runtime/fn.deploy_m2m.html +++ /dev/null @@ -1,5 +0,0 @@ -deploy_m2m in hydroflow_plus::deploy_runtime - Rust

Function hydroflow_plus::deploy_runtime::deploy_m2m

source ·
pub fn deploy_m2m(
-    env: RuntimeData<&DeployPorts<HydroflowPlusMeta>>,
-    c1_port: &str,
-    c2_port: &str,
-) -> (Expr, Expr)
\ No newline at end of file diff --git a/doc/hydroflow_plus/deploy_runtime/fn.deploy_m2o.html b/doc/hydroflow_plus/deploy_runtime/fn.deploy_m2o.html deleted file mode 100644 index 25ccbbcc093e..000000000000 --- a/doc/hydroflow_plus/deploy_runtime/fn.deploy_m2o.html +++ /dev/null @@ -1,5 +0,0 @@ -deploy_m2o in hydroflow_plus::deploy_runtime - Rust

Function hydroflow_plus::deploy_runtime::deploy_m2o

source ·
pub fn deploy_m2o(
-    env: RuntimeData<&DeployPorts<HydroflowPlusMeta>>,
-    c1_port: &str,
-    p2_port: &str,
-) -> (Expr, Expr)
\ No newline at end of file diff --git a/doc/hydroflow_plus/deploy_runtime/fn.deploy_o2e.html b/doc/hydroflow_plus/deploy_runtime/fn.deploy_o2e.html deleted file mode 100644 index 487572117f2a..000000000000 --- a/doc/hydroflow_plus/deploy_runtime/fn.deploy_o2e.html +++ /dev/null @@ -1,5 +0,0 @@ -deploy_o2e in hydroflow_plus::deploy_runtime - Rust

Function hydroflow_plus::deploy_runtime::deploy_o2e

source ·
pub fn deploy_o2e(
-    env: RuntimeData<&DeployPorts<HydroflowPlusMeta>>,
-    p1_port: &str,
-    _e2_port: &str,
-) -> Expr
\ No newline at end of file diff --git a/doc/hydroflow_plus/deploy_runtime/fn.deploy_o2m.html b/doc/hydroflow_plus/deploy_runtime/fn.deploy_o2m.html deleted file mode 100644 index 7490f1340275..000000000000 --- a/doc/hydroflow_plus/deploy_runtime/fn.deploy_o2m.html +++ /dev/null @@ -1,5 +0,0 @@ -deploy_o2m in hydroflow_plus::deploy_runtime - Rust

Function hydroflow_plus::deploy_runtime::deploy_o2m

source ·
pub fn deploy_o2m(
-    env: RuntimeData<&DeployPorts<HydroflowPlusMeta>>,
-    p1_port: &str,
-    c2_port: &str,
-) -> (Expr, Expr)
\ No newline at end of file diff --git a/doc/hydroflow_plus/deploy_runtime/fn.deploy_o2o.html b/doc/hydroflow_plus/deploy_runtime/fn.deploy_o2o.html deleted file mode 100644 index 0e87ab2ab464..000000000000 --- a/doc/hydroflow_plus/deploy_runtime/fn.deploy_o2o.html +++ /dev/null @@ -1,5 +0,0 @@ -deploy_o2o in hydroflow_plus::deploy_runtime - Rust

Function hydroflow_plus::deploy_runtime::deploy_o2o

source ·
pub fn deploy_o2o(
-    env: RuntimeData<&DeployPorts<HydroflowPlusMeta>>,
-    p1_port: &str,
-    p2_port: &str,
-) -> (Expr, Expr)
\ No newline at end of file diff --git a/doc/hydroflow_plus/deploy_runtime/index.html b/doc/hydroflow_plus/deploy_runtime/index.html deleted file mode 100644 index 89128d3498da..000000000000 --- a/doc/hydroflow_plus/deploy_runtime/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus::deploy_runtime - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus/index.html b/doc/hydroflow_plus/index.html deleted file mode 100644 index 4c3195034701..000000000000 --- a/doc/hydroflow_plus/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus - Rust

Crate hydroflow_plus

source ·

Re-exports§

Modules§

Macros§

  • Creates a quoted expression for Hydroflow+.
\ No newline at end of file diff --git a/doc/hydroflow_plus/ir/enum.HfPlusNode.html b/doc/hydroflow_plus/ir/enum.HfPlusNode.html deleted file mode 100644 index 895e91605f4b..000000000000 --- a/doc/hydroflow_plus/ir/enum.HfPlusNode.html +++ /dev/null @@ -1,123 +0,0 @@ -HfPlusNode in hydroflow_plus::ir - Rust

Enum hydroflow_plus::ir::HfPlusNode

source ·
pub enum HfPlusNode {
-
Show 27 variants Placeholder, - Source { - source: HfPlusSource, - location_kind: LocationId, - }, - CycleSource { - ident: Ident, - location_kind: LocationId, - }, - Tee { - inner: TeeNode, - }, - Persist(Box<HfPlusNode>), - Unpersist(Box<HfPlusNode>), - Delta(Box<HfPlusNode>), - Chain(Box<HfPlusNode>, Box<HfPlusNode>), - CrossProduct(Box<HfPlusNode>, Box<HfPlusNode>), - CrossSingleton(Box<HfPlusNode>, Box<HfPlusNode>), - Join(Box<HfPlusNode>, Box<HfPlusNode>), - Difference(Box<HfPlusNode>, Box<HfPlusNode>), - AntiJoin(Box<HfPlusNode>, Box<HfPlusNode>), - Map { - f: DebugExpr, - input: Box<HfPlusNode>, - }, - FlatMap { - f: DebugExpr, - input: Box<HfPlusNode>, - }, - Filter { - f: DebugExpr, - input: Box<HfPlusNode>, - }, - FilterMap { - f: DebugExpr, - input: Box<HfPlusNode>, - }, - DeferTick(Box<HfPlusNode>), - Enumerate { - is_static: bool, - input: Box<HfPlusNode>, - }, - Inspect { - f: DebugExpr, - input: Box<HfPlusNode>, - }, - Unique(Box<HfPlusNode>), - Sort(Box<HfPlusNode>), - Fold { - init: DebugExpr, - acc: DebugExpr, - input: Box<HfPlusNode>, - }, - FoldKeyed { - init: DebugExpr, - acc: DebugExpr, - input: Box<HfPlusNode>, - }, - Reduce { - f: DebugExpr, - input: Box<HfPlusNode>, - }, - ReduceKeyed { - f: DebugExpr, - input: Box<HfPlusNode>, - }, - Network { - from_location: LocationId, - from_key: Option<usize>, - to_location: LocationId, - to_key: Option<usize>, - serialize_fn: Option<DebugExpr>, - instantiate_fn: DebugInstantiate, - deserialize_fn: Option<DebugExpr>, - input: Box<HfPlusNode>, - }, -
}
Expand description

An intermediate node in a Hydroflow+ graph, which consumes data -from upstream nodes and emits data to downstream nodes.

-

Variants§

§

Placeholder

§

Source

Fields

§location_kind: LocationId
§

CycleSource

Fields

§ident: Ident
§location_kind: LocationId
§

Tee

Fields

§inner: TeeNode
§

Persist(Box<HfPlusNode>)

§

Unpersist(Box<HfPlusNode>)

§

Delta(Box<HfPlusNode>)

§

Chain(Box<HfPlusNode>, Box<HfPlusNode>)

§

CrossProduct(Box<HfPlusNode>, Box<HfPlusNode>)

§

CrossSingleton(Box<HfPlusNode>, Box<HfPlusNode>)

§

Join(Box<HfPlusNode>, Box<HfPlusNode>)

§

Difference(Box<HfPlusNode>, Box<HfPlusNode>)

§

AntiJoin(Box<HfPlusNode>, Box<HfPlusNode>)

§

Map

Fields

§

FlatMap

Fields

§

Filter

Fields

§

FilterMap

Fields

§

DeferTick(Box<HfPlusNode>)

§

Enumerate

Fields

§is_static: bool
§

Inspect

Fields

§

Unique(Box<HfPlusNode>)

§

Sort(Box<HfPlusNode>)

§

Fold

Fields

§

FoldKeyed

Fields

§

Reduce

Fields

§

ReduceKeyed

Fields

§

Network

Fields

§from_location: LocationId
§from_key: Option<usize>
§to_location: LocationId
§to_key: Option<usize>
§serialize_fn: Option<DebugExpr>
§instantiate_fn: DebugInstantiate
§deserialize_fn: Option<DebugExpr>

Implementations§

source§

impl<'a> HfPlusNode

source

pub fn compile_network<D: Deploy<'a>>( - &mut self, - compile_env: &D::CompileEnv, - seen_tees: &mut SeenTees, - nodes: &HashMap<usize, D::Process>, - clusters: &HashMap<usize, D::Cluster>, - externals: &HashMap<usize, D::ExternalProcess>, -)

source

pub fn connect_network(&mut self, seen_tees: &mut SeenTees)

source

pub fn transform_bottom_up<C>( - &mut self, - transform: impl FnMut(&mut HfPlusNode, &mut C) + Copy, - seen_tees: &mut SeenTees, - ctx: &mut C, -)

source

pub fn transform_children( - &mut self, - transform: impl FnMut(&mut HfPlusNode, &mut SeenTees), - seen_tees: &mut SeenTees, -)

source

pub fn emit( - &self, - graph_builders: &mut BTreeMap<usize, FlatGraphBuilder>, - built_tees: &mut HashMap<*const RefCell<HfPlusNode>, (Ident, usize)>, - next_stmt_id: &mut usize, -) -> (Ident, usize)

Trait Implementations§

source§

impl Debug for HfPlusNode

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/doc/hydroflow_plus/ir/fn.dbg_dedup_tee.html b/doc/hydroflow_plus/ir/fn.dbg_dedup_tee.html deleted file mode 100644 index a2b96f606a0a..000000000000 --- a/doc/hydroflow_plus/ir/fn.dbg_dedup_tee.html +++ /dev/null @@ -1 +0,0 @@ -dbg_dedup_tee in hydroflow_plus::ir - Rust

Function hydroflow_plus::ir::dbg_dedup_tee

source ·
pub fn dbg_dedup_tee<T>(f: impl FnOnce() -> T) -> T
\ No newline at end of file diff --git a/doc/hydroflow_plus/ir/index.html b/doc/hydroflow_plus/ir/index.html deleted file mode 100644 index 6cc6eda4a430..000000000000 --- a/doc/hydroflow_plus/ir/index.html +++ /dev/null @@ -1,4 +0,0 @@ -hydroflow_plus::ir - Rust

Module hydroflow_plus::ir

source ·

Structs§

Enums§

  • An leaf in a Hydroflow+ graph, which is an pipeline that doesn’t emit -any downstream values. Traversals over the dataflow graph and -generating Hydroflow IR start from leaves.
  • An intermediate node in a Hydroflow+ graph, which consumes data -from upstream nodes and emits data to downstream nodes.
  • A source in a Hydroflow+ graph, where data enters the graph.

Functions§

Type Aliases§

\ No newline at end of file diff --git a/doc/hydroflow_plus/ir/sidebar-items.js b/doc/hydroflow_plus/ir/sidebar-items.js deleted file mode 100644 index 0b35a14c3dc5..000000000000 --- a/doc/hydroflow_plus/ir/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -window.SIDEBAR_ITEMS = {"enum":["DebugInstantiate","HfPlusLeaf","HfPlusNode","HfPlusSource"],"fn":["dbg_dedup_tee"],"struct":["DebugExpr","TeeNode"],"type":["SeenTees"]}; \ No newline at end of file diff --git a/doc/hydroflow_plus/ir/type.SeenTees.html b/doc/hydroflow_plus/ir/type.SeenTees.html deleted file mode 100644 index 985912d29148..000000000000 --- a/doc/hydroflow_plus/ir/type.SeenTees.html +++ /dev/null @@ -1 +0,0 @@ -SeenTees in hydroflow_plus::ir - Rust

Type Alias hydroflow_plus::ir::SeenTees

source ·
pub type SeenTees = HashMap<*const RefCell<HfPlusNode>, Rc<RefCell<HfPlusNode>>>;

Aliased Type§

struct SeenTees { /* private fields */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus/location/can_send/index.html b/doc/hydroflow_plus/location/can_send/index.html deleted file mode 100644 index 113d9d584a98..000000000000 --- a/doc/hydroflow_plus/location/can_send/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus::location::can_send - Rust

Module hydroflow_plus::location::can_send

source ·

Traits§

\ No newline at end of file diff --git a/doc/hydroflow_plus/location/can_send/trait.CanSend.html b/doc/hydroflow_plus/location/can_send/trait.CanSend.html deleted file mode 100644 index 35b798b8b22e..000000000000 --- a/doc/hydroflow_plus/location/can_send/trait.CanSend.html +++ /dev/null @@ -1,11 +0,0 @@ -CanSend in hydroflow_plus::location::can_send - Rust

Trait hydroflow_plus::location::can_send::CanSend

source ·
pub trait CanSend<'a, To: Location<'a>>: Location<'a> {
-    type In<T>;
-    type Out<T>;
-    type OutStrongestOrder<InOrder>;
-
-    // Required methods
-    fn is_demux() -> bool;
-    fn tagged_type() -> Option<Type>;
-}

Required Associated Types§

source

type In<T>

source

type Out<T>

source

type OutStrongestOrder<InOrder>

Given the ordering guarantees of the input, determines the strongest possible -ordering guarantees of the output.

-

Required Methods§

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<'a, C1, C2> CanSend<'a, Cluster<'a, C2>> for Cluster<'a, C1>

source§

type In<T> = (ClusterId<C2>, T)

source§

type Out<T> = (ClusterId<C1>, T)

source§

type OutStrongestOrder<InOrder> = NoOrder

source§

impl<'a, C1, P2> CanSend<'a, Process<'a, P2>> for Cluster<'a, C1>

source§

type In<T> = T

source§

type Out<T> = (ClusterId<C1>, T)

source§

type OutStrongestOrder<InOrder> = NoOrder

source§

impl<'a, P1, C2> CanSend<'a, Cluster<'a, C2>> for Process<'a, P1>

source§

type In<T> = (ClusterId<C2>, T)

source§

type Out<T> = T

source§

type OutStrongestOrder<InOrder> = InOrder

source§

impl<'a, P1, E2> CanSend<'a, ExternalProcess<'a, E2>> for Process<'a, P1>

source§

type In<T> = T

source§

type Out<T> = T

source§

type OutStrongestOrder<InOrder> = InOrder

source§

impl<'a, P1, P2> CanSend<'a, Process<'a, P2>> for Process<'a, P1>

source§

type In<T> = T

source§

type Out<T> = T

source§

type OutStrongestOrder<InOrder> = InOrder

\ No newline at end of file diff --git a/doc/hydroflow_plus/location/cluster/cluster_id/index.html b/doc/hydroflow_plus/location/cluster/cluster_id/index.html deleted file mode 100644 index 308f18c1f718..000000000000 --- a/doc/hydroflow_plus/location/cluster/cluster_id/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus::location::cluster::cluster_id - Rust

Module hydroflow_plus::location::cluster::cluster_id

source ·

Structs§

\ No newline at end of file diff --git a/doc/hydroflow_plus/location/cluster/index.html b/doc/hydroflow_plus/location/cluster/index.html deleted file mode 100644 index c674e4bd687b..000000000000 --- a/doc/hydroflow_plus/location/cluster/index.html +++ /dev/null @@ -1,2 +0,0 @@ -hydroflow_plus::location::cluster - Rust

Module hydroflow_plus::location::cluster

source ·

Re-exports§

Modules§

Structs§

Statics§

  • A free variable representing the cluster’s own ID. When spliced in -a quoted snippet that will run on a cluster, this turns into a ClusterId.

Traits§

\ No newline at end of file diff --git a/doc/hydroflow_plus/location/cluster/static.CLUSTER_SELF_ID.html b/doc/hydroflow_plus/location/cluster/static.CLUSTER_SELF_ID.html deleted file mode 100644 index e71ea1afef71..000000000000 --- a/doc/hydroflow_plus/location/cluster/static.CLUSTER_SELF_ID.html +++ /dev/null @@ -1,3 +0,0 @@ -CLUSTER_SELF_ID in hydroflow_plus::location::cluster - Rust

Static hydroflow_plus::location::cluster::CLUSTER_SELF_ID

source ·
pub static CLUSTER_SELF_ID: ClusterSelfId<'_>
Expand description

A free variable representing the cluster’s own ID. When spliced in -a quoted snippet that will run on a cluster, this turns into a ClusterId.

-
\ No newline at end of file diff --git a/doc/hydroflow_plus/location/cluster/trait.IsCluster.html b/doc/hydroflow_plus/location/cluster/trait.IsCluster.html deleted file mode 100644 index 6d3bc88aa91a..000000000000 --- a/doc/hydroflow_plus/location/cluster/trait.IsCluster.html +++ /dev/null @@ -1,3 +0,0 @@ -IsCluster in hydroflow_plus::location::cluster - Rust

Trait hydroflow_plus::location::cluster::IsCluster

source ·
pub trait IsCluster {
-    type Tag;
-}

Required Associated Types§

Implementors§

source§

impl<C> IsCluster for Cluster<'_, C>

source§

type Tag = C

\ No newline at end of file diff --git a/doc/hydroflow_plus/location/external_process/index.html b/doc/hydroflow_plus/location/external_process/index.html deleted file mode 100644 index 771829074e89..000000000000 --- a/doc/hydroflow_plus/location/external_process/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus::location::external_process - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus/location/fn.check_matching_location.html b/doc/hydroflow_plus/location/fn.check_matching_location.html deleted file mode 100644 index 662a446c6526..000000000000 --- a/doc/hydroflow_plus/location/fn.check_matching_location.html +++ /dev/null @@ -1 +0,0 @@ -check_matching_location in hydroflow_plus::location - Rust

Function hydroflow_plus::location::check_matching_location

source ·
pub fn check_matching_location<'a, L: Location<'a>>(l1: &L, l2: &L)
\ No newline at end of file diff --git a/doc/hydroflow_plus/location/index.html b/doc/hydroflow_plus/location/index.html deleted file mode 100644 index 1f69c7ab5477..000000000000 --- a/doc/hydroflow_plus/location/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus::location - Rust

Module hydroflow_plus::location

source ·

Re-exports§

Modules§

Enums§

Traits§

Functions§

\ No newline at end of file diff --git a/doc/hydroflow_plus/location/process/index.html b/doc/hydroflow_plus/location/process/index.html deleted file mode 100644 index 19f2e694abbe..000000000000 --- a/doc/hydroflow_plus/location/process/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus::location::process - Rust

Module hydroflow_plus::location::process

source ·

Structs§

\ No newline at end of file diff --git a/doc/hydroflow_plus/location/tick/index.html b/doc/hydroflow_plus/location/tick/index.html deleted file mode 100644 index a6dac3927b24..000000000000 --- a/doc/hydroflow_plus/location/tick/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus::location::tick - Rust

Module hydroflow_plus::location::tick

source ·

Structs§

  • Marks the stream as being inside the single global clock domain.

Traits§

\ No newline at end of file diff --git a/doc/hydroflow_plus/location/tick/trait.NoTick.html b/doc/hydroflow_plus/location/tick/trait.NoTick.html deleted file mode 100644 index 7587e8dc3d9b..000000000000 --- a/doc/hydroflow_plus/location/tick/trait.NoTick.html +++ /dev/null @@ -1 +0,0 @@ -NoTick in hydroflow_plus::location::tick - Rust

Trait hydroflow_plus::location::tick::NoTick

source ·
pub trait NoTick: Sealed { }

Implementors§

source§

impl<L> NoTick for Timestamped<L>

source§

impl<T> NoTick for Cluster<'_, T>

source§

impl<T> NoTick for Process<'_, T>

\ No newline at end of file diff --git a/doc/hydroflow_plus/location/tick/trait.NoTimestamp.html b/doc/hydroflow_plus/location/tick/trait.NoTimestamp.html deleted file mode 100644 index d5cdea681b26..000000000000 --- a/doc/hydroflow_plus/location/tick/trait.NoTimestamp.html +++ /dev/null @@ -1 +0,0 @@ -NoTimestamp in hydroflow_plus::location::tick - Rust

Trait hydroflow_plus::location::tick::NoTimestamp

source ·
pub trait NoTimestamp: Sealed { }

Implementors§

source§

impl<'a, L: Location<'a>> NoTimestamp for Tick<L>

source§

impl<T> NoTimestamp for Cluster<'_, T>

source§

impl<T> NoTimestamp for Process<'_, T>

\ No newline at end of file diff --git a/doc/hydroflow_plus/location/trait.Location.html b/doc/hydroflow_plus/location/trait.Location.html deleted file mode 100644 index 6a9a7abe2cf6..000000000000 --- a/doc/hydroflow_plus/location/trait.Location.html +++ /dev/null @@ -1,86 +0,0 @@ -Location in hydroflow_plus::location - Rust

Trait hydroflow_plus::location::Location

source ·
pub trait Location<'a>: Clone {
-    type Root: Location<'a>;
-
-    // Required methods
-    fn root(&self) -> Self::Root;
-    fn id(&self) -> LocationId;
-    fn flow_state(&self) -> &FlowState;
-    fn is_top_level() -> bool;
-
-    // Provided methods
-    fn tick(&self) -> Tick<Self>
-       where Self: NoTick { ... }
-    fn spin(&self) -> Stream<(), Self, Unbounded>
-       where Self: Sized + NoTick { ... }
-    fn source_stream<T, E: FuturesStream<Item = T> + Unpin>(
-        &self,
-        e: impl QuotedWithContext<'a, E, Self>,
-    ) -> Stream<T, Self, Unbounded>
-       where Self: Sized + NoTick { ... }
-    fn source_iter<T, E: IntoIterator<Item = T>>(
-        &self,
-        e: impl QuotedWithContext<'a, E, Self>,
-    ) -> Stream<T, Self, Unbounded>
-       where Self: Sized + NoTick { ... }
-    fn singleton<T: Clone>(
-        &self,
-        e: impl QuotedWithContext<'a, T, Self>,
-    ) -> Singleton<T, Self, Unbounded>
-       where Self: Sized + NoTick { ... }
-    unsafe fn source_interval(
-        &self,
-        interval: impl QuotedWithContext<'a, Duration, Self> + Copy + 'a,
-    ) -> Stream<Instant, Self, Unbounded>
-       where Self: Sized + NoTick { ... }
-    unsafe fn source_interval_delayed(
-        &self,
-        delay: impl QuotedWithContext<'a, Duration, Self> + Copy + 'a,
-        interval: impl QuotedWithContext<'a, Duration, Self> + Copy + 'a,
-    ) -> Stream<Instant, Self, Unbounded>
-       where Self: Sized + NoTick { ... }
-    fn forward_ref<S: CycleCollection<'a, ForwardRefMarker, Location = Self>>(
-        &self,
-    ) -> (ForwardRef<'a, S>, S)
-       where Self: NoTick { ... }
-}

Required Associated Types§

Required Methods§

source

fn root(&self) -> Self::Root

source

fn id(&self) -> LocationId

source

fn flow_state(&self) -> &FlowState

source

fn is_top_level() -> bool

Provided Methods§

source

fn tick(&self) -> Tick<Self>
where - Self: NoTick,

source

fn spin(&self) -> Stream<(), Self, Unbounded>
where - Self: Sized + NoTick,

source

fn source_stream<T, E: FuturesStream<Item = T> + Unpin>( - &self, - e: impl QuotedWithContext<'a, E, Self>, -) -> Stream<T, Self, Unbounded>
where - Self: Sized + NoTick,

source

fn source_iter<T, E: IntoIterator<Item = T>>( - &self, - e: impl QuotedWithContext<'a, E, Self>, -) -> Stream<T, Self, Unbounded>
where - Self: Sized + NoTick,

source

fn singleton<T: Clone>( - &self, - e: impl QuotedWithContext<'a, T, Self>, -) -> Singleton<T, Self, Unbounded>
where - Self: Sized + NoTick,

source

unsafe fn source_interval( - &self, - interval: impl QuotedWithContext<'a, Duration, Self> + Copy + 'a, -) -> Stream<Instant, Self, Unbounded>
where - Self: Sized + NoTick,

Generates a stream with values emitted at a fixed interval, with -each value being the current time (as an [tokio::time::Instant]).

-

The clock source used is monotonic, so elements will be emitted in -increasing order.

-
§Safety
-

Because this stream is generated by an OS timer, it will be -non-deterministic because each timestamp will be arbitrary.

-
source

unsafe fn source_interval_delayed( - &self, - delay: impl QuotedWithContext<'a, Duration, Self> + Copy + 'a, - interval: impl QuotedWithContext<'a, Duration, Self> + Copy + 'a, -) -> Stream<Instant, Self, Unbounded>
where - Self: Sized + NoTick,

Generates a stream with values emitted at a fixed interval (with an -initial delay), with each value being the current time -(as an [tokio::time::Instant]).

-

The clock source used is monotonic, so elements will be emitted in -increasing order.

-
§Safety
-

Because this stream is generated by an OS timer, it will be -non-deterministic because each timestamp will be arbitrary.

-
source

fn forward_ref<S: CycleCollection<'a, ForwardRefMarker, Location = Self>>( - &self, -) -> (ForwardRef<'a, S>, S)
where - Self: NoTick,

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<'a, C> Location<'a> for Cluster<'a, C>

source§

type Root = Cluster<'a, C>

source§

impl<'a, L: Location<'a>> Location<'a> for Tick<L>

source§

type Root = <L as Location<'a>>::Root

source§

impl<'a, L: Location<'a>> Location<'a> for Timestamped<L>

source§

type Root = <L as Location<'a>>::Root

source§

impl<'a, P> Location<'a> for ExternalProcess<'a, P>

source§

impl<'a, P> Location<'a> for Process<'a, P>

source§

type Root = Process<'a, P>

\ No newline at end of file diff --git a/doc/hydroflow_plus/macro.q.html b/doc/hydroflow_plus/macro.q.html deleted file mode 100644 index ecad961e3d7d..000000000000 --- a/doc/hydroflow_plus/macro.q.html +++ /dev/null @@ -1,7 +0,0 @@ -q in hydroflow_plus - Rust

Macro hydroflow_plus::q

source ·
q!() { /* proc-macro */ }
Expand description

Creates a quoted expression for Hydroflow+.

-

Creates a quoted expression, which can be typechecked but has its AST serialized -until it is spliced into a staged entrypoint. Returns a value which implements -Quoted<T>, where T is the type of the expression, and also may implement -IntoQuotedMut<T> is the values it captures would be safe to capture inside an -FnMut context.

-
\ No newline at end of file diff --git a/doc/hydroflow_plus/optional/index.html b/doc/hydroflow_plus/optional/index.html deleted file mode 100644 index cddb2028b204..000000000000 --- a/doc/hydroflow_plus/optional/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus::optional - Rust

Module hydroflow_plus::optional

source ·

Structs§

\ No newline at end of file diff --git a/doc/hydroflow_plus/optional/struct.Optional.html b/doc/hydroflow_plus/optional/struct.Optional.html deleted file mode 100644 index 5730cf7bd417..000000000000 --- a/doc/hydroflow_plus/optional/struct.Optional.html +++ /dev/null @@ -1,82 +0,0 @@ -Optional in hydroflow_plus::optional - Rust

Struct hydroflow_plus::optional::Optional

source ·
pub struct Optional<T, L, B> { /* private fields */ }

Implementations§

source§

impl<'a, T, L: Location<'a>, B> Optional<T, L, B>

source

pub fn some(singleton: Singleton<T, L, B>) -> Self

source§

impl<'a, T, L: Location<'a>, B> Optional<T, L, B>

source

pub fn map<U, F: Fn(T) -> U + 'a>( - self, - f: impl IntoQuotedMut<'a, F, L>, -) -> Optional<U, L, B>

source

pub fn flat_map_ordered<U, I: IntoIterator<Item = U>, F: Fn(T) -> I + 'a>( - self, - f: impl IntoQuotedMut<'a, F, L>, -) -> Stream<U, L, B>

source

pub fn flat_map_unordered<U, I: IntoIterator<Item = U>, F: Fn(T) -> I + 'a>( - self, - f: impl IntoQuotedMut<'a, F, L>, -) -> Stream<U, L, B, NoOrder>

source

pub fn flatten_ordered<U>(self) -> Stream<U, L, B>
where - T: IntoIterator<Item = U>,

source

pub fn flatten_unordered<U>(self) -> Stream<U, L, B, NoOrder>
where - T: IntoIterator<Item = U>,

source

pub fn filter<F: Fn(&T) -> bool + 'a>( - self, - f: impl IntoQuotedMut<'a, F, L>, -) -> Optional<T, L, B>

source

pub fn filter_map<U, F: Fn(T) -> Option<U> + 'a>( - self, - f: impl IntoQuotedMut<'a, F, L>, -) -> Optional<U, L, B>

source

pub fn union(self, other: Optional<T, L, B>) -> Optional<T, L, B>

source

pub fn zip<O>( - self, - other: impl Into<Optional<O, L, B>>, -) -> Optional<(T, O), L, B>
where - O: Clone,

source

pub fn unwrap_or(self, other: Singleton<T, L, B>) -> Singleton<T, L, B>

source

pub fn into_singleton(self) -> Singleton<Option<T>, L, B>
where - T: Clone,

source§

impl<'a, T, L: Location<'a>> Optional<T, L, Bounded>

source

pub fn continue_if<U>( - self, - signal: Optional<U, L, Bounded>, -) -> Optional<T, L, Bounded>

source

pub fn continue_unless<U>( - self, - other: Optional<U, L, Bounded>, -) -> Optional<T, L, Bounded>

source

pub fn then<U>(self, value: Singleton<U, L, Bounded>) -> Optional<U, L, Bounded>
where - Singleton<U, L, Bounded>: ZipResult<'a, Optional<(), L, Bounded>, Location = L, Out = Optional<(U, ()), L, Bounded>>,

source

pub fn into_stream(self) -> Stream<T, L, Bounded>

source§

impl<'a, T, L: Location<'a> + NoTick, B> Optional<T, Timestamped<L>, B>

source

pub unsafe fn latest_tick(self) -> Optional<T, Tick<L>, Bounded>

Given a tick, returns a optional value corresponding to a snapshot of the optional -as of that tick. The snapshot at tick t + 1 is guaranteed to include at least all -relevant data that contributed to the snapshot at tick t.

-
§Safety
-

Because this picks a snapshot of a optional whose value is continuously changing, -the output optional has a non-deterministic value since the snapshot can be at an -arbitrary point in time.

-
source

pub fn drop_timestamp(self) -> Optional<T, L, B>

source§

impl<'a, T, L: Location<'a> + NoTick, B> Optional<T, L, B>

source

pub fn timestamped(self, tick: &Tick<L>) -> Optional<T, Timestamped<L>, B>

source

pub unsafe fn sample_eager(self) -> Stream<T, L, Unbounded>

Eagerly samples the optional as fast as possible, returning a stream of snapshots -with order corresponding to increasing prefixes of data contributing to the optional.

-
§Safety
-

At runtime, the optional will be arbitrarily sampled as fast as possible, but due -to non-deterministic batching and arrival of inputs, the output stream is -non-deterministic.

-
source

pub unsafe fn sample_every( - self, - interval: impl QuotedWithContext<'a, Duration, L> + Copy + 'a, -) -> Stream<T, L, Unbounded>
where - L: NoTimestamp,

Given a time interval, returns a stream corresponding to snapshots of the optional -value taken at various points in time. Because the input optional may be -Unbounded, there are no guarantees on what these snapshots are other than they -represent the value of the optional given some prefix of the streams leading up to -it.

-
§Safety
-

The output stream is non-deterministic in which elements are sampled, since this -is controlled by a clock.

-
source§

impl<'a, T, L: Location<'a>> Optional<T, Tick<L>, Bounded>

source

pub fn all_ticks(self) -> Stream<T, Timestamped<L>, Unbounded>

source

pub fn latest(self) -> Optional<T, Timestamped<L>, Unbounded>

source

pub fn defer_tick(self) -> Optional<T, Tick<L>, Bounded>

source

pub fn persist(self) -> Stream<T, Tick<L>, Bounded>

source

pub fn delta(self) -> Optional<T, Tick<L>, Bounded>

Trait Implementations§

source§

impl<'a, T: Clone, L: Location<'a>, B> Clone for Optional<T, L, B>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a, T, L: Location<'a> + NoTick, B> CycleCollection<'a, ForwardRefMarker> for Optional<T, L, B>

source§

type Location = L

source§

fn create_source(ident: Ident, location: L) -> Self

source§

impl<'a, T, L: Location<'a>> CycleCollection<'a, ForwardRefMarker> for Optional<T, Tick<L>, Bounded>

source§

type Location = Tick<L>

source§

fn create_source(ident: Ident, location: Tick<L>) -> Self

source§

impl<'a, T, L: Location<'a>> CycleCollection<'a, TickCycleMarker> for Optional<T, Tick<L>, Bounded>

source§

type Location = Tick<L>

source§

fn create_source(ident: Ident, location: Tick<L>) -> Self

source§

impl<'a, T, L: Location<'a> + NoTick, B> CycleComplete<'a, ForwardRefMarker> for Optional<T, L, B>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

source§

impl<'a, T, L: Location<'a>> CycleComplete<'a, ForwardRefMarker> for Optional<T, Tick<L>, Bounded>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

source§

impl<'a, T, L: Location<'a>> CycleComplete<'a, TickCycleMarker> for Optional<T, Tick<L>, Bounded>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

source§

impl<'a, T, L: Location<'a>> DeferTick for Optional<T, Tick<L>, Bounded>

source§

fn defer_tick(self) -> Self

source§

impl<'a, T, L: Location<'a>> From<Optional<T, L, Bounded>> for Optional<T, L, Unbounded>

source§

fn from(singleton: Optional<T, L, Bounded>) -> Self

Converts to this type from the input type.
source§

impl<'a, T, L: Location<'a>, B> From<Singleton<T, L, B>> for Optional<T, L, B>

source§

fn from(singleton: Singleton<T, L, B>) -> Self

Converts to this type from the input type.
source§

impl<'a, T, U: Clone, L: Location<'a>, B> ZipResult<'a, Optional<U, Tick<L>, B>> for Singleton<T, Tick<L>, B>

source§

type Out = Optional<(T, U), Tick<L>, B>

source§

type Location = Tick<L>

source§

fn other_location(other: &Optional<U, Tick<L>, B>) -> Tick<L>

source§

fn other_ir_node(other: Optional<U, Tick<L>, B>) -> HfPlusNode

source§

fn make(location: Tick<L>, ir_node: HfPlusNode) -> Self::Out

source§

impl<'a, T, U: Clone, L: Location<'a>, B> ZipResult<'a, Optional<U, Timestamped<L>, B>> for Singleton<T, Timestamped<L>, B>

Auto Trait Implementations§

§

impl<T, L, B> !Freeze for Optional<T, L, B>

§

impl<T, L, B> !RefUnwindSafe for Optional<T, L, B>

§

impl<T, L, B> !Send for Optional<T, L, B>

§

impl<T, L, B> !Sync for Optional<T, L, B>

§

impl<T, L, B> Unpin for Optional<T, L, B>
where - L: Unpin, - T: Unpin, - B: Unpin,

§

impl<T, L, B> !UnwindSafe for Optional<T, L, B>

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where - T: Clone,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where - T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/doc/hydroflow_plus/rewrites/index.html b/doc/hydroflow_plus/rewrites/index.html deleted file mode 100644 index c9dd8927877c..000000000000 --- a/doc/hydroflow_plus/rewrites/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus::rewrites - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus/rewrites/persist_pullup/fn.persist_pullup.html b/doc/hydroflow_plus/rewrites/persist_pullup/fn.persist_pullup.html deleted file mode 100644 index eb376e0b6af5..000000000000 --- a/doc/hydroflow_plus/rewrites/persist_pullup/fn.persist_pullup.html +++ /dev/null @@ -1 +0,0 @@ -persist_pullup in hydroflow_plus::rewrites::persist_pullup - Rust

Function hydroflow_plus::rewrites::persist_pullup::persist_pullup

source ·
pub fn persist_pullup(ir: Vec<HfPlusLeaf>) -> Vec<HfPlusLeaf>
\ No newline at end of file diff --git a/doc/hydroflow_plus/rewrites/persist_pullup/index.html b/doc/hydroflow_plus/rewrites/persist_pullup/index.html deleted file mode 100644 index 2ae262a5d5f0..000000000000 --- a/doc/hydroflow_plus/rewrites/persist_pullup/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus::rewrites::persist_pullup - Rust

Module hydroflow_plus::rewrites::persist_pullup

source ·

Functions§

\ No newline at end of file diff --git a/doc/hydroflow_plus/rewrites/profiler/fn.increment_counter.html b/doc/hydroflow_plus/rewrites/profiler/fn.increment_counter.html deleted file mode 100644 index 0548c0452950..000000000000 --- a/doc/hydroflow_plus/rewrites/profiler/fn.increment_counter.html +++ /dev/null @@ -1 +0,0 @@ -increment_counter in hydroflow_plus::rewrites::profiler - Rust

Function hydroflow_plus::rewrites::profiler::increment_counter

source ·
pub fn increment_counter(count: &mut u64)
\ No newline at end of file diff --git a/doc/hydroflow_plus/rewrites/profiler/fn.profiling.html b/doc/hydroflow_plus/rewrites/profiler/fn.profiling.html deleted file mode 100644 index 3ce58a18bead..000000000000 --- a/doc/hydroflow_plus/rewrites/profiler/fn.profiling.html +++ /dev/null @@ -1,6 +0,0 @@ -profiling in hydroflow_plus::rewrites::profiler - Rust

Function hydroflow_plus::rewrites::profiler::profiling

source ·
pub fn profiling<'a>(
-    ir: Vec<HfPlusLeaf>,
-    counters: RuntimeData<&'a RefCell<Vec<u64>>>,
-    counter_queue: RuntimeData<&'a RefCell<UnboundedSender<(usize, u64)>>>,
-) -> Vec<HfPlusLeaf>
Expand description

Count the cardinality of each input and periodically output to a file

-
\ No newline at end of file diff --git a/doc/hydroflow_plus/rewrites/profiler/index.html b/doc/hydroflow_plus/rewrites/profiler/index.html deleted file mode 100644 index d773332be290..000000000000 --- a/doc/hydroflow_plus/rewrites/profiler/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus::rewrites::profiler - Rust

Module hydroflow_plus::rewrites::profiler

source ·

Functions§

\ No newline at end of file diff --git a/doc/hydroflow_plus/rewrites/properties/fn.properties_optimize.html b/doc/hydroflow_plus/rewrites/properties/fn.properties_optimize.html deleted file mode 100644 index 4125ad593e0b..000000000000 --- a/doc/hydroflow_plus/rewrites/properties/fn.properties_optimize.html +++ /dev/null @@ -1,4 +0,0 @@ -properties_optimize in hydroflow_plus::rewrites::properties - Rust

Function hydroflow_plus::rewrites::properties::properties_optimize

source ·
pub fn properties_optimize(
-    ir: Vec<HfPlusLeaf>,
-    db: &PropertyDatabase,
-) -> Vec<HfPlusLeaf>
\ No newline at end of file diff --git a/doc/hydroflow_plus/rewrites/properties/index.html b/doc/hydroflow_plus/rewrites/properties/index.html deleted file mode 100644 index 4a8dac187251..000000000000 --- a/doc/hydroflow_plus/rewrites/properties/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus::rewrites::properties - Rust

Module hydroflow_plus::rewrites::properties

source ·

Structs§

  • Structure for tracking expressions known to have particular algebraic properties.

Functions§

\ No newline at end of file diff --git a/doc/hydroflow_plus/runtime_context/index.html b/doc/hydroflow_plus/runtime_context/index.html deleted file mode 100644 index 125e04866ec1..000000000000 --- a/doc/hydroflow_plus/runtime_context/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus::runtime_context - Rust

Module hydroflow_plus::runtime_context

source ·

Structs§

Statics§

\ No newline at end of file diff --git a/doc/hydroflow_plus/runtime_context/static.RUNTIME_CONTEXT.html b/doc/hydroflow_plus/runtime_context/static.RUNTIME_CONTEXT.html deleted file mode 100644 index b3241f0181f9..000000000000 --- a/doc/hydroflow_plus/runtime_context/static.RUNTIME_CONTEXT.html +++ /dev/null @@ -1 +0,0 @@ -RUNTIME_CONTEXT in hydroflow_plus::runtime_context - Rust

Static hydroflow_plus::runtime_context::RUNTIME_CONTEXT

source ·
pub static RUNTIME_CONTEXT: RuntimeContext<'_>
\ No newline at end of file diff --git a/doc/hydroflow_plus/singleton/index.html b/doc/hydroflow_plus/singleton/index.html deleted file mode 100644 index e7485f50609b..000000000000 --- a/doc/hydroflow_plus/singleton/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus::singleton - Rust

Module hydroflow_plus::singleton

source ·

Structs§

Traits§

\ No newline at end of file diff --git a/doc/hydroflow_plus/singleton/struct.Singleton.html b/doc/hydroflow_plus/singleton/struct.Singleton.html deleted file mode 100644 index aa15a9cc5ce5..000000000000 --- a/doc/hydroflow_plus/singleton/struct.Singleton.html +++ /dev/null @@ -1,77 +0,0 @@ -Singleton in hydroflow_plus::singleton - Rust

Struct hydroflow_plus::singleton::Singleton

source ·
pub struct Singleton<T, L, B> { /* private fields */ }

Implementations§

source§

impl<'a, T, L: Location<'a>, B> Singleton<T, L, B>

source

pub fn map<U, F: Fn(T) -> U + 'a>( - self, - f: impl IntoQuotedMut<'a, F, L>, -) -> Singleton<U, L, B>

source

pub fn flat_map_ordered<U, I: IntoIterator<Item = U>, F: Fn(T) -> I + 'a>( - self, - f: impl IntoQuotedMut<'a, F, L>, -) -> Stream<U, L, B>

source

pub fn flat_map_unordered<U, I: IntoIterator<Item = U>, F: Fn(T) -> I + 'a>( - self, - f: impl IntoQuotedMut<'a, F, L>, -) -> Stream<U, L, B>

source

pub fn filter<F: Fn(&T) -> bool + 'a>( - self, - f: impl IntoQuotedMut<'a, F, L>, -) -> Optional<T, L, B>

source

pub fn filter_map<U, F: Fn(T) -> Option<U> + 'a>( - self, - f: impl IntoQuotedMut<'a, F, L>, -) -> Optional<U, L, B>

source

pub fn zip<Other>(self, other: Other) -> <Self as ZipResult<'a, Other>>::Out
where - Self: ZipResult<'a, Other, Location = L>,

source

pub fn continue_if<U>( - self, - signal: Optional<U, L, Bounded>, -) -> Optional<T, L, Bounded>
where - Self: ZipResult<'a, Optional<(), L, Bounded>, Location = L, Out = Optional<(T, ()), L, Bounded>>,

source

pub fn continue_unless<U>( - self, - other: Optional<U, L, Bounded>, -) -> Optional<T, L, Bounded>
where - Singleton<T, L, B>: ZipResult<'a, Optional<(), L, Bounded>, Location = L, Out = Optional<(T, ()), L, Bounded>>,

source§

impl<'a, T, L: Location<'a> + NoTick, B> Singleton<T, Timestamped<L>, B>

source

pub unsafe fn latest_tick(self) -> Singleton<T, Tick<L>, Bounded>

Given a tick, returns a singleton value corresponding to a snapshot of the singleton -as of that tick. The snapshot at tick t + 1 is guaranteed to include at least all -relevant data that contributed to the snapshot at tick t.

-
§Safety
-

Because this picks a snapshot of a singleton whose value is continuously changing, -the output singleton has a non-deterministic value since the snapshot can be at an -arbitrary point in time.

-
source

pub fn drop_timestamp(self) -> Optional<T, L, B>

source§

impl<'a, T, L: Location<'a> + NoTick, B> Singleton<T, L, B>

source

pub fn timestamped(self, tick: &Tick<L>) -> Singleton<T, Timestamped<L>, B>

source

pub unsafe fn sample_eager(self) -> Stream<T, L, Unbounded>

Eagerly samples the singleton as fast as possible, returning a stream of snapshots -with order corresponding to increasing prefixes of data contributing to the singleton.

-
§Safety
-

At runtime, the singleton will be arbitrarily sampled as fast as possible, but due -to non-deterministic batching and arrival of inputs, the output stream is -non-deterministic.

-
source

pub unsafe fn sample_every( - self, - interval: impl QuotedWithContext<'a, Duration, L> + Copy + 'a, -) -> Stream<T, L, Unbounded>
where - L: NoTimestamp,

Given a time interval, returns a stream corresponding to snapshots of the singleton -value taken at various points in time. Because the input singleton may be -Unbounded, there are no guarantees on what these snapshots are other than they -represent the value of the singleton given some prefix of the streams leading up to -it.

-
§Safety
-

The output stream is non-deterministic in which elements are sampled, since this -is controlled by a clock.

-
source§

impl<'a, T, L: Location<'a>> Singleton<T, Tick<L>, Bounded>

source

pub fn all_ticks(self) -> Stream<T, Timestamped<L>, Unbounded>

source

pub fn latest(self) -> Singleton<T, Timestamped<L>, Unbounded>

source

pub fn defer_tick(self) -> Singleton<T, Tick<L>, Bounded>

source

pub fn persist(self) -> Stream<T, Tick<L>, Bounded>

source

pub fn delta(self) -> Optional<T, Tick<L>, Bounded>

source

pub fn into_stream(self) -> Stream<T, Tick<L>, Bounded>

Trait Implementations§

source§

impl<'a, T: Clone, L: Location<'a>, B> Clone for Singleton<T, L, B>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a, T, L: Location<'a> + NoTick, B> CycleCollection<'a, ForwardRefMarker> for Singleton<T, L, B>

source§

type Location = L

source§

fn create_source(ident: Ident, location: L) -> Self

source§

impl<'a, T, L: Location<'a>> CycleCollection<'a, ForwardRefMarker> for Singleton<T, Tick<L>, Bounded>

source§

type Location = Tick<L>

source§

fn create_source(ident: Ident, location: Tick<L>) -> Self

source§

impl<'a, T, L: Location<'a>> CycleCollectionWithInitial<'a, TickCycleMarker> for Singleton<T, Tick<L>, Bounded>

source§

type Location = Tick<L>

source§

fn create_source(ident: Ident, initial: Self, location: Tick<L>) -> Self

source§

impl<'a, T, L: Location<'a> + NoTick, B> CycleComplete<'a, ForwardRefMarker> for Singleton<T, L, B>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

source§

impl<'a, T, L: Location<'a>> CycleComplete<'a, ForwardRefMarker> for Singleton<T, Tick<L>, Bounded>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

source§

impl<'a, T, L: Location<'a>> CycleComplete<'a, TickCycleMarker> for Singleton<T, Tick<L>, Bounded>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

source§

impl<'a, T, L: Location<'a>> DeferTick for Singleton<T, Tick<L>, Bounded>

source§

fn defer_tick(self) -> Self

source§

impl<'a, T, L: Location<'a>, B> From<Singleton<T, L, B>> for Optional<T, L, B>

source§

fn from(singleton: Singleton<T, L, B>) -> Self

Converts to this type from the input type.
source§

impl<'a, T, L: Location<'a>> From<Singleton<T, L, Bounded>> for Singleton<T, L, Unbounded>

source§

fn from(singleton: Singleton<T, L, Bounded>) -> Self

Converts to this type from the input type.
source§

impl<'a, T, U: Clone, L: Location<'a>, B> ZipResult<'a, Optional<U, Tick<L>, B>> for Singleton<T, Tick<L>, B>

source§

type Out = Optional<(T, U), Tick<L>, B>

source§

type Location = Tick<L>

source§

fn other_location(other: &Optional<U, Tick<L>, B>) -> Tick<L>

source§

fn other_ir_node(other: Optional<U, Tick<L>, B>) -> HfPlusNode

source§

fn make(location: Tick<L>, ir_node: HfPlusNode) -> Self::Out

source§

impl<'a, T, U: Clone, L: Location<'a>, B> ZipResult<'a, Optional<U, Timestamped<L>, B>> for Singleton<T, Timestamped<L>, B>

source§

impl<'a, T, U: Clone, L: Location<'a>, B> ZipResult<'a, Singleton<U, Tick<L>, B>> for Singleton<T, Tick<L>, B>

source§

type Out = Singleton<(T, U), Tick<L>, B>

source§

type Location = Tick<L>

source§

fn other_location(other: &Singleton<U, Tick<L>, B>) -> Tick<L>

source§

fn other_ir_node(other: Singleton<U, Tick<L>, B>) -> HfPlusNode

source§

fn make(location: Tick<L>, ir_node: HfPlusNode) -> Self::Out

source§

impl<'a, T, U: Clone, L: Location<'a>, B> ZipResult<'a, Singleton<U, Timestamped<L>, B>> for Singleton<T, Timestamped<L>, B>

Auto Trait Implementations§

§

impl<T, L, B> !Freeze for Singleton<T, L, B>

§

impl<T, L, B> !RefUnwindSafe for Singleton<T, L, B>

§

impl<T, L, B> !Send for Singleton<T, L, B>

§

impl<T, L, B> !Sync for Singleton<T, L, B>

§

impl<T, L, B> Unpin for Singleton<T, L, B>
where - L: Unpin, - T: Unpin, - B: Unpin,

§

impl<T, L, B> !UnwindSafe for Singleton<T, L, B>

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where - T: Clone,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where - T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/doc/hydroflow_plus/singleton/trait.ZipResult.html b/doc/hydroflow_plus/singleton/trait.ZipResult.html deleted file mode 100644 index f015994f248f..000000000000 --- a/doc/hydroflow_plus/singleton/trait.ZipResult.html +++ /dev/null @@ -1,9 +0,0 @@ -ZipResult in hydroflow_plus::singleton - Rust

Trait hydroflow_plus::singleton::ZipResult

source ·
pub trait ZipResult<'a, Other> {
-    type Out;
-    type Location;
-
-    // Required methods
-    fn other_location(other: &Other) -> Self::Location;
-    fn other_ir_node(other: Other) -> HfPlusNode;
-    fn make(location: Self::Location, ir_node: HfPlusNode) -> Self::Out;
-}

Required Associated Types§

Required Methods§

source

fn other_location(other: &Other) -> Self::Location

source

fn other_ir_node(other: Other) -> HfPlusNode

source

fn make(location: Self::Location, ir_node: HfPlusNode) -> Self::Out

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<'a, T, U: Clone, L: Location<'a>, B> ZipResult<'a, Optional<U, Tick<L>, B>> for Singleton<T, Tick<L>, B>

source§

impl<'a, T, U: Clone, L: Location<'a>, B> ZipResult<'a, Optional<U, Timestamped<L>, B>> for Singleton<T, Timestamped<L>, B>

source§

impl<'a, T, U: Clone, L: Location<'a>, B> ZipResult<'a, Singleton<U, Tick<L>, B>> for Singleton<T, Tick<L>, B>

source§

impl<'a, T, U: Clone, L: Location<'a>, B> ZipResult<'a, Singleton<U, Timestamped<L>, B>> for Singleton<T, Timestamped<L>, B>

\ No newline at end of file diff --git a/doc/hydroflow_plus/stream/index.html b/doc/hydroflow_plus/stream/index.html deleted file mode 100644 index 2753b4239c73..000000000000 --- a/doc/hydroflow_plus/stream/index.html +++ /dev/null @@ -1,4 +0,0 @@ -hydroflow_plus::stream - Rust

Module hydroflow_plus::stream

source ·

Structs§

  • Marks the stream as having no order, which means that the order of -elements may be affected by non-determinism.
  • An ordered sequence stream of elements of type T.
  • Marks the stream as being totally ordered, which means that there are -no sources of non-determinism (other than intentional ones) that will -affect the order of elements.

Traits§

  • Helper trait for determining the weakest of two orderings.
\ No newline at end of file diff --git a/doc/hydroflow_plus/stream/struct.Stream.html b/doc/hydroflow_plus/stream/struct.Stream.html deleted file mode 100644 index c3e80fa0eb42..000000000000 --- a/doc/hydroflow_plus/stream/struct.Stream.html +++ /dev/null @@ -1,264 +0,0 @@ -Stream in hydroflow_plus::stream - Rust

Struct hydroflow_plus::stream::Stream

source ·
pub struct Stream<T, L, B, Order = TotalOrder> { /* private fields */ }
Expand description

An ordered sequence stream of elements of type T.

-

Type Parameters:

-
    -
  • T: the type of elements in the stream
  • -
  • L: the location where the stream is being materialized
  • -
  • B: the boundedness of the stream, which is either Bounded -or Unbounded
  • -
  • Order: the ordering of the stream, which is either TotalOrder -or NoOrder (default is TotalOrder)
  • -
-

Implementations§

source§

impl<'a, T, L: Location<'a>, B, Order> Stream<T, L, B, Order>

source

pub fn map<U, F: Fn(T) -> U + 'a>( - self, - f: impl IntoQuotedMut<'a, F, L>, -) -> Stream<U, L, B, Order>

source

pub fn cloned(self) -> Stream<T, L, B, Order>
where - T: Clone,

source

pub fn flat_map_ordered<U, I: IntoIterator<Item = U>, F: Fn(T) -> I + 'a>( - self, - f: impl IntoQuotedMut<'a, F, L>, -) -> Stream<U, L, B, Order>

source

pub fn flat_map_unordered<U, I: IntoIterator<Item = U>, F: Fn(T) -> I + 'a>( - self, - f: impl IntoQuotedMut<'a, F, L>, -) -> Stream<U, L, B, NoOrder>

source

pub fn flatten_ordered<U>(self) -> Stream<U, L, B, Order>
where - T: IntoIterator<Item = U>,

source

pub fn flatten_unordered<U>(self) -> Stream<U, L, B, NoOrder>
where - T: IntoIterator<Item = U>,

source

pub fn filter<F: Fn(&T) -> bool + 'a>( - self, - f: impl IntoQuotedMut<'a, F, L>, -) -> Stream<T, L, B, Order>

source

pub fn filter_map<U, F: Fn(T) -> Option<U> + 'a>( - self, - f: impl IntoQuotedMut<'a, F, L>, -) -> Stream<U, L, B, Order>

source

pub fn cross_singleton<O>( - self, - other: impl Into<Optional<O, L, Bounded>>, -) -> Stream<(T, O), L, B, Order>
where - O: Clone,

source

pub fn continue_if<U>( - self, - signal: Optional<U, L, Bounded>, -) -> Stream<T, L, B, Order>

Allow this stream through if the other stream has elements, otherwise the output is empty.

-
source

pub fn continue_unless<U>( - self, - other: Optional<U, L, Bounded>, -) -> Stream<T, L, B, Order>

Allow this stream through if the other stream is empty, otherwise the output is empty.

-
source

pub fn cross_product<O>( - self, - other: Stream<O, L, B, Order>, -) -> Stream<(T, O), L, B, Order>
where - T: Clone, - O: Clone,

source

pub fn unique(self) -> Stream<T, L, B, Order>
where - T: Eq + Hash,

source

pub fn filter_not_in<O2>( - self, - other: Stream<T, L, Bounded, O2>, -) -> Stream<T, L, Bounded, Order>
where - T: Eq + Hash,

source

pub fn inspect<F: Fn(&T) + 'a>( - self, - f: impl IntoQuotedMut<'a, F, L>, -) -> Stream<T, L, B, Order>

source

pub unsafe fn assume_ordering<O>(self) -> Stream<T, L, B, O>

Explicitly “casts” the stream to a type with a different ordering -guarantee. Useful in unsafe code where the ordering cannot be proven -by the type-system.

-
§Safety
-

This function is used as an escape hatch, and any mistakes in the -provided ordering guarantee will propogate into the guarantees -for the rest of the program.

-
source§

impl<'a, T, L: Location<'a>, B, Order> Stream<T, L, B, Order>
where - Order: MinOrder<NoOrder, Min = NoOrder>,

source

pub fn fold_commutative<A, I: Fn() -> A + 'a, F: Fn(&mut A, T)>( - self, - init: impl IntoQuotedMut<'a, I, L>, - comb: impl IntoQuotedMut<'a, F, L>, -) -> Singleton<A, L, B>

source

pub fn reduce_commutative<F: Fn(&mut T, T) + 'a>( - self, - comb: impl IntoQuotedMut<'a, F, L>, -) -> Optional<T, L, B>

source

pub fn max(self) -> Optional<T, L, B>
where - T: Ord,

source

pub fn max_by_key<K: Ord, F: Fn(&T) -> K + 'a>( - self, - key: impl IntoQuotedMut<'a, F, L> + Copy, -) -> Optional<T, L, B>

source

pub fn min(self) -> Optional<T, L, B>
where - T: Ord,

source

pub fn count(self) -> Singleton<usize, L, B>

source§

impl<'a, T, L: Location<'a>, B> Stream<T, L, B, TotalOrder>

source

pub fn enumerate(self) -> Stream<(usize, T), L, B, TotalOrder>

source

pub fn first(self) -> Optional<T, L, B>

source

pub fn last(self) -> Optional<T, L, B>

source

pub fn fold<A, I: Fn() -> A + 'a, F: Fn(&mut A, T)>( - self, - init: impl IntoQuotedMut<'a, I, L>, - comb: impl IntoQuotedMut<'a, F, L>, -) -> Singleton<A, L, B>

source

pub fn reduce<F: Fn(&mut T, T) + 'a>( - self, - comb: impl IntoQuotedMut<'a, F, L>, -) -> Optional<T, L, B>

source§

impl<'a, T, L: Location<'a>> Stream<T, L, Bounded, TotalOrder>

source

pub fn chain( - self, - other: Stream<T, L, Bounded, TotalOrder>, -) -> Stream<T, L, Bounded, TotalOrder>

source§

impl<'a, T, L: Location<'a> + NoTick + NoTimestamp> Stream<T, L, Unbounded, NoOrder>

source

pub fn union( - self, - other: Stream<T, L, Unbounded, NoOrder>, -) -> Stream<T, L, Unbounded, NoOrder>

source§

impl<'a, T, L: Location<'a>, Order> Stream<T, L, Bounded, Order>

source

pub fn sort(self) -> Stream<T, L, Bounded, TotalOrder>
where - T: Ord,

source

pub fn union<B2, O2>( - self, - other: Stream<T, L, B2, O2>, -) -> Stream<T, L, B2, Order::Min>
where - Order: MinOrder<O2>,

source§

impl<'a, K, V1, L: Location<'a>, B, Order> Stream<(K, V1), L, B, Order>

source

pub fn join<V2, O2>( - self, - n: Stream<(K, V2), L, B, O2>, -) -> Stream<(K, (V1, V2)), L, B, NoOrder>
where - K: Eq + Hash,

source

pub fn anti_join<O2>( - self, - n: Stream<K, L, Bounded, O2>, -) -> Stream<(K, V1), L, B, Order>
where - K: Eq + Hash,

source§

impl<'a, K: Eq + Hash, V, L: Location<'a>> Stream<(K, V), Tick<L>, Bounded>

source

pub fn fold_keyed<A, I: Fn() -> A + 'a, F: Fn(&mut A, V) + 'a>( - self, - init: impl IntoQuotedMut<'a, I, Tick<L>>, - comb: impl IntoQuotedMut<'a, F, Tick<L>>, -) -> Stream<(K, A), Tick<L>, Bounded>

source

pub fn reduce_keyed<F: Fn(&mut V, V) + 'a>( - self, - comb: impl IntoQuotedMut<'a, F, Tick<L>>, -) -> Stream<(K, V), Tick<L>, Bounded>

source§

impl<'a, K: Eq + Hash, V, L: Location<'a>, Order> Stream<(K, V), Tick<L>, Bounded, Order>

source

pub fn fold_keyed_commutative<A, I: Fn() -> A + 'a, F: Fn(&mut A, V) + 'a>( - self, - init: impl IntoQuotedMut<'a, I, Tick<L>>, - comb: impl IntoQuotedMut<'a, F, Tick<L>>, -) -> Stream<(K, A), Tick<L>, Bounded, Order>

source

pub fn keys(self) -> Stream<K, Tick<L>, Bounded, Order>

source

pub fn reduce_keyed_commutative<F: Fn(&mut V, V) + 'a>( - self, - comb: impl IntoQuotedMut<'a, F, Tick<L>>, -) -> Stream<(K, V), Tick<L>, Bounded, Order>

source§

impl<'a, T, L: Location<'a> + NoTick, B, Order> Stream<T, Timestamped<L>, B, Order>

source

pub unsafe fn tick_batch(self) -> Stream<T, Tick<L>, Bounded, Order>

Given a tick, returns a stream corresponding to a batch of elements for that tick. -These batches are guaranteed to be contiguous across ticks and preserve the order -of the input.

-
§Safety
-

The batch boundaries are non-deterministic and may change across executions.

-
source

pub fn drop_timestamp(self) -> Stream<T, L, B, Order>

source

pub fn timestamp_source(&self) -> Tick<L>

source§

impl<'a, T, L: Location<'a> + NoTick + NoTimestamp, B, Order> Stream<T, L, B, Order>

source

pub fn timestamped(self, tick: &Tick<L>) -> Stream<T, Timestamped<L>, B, Order>

source

pub unsafe fn sample_every( - self, - interval: impl QuotedWithContext<'a, Duration, L> + Copy + 'a, -) -> Stream<T, L, Unbounded, Order>

Given a time interval, returns a stream corresponding to samples taken from the -stream roughly at that interval. The output will have elements in the same order -as the input, but with arbitrary elements skipped between samples. There is also -no guarantee on the exact timing of the samples.

-
§Safety
-

The output stream is non-deterministic in which elements are sampled, since this -is controlled by a clock.

-
source

pub unsafe fn timeout( - self, - duration: impl QuotedWithContext<'a, Duration, Tick<L>> + Copy + 'a, -) -> Optional<(), L, Unbounded>
where - Order: MinOrder<NoOrder, Min = NoOrder>,

Given a timeout duration, returns an Optional which will have a value if the -stream has not emitted a value since that duration.

-
§Safety
-

Timeout relies on non-deterministic sampling of the stream, so depending on when -samples take place, timeouts may be non-deterministically generated or missed, -and the notification of the timeout may be delayed as well. There is also no -guarantee on how long the Optional will have a value after the timeout is -detected based on when the next sample is taken.

-
source§

impl<'a, T, L: Location<'a> + NoTick, B, Order> Stream<T, L, B, Order>

source

pub fn for_each<F: Fn(T) + 'a>(self, f: impl IntoQuotedMut<'a, F, L>)

source

pub fn dest_sink<S: Unpin + Sink<T> + 'a>( - self, - sink: impl QuotedWithContext<'a, S, L>, -)

source§

impl<'a, T, L: Location<'a>, Order> Stream<T, Tick<L>, Bounded, Order>

source

pub fn all_ticks(self) -> Stream<T, Timestamped<L>, Unbounded, Order>

source

pub fn persist(self) -> Stream<T, Tick<L>, Bounded, Order>
where - T: Clone,

source

pub fn defer_tick(self) -> Stream<T, Tick<L>, Bounded, Order>

source

pub fn delta(self) -> Stream<T, Tick<L>, Bounded, Order>

source§

impl<'a, T, C1, B, Order> Stream<T, Cluster<'a, C1>, B, Order>

source

pub fn decouple_cluster<C2: 'a, Tag>( - self, - other: &Cluster<'a, C2>, -) -> Stream<T, Cluster<'a, C2>, Unbounded, Order>
where - Cluster<'a, C1>: Location<'a, Root = Cluster<'a, C1>> + CanSend<'a, Cluster<'a, C2>, In<T> = (ClusterId<C2>, T), Out<T> = (Tag, T)>, - T: Clone + Serialize + DeserializeOwned, - Order: MinOrder<<Cluster<'a, C1> as CanSend<'a, Cluster<'a, C2>>>::OutStrongestOrder<Order>>,

source§

impl<'a, T, L: Location<'a> + NoTick, B, Order> Stream<T, L, B, Order>

source

pub fn decouple_process<P2>( - self, - other: &Process<'a, P2>, -) -> Stream<T, Process<'a, P2>, Unbounded, Order>
where - L::Root: CanSend<'a, Process<'a, P2>, In<T> = T, Out<T> = T>, - T: Clone + Serialize + DeserializeOwned, - Order: MinOrder<<L::Root as CanSend<'a, Process<'a, P2>>>::OutStrongestOrder<Order>, Min = Order>,

source

pub fn send_bincode<L2: Location<'a>, CoreType>( - self, - other: &L2, -) -> Stream<<L::Root as CanSend<'a, L2>>::Out<CoreType>, L2, Unbounded, Order::Min>
where - L::Root: CanSend<'a, L2, In<CoreType> = T>, - CoreType: Serialize + DeserializeOwned, - Order: MinOrder<<L::Root as CanSend<'a, L2>>::OutStrongestOrder<Order>>,

source

pub fn send_bincode_external<L2: 'a, CoreType>( - self, - other: &ExternalProcess<'_, L2>, -) -> ExternalBincodeStream<L::Out<CoreType>>
where - L: CanSend<'a, ExternalProcess<'a, L2>, In<CoreType> = T, Out<CoreType> = CoreType>, - CoreType: Serialize + DeserializeOwned,

source

pub fn send_bytes<L2: Location<'a>>( - self, - other: &L2, -) -> Stream<<L::Root as CanSend<'a, L2>>::Out<Bytes>, L2, Unbounded, Order::Min>
where - L::Root: CanSend<'a, L2, In<Bytes> = T>, - Order: MinOrder<<L::Root as CanSend<'a, L2>>::OutStrongestOrder<Order>>,

source

pub fn send_bytes_external<L2: 'a>( - self, - other: &ExternalProcess<'_, L2>, -) -> ExternalBytesPort
where - L::Root: CanSend<'a, ExternalProcess<'a, L2>, In<Bytes> = T, Out<Bytes> = Bytes>,

source

pub fn send_bincode_interleaved<L2: Location<'a>, Tag, CoreType>( - self, - other: &L2, -) -> Stream<CoreType, L2, Unbounded, Order::Min>
where - L::Root: CanSend<'a, L2, In<CoreType> = T, Out<CoreType> = (Tag, CoreType)>, - CoreType: Serialize + DeserializeOwned, - Order: MinOrder<<L::Root as CanSend<'a, L2>>::OutStrongestOrder<Order>>,

source

pub fn send_bytes_interleaved<L2: Location<'a>, Tag>( - self, - other: &L2, -) -> Stream<Bytes, L2, Unbounded, Order::Min>
where - L::Root: CanSend<'a, L2, In<Bytes> = T, Out<Bytes> = (Tag, Bytes)>, - Order: MinOrder<<L::Root as CanSend<'a, L2>>::OutStrongestOrder<Order>>,

source

pub fn broadcast_bincode<C2: 'a>( - self, - other: &Cluster<'a, C2>, -) -> Stream<<L::Root as CanSend<'a, Cluster<'a, C2>>>::Out<T>, Cluster<'a, C2>, Unbounded, Order::Min>
where - L::Root: CanSend<'a, Cluster<'a, C2>, In<T> = (ClusterId<C2>, T)>, - T: Clone + Serialize + DeserializeOwned, - Order: MinOrder<<L::Root as CanSend<'a, Cluster<'a, C2>>>::OutStrongestOrder<Order>>,

source

pub fn broadcast_bincode_interleaved<C2: 'a, Tag>( - self, - other: &Cluster<'a, C2>, -) -> Stream<T, Cluster<'a, C2>, Unbounded, Order::Min>
where - L::Root: CanSend<'a, Cluster<'a, C2>, In<T> = (ClusterId<C2>, T), Out<T> = (Tag, T)> + 'a, - T: Clone + Serialize + DeserializeOwned, - Order: MinOrder<<L::Root as CanSend<'a, Cluster<'a, C2>>>::OutStrongestOrder<Order>>,

source

pub fn broadcast_bytes<C2: 'a>( - self, - other: &Cluster<'a, C2>, -) -> Stream<<L::Root as CanSend<'a, Cluster<'a, C2>>>::Out<Bytes>, Cluster<'a, C2>, Unbounded, Order::Min>
where - L::Root: CanSend<'a, Cluster<'a, C2>, In<Bytes> = (ClusterId<C2>, T)> + 'a, - T: Clone, - Order: MinOrder<<L::Root as CanSend<'a, Cluster<'a, C2>>>::OutStrongestOrder<Order>>,

source

pub fn broadcast_bytes_interleaved<C2: 'a, Tag>( - self, - other: &Cluster<'a, C2>, -) -> Stream<Bytes, Cluster<'a, C2>, Unbounded, Order::Min>
where - L::Root: CanSend<'a, Cluster<'a, C2>, In<Bytes> = (ClusterId<C2>, T), Out<Bytes> = (Tag, Bytes)> + 'a, - T: Clone, - Order: MinOrder<<L::Root as CanSend<'a, Cluster<'a, C2>>>::OutStrongestOrder<Order>>,

source§

impl<'a, T, L: Location<'a> + NoTick, B> Stream<T, L, B, TotalOrder>

source

pub fn round_robin_bincode<C2: 'a>( - self, - other: &Cluster<'a, C2>, -) -> Stream<<L::Root as CanSend<'a, Cluster<'a, C2>>>::Out<T>, Cluster<'a, C2>, Unbounded, <TotalOrder as MinOrder<<L::Root as CanSend<'a, Cluster<'a, C2>>>::OutStrongestOrder<TotalOrder>>>::Min>
where - L::Root: CanSend<'a, Cluster<'a, C2>, In<T> = (ClusterId<C2>, T)>, - T: Clone + Serialize + DeserializeOwned, - TotalOrder: MinOrder<<L::Root as CanSend<'a, Cluster<'a, C2>>>::OutStrongestOrder<TotalOrder>>,

source

pub fn round_robin_bincode_interleaved<C2: 'a, Tag>( - self, - other: &Cluster<'a, C2>, -) -> Stream<T, Cluster<'a, C2>, Unbounded, <TotalOrder as MinOrder<<L::Root as CanSend<'a, Cluster<'a, C2>>>::OutStrongestOrder<TotalOrder>>>::Min>
where - L::Root: CanSend<'a, Cluster<'a, C2>, In<T> = (ClusterId<C2>, T), Out<T> = (Tag, T)> + 'a, - T: Clone + Serialize + DeserializeOwned, - TotalOrder: MinOrder<<L::Root as CanSend<'a, Cluster<'a, C2>>>::OutStrongestOrder<TotalOrder>>,

source

pub fn round_robin_bytes<C2: 'a>( - self, - other: &Cluster<'a, C2>, -) -> Stream<<L::Root as CanSend<'a, Cluster<'a, C2>>>::Out<Bytes>, Cluster<'a, C2>, Unbounded, <TotalOrder as MinOrder<<L::Root as CanSend<'a, Cluster<'a, C2>>>::OutStrongestOrder<TotalOrder>>>::Min>
where - L::Root: CanSend<'a, Cluster<'a, C2>, In<Bytes> = (ClusterId<C2>, T)> + 'a, - T: Clone, - TotalOrder: MinOrder<<L::Root as CanSend<'a, Cluster<'a, C2>>>::OutStrongestOrder<TotalOrder>>,

source

pub fn round_robin_bytes_interleaved<C2: 'a, Tag>( - self, - other: &Cluster<'a, C2>, -) -> Stream<Bytes, Cluster<'a, C2>, Unbounded, <TotalOrder as MinOrder<<L::Root as CanSend<'a, Cluster<'a, C2>>>::OutStrongestOrder<TotalOrder>>>::Min>
where - L::Root: CanSend<'a, Cluster<'a, C2>, In<Bytes> = (ClusterId<C2>, T), Out<Bytes> = (Tag, Bytes)> + 'a, - T: Clone, - TotalOrder: MinOrder<<L::Root as CanSend<'a, Cluster<'a, C2>>>::OutStrongestOrder<TotalOrder>>,

Trait Implementations§

source§

impl<'a, T: Clone, L: Location<'a>, B, Order> Clone for Stream<T, L, B, Order>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a, T, L: Location<'a> + NoTick, B, Order> CycleCollection<'a, ForwardRefMarker> for Stream<T, L, B, Order>

source§

type Location = L

source§

fn create_source(ident: Ident, location: L) -> Self

source§

impl<'a, T, L: Location<'a>, Order> CycleCollection<'a, TickCycleMarker> for Stream<T, Tick<L>, Bounded, Order>

source§

type Location = Tick<L>

source§

fn create_source(ident: Ident, location: Tick<L>) -> Self

source§

impl<'a, T, L: Location<'a> + NoTick, B, Order> CycleComplete<'a, ForwardRefMarker> for Stream<T, L, B, Order>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

source§

impl<'a, T, L: Location<'a>, Order> CycleComplete<'a, TickCycleMarker> for Stream<T, Tick<L>, Bounded, Order>

source§

fn complete(self, ident: Ident, expected_location: LocationId)

source§

impl<'a, T, L: Location<'a>, Order> DeferTick for Stream<T, Tick<L>, Bounded, Order>

source§

fn defer_tick(self) -> Self

source§

impl<'a, T, L: Location<'a>, B> From<Stream<T, L, B>> for Stream<T, L, B, NoOrder>

source§

fn from(stream: Stream<T, L, B, TotalOrder>) -> Stream<T, L, B, NoOrder>

Converts to this type from the input type.

Auto Trait Implementations§

§

impl<T, L, B, Order = TotalOrder> !Freeze for Stream<T, L, B, Order>

§

impl<T, L, B, Order = TotalOrder> !RefUnwindSafe for Stream<T, L, B, Order>

§

impl<T, L, B, Order = TotalOrder> !Send for Stream<T, L, B, Order>

§

impl<T, L, B, Order = TotalOrder> !Sync for Stream<T, L, B, Order>

§

impl<T, L, B, Order> Unpin for Stream<T, L, B, Order>
where - L: Unpin, - T: Unpin, - B: Unpin, - Order: Unpin,

§

impl<T, L, B, Order = TotalOrder> !UnwindSafe for Stream<T, L, B, Order>

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where - T: Clone,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

impl<T> MinOrder<T> for T

source§

type Min = T

The weaker of the two orderings.
source§

impl<T> ToOwned for T
where - T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/doc/hydroflow_plus/stream/trait.MinOrder.html b/doc/hydroflow_plus/stream/trait.MinOrder.html deleted file mode 100644 index 2526d8ddda21..000000000000 --- a/doc/hydroflow_plus/stream/trait.MinOrder.html +++ /dev/null @@ -1,5 +0,0 @@ -MinOrder in hydroflow_plus::stream - Rust

Trait hydroflow_plus::stream::MinOrder

source ·
pub trait MinOrder<Other>: Sealed<Other> {
-    type Min;
-}
Expand description

Helper trait for determining the weakest of two orderings.

-

Required Associated Types§

source

type Min

The weaker of the two orderings.

-

Implementors§

\ No newline at end of file diff --git a/doc/hydroflow_plus_std/all.html b/doc/hydroflow_plus_std/all.html deleted file mode 100644 index 8d8ef17a14b0..000000000000 --- a/doc/hydroflow_plus_std/all.html +++ /dev/null @@ -1 +0,0 @@ -List of all items in this crate
\ No newline at end of file diff --git a/doc/hydroflow_plus_std/index.html b/doc/hydroflow_plus_std/index.html deleted file mode 100644 index 46c5f0effa38..000000000000 --- a/doc/hydroflow_plus_std/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus_std - Rust

Crate hydroflow_plus_std

source ·

Modules§

\ No newline at end of file diff --git a/doc/hydroflow_plus_std/quorum/fn.collect_quorum.html b/doc/hydroflow_plus_std/quorum/fn.collect_quorum.html deleted file mode 100644 index 71ea6d1e0414..000000000000 --- a/doc/hydroflow_plus_std/quorum/fn.collect_quorum.html +++ /dev/null @@ -1,5 +0,0 @@ -collect_quorum in hydroflow_plus_std::quorum - Rust

Function hydroflow_plus_std::quorum::collect_quorum

source ·
pub fn collect_quorum<'a, L: Location<'a> + NoTick, Order, K: Clone + Eq + Hash, E: Clone>(
-    responses: Stream<(K, Result<(), E>), Timestamped<L>, Unbounded, Order>,
-    min: usize,
-    max: usize,
-) -> (Stream<K, Timestamped<L>, Unbounded, Order>, Stream<(K, E), Timestamped<L>, Unbounded, Order>)
\ No newline at end of file diff --git a/doc/hydroflow_plus_std/quorum/fn.collect_quorum_with_response.html b/doc/hydroflow_plus_std/quorum/fn.collect_quorum_with_response.html deleted file mode 100644 index e255ebaf771e..000000000000 --- a/doc/hydroflow_plus_std/quorum/fn.collect_quorum_with_response.html +++ /dev/null @@ -1,5 +0,0 @@ -collect_quorum_with_response in hydroflow_plus_std::quorum - Rust
pub fn collect_quorum_with_response<'a, L: Location<'a> + NoTick, Order, K: Clone + Eq + Hash, V: Clone, E: Clone>(
-    responses: Stream<(K, Result<V, E>), Timestamped<L>, Unbounded, Order>,
-    min: usize,
-    max: usize,
-) -> (Stream<(K, V), Timestamped<L>, Unbounded, Order>, Stream<(K, E), Timestamped<L>, Unbounded, Order>)
\ No newline at end of file diff --git a/doc/hydroflow_plus_std/quorum/index.html b/doc/hydroflow_plus_std/quorum/index.html deleted file mode 100644 index e3b13a312823..000000000000 --- a/doc/hydroflow_plus_std/quorum/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus_std::quorum - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus_std/request_response/fn.join_responses.html b/doc/hydroflow_plus_std/request_response/fn.join_responses.html deleted file mode 100644 index f0eabeab4d67..000000000000 --- a/doc/hydroflow_plus_std/request_response/fn.join_responses.html +++ /dev/null @@ -1,10 +0,0 @@ -join_responses in hydroflow_plus_std::request_response - Rust

Function hydroflow_plus_std::request_response::join_responses

source ·
pub fn join_responses<'a, K: Clone + Eq + Hash, M: Clone, V: Clone, L: Location<'a> + NoTick>(
-    tick: &Tick<L>,
-    responses: Stream<(K, V), Timestamped<L>, Unbounded, NoOrder>,
-    metadata: Stream<(K, M), Tick<L>, Bounded, NoOrder>,
-) -> Stream<(K, (M, V)), Timestamped<L>, Unbounded, NoOrder>
Expand description

Given an incoming stream of request-response responses, joins with metadata generated -at request time that is stored in-memory.

-

The metadata must be generated in the same or a previous tick than the response, -typically at request time. Only one response element should be produced with a given -key, same for the metadata stream.

-
\ No newline at end of file diff --git a/doc/hydroflow_plus_std/request_response/index.html b/doc/hydroflow_plus_std/request_response/index.html deleted file mode 100644 index 3e524cbd7a92..000000000000 --- a/doc/hydroflow_plus_std/request_response/index.html +++ /dev/null @@ -1,2 +0,0 @@ -hydroflow_plus_std::request_response - Rust

Module hydroflow_plus_std::request_response

source ·

Functions§

  • Given an incoming stream of request-response responses, joins with metadata generated -at request time that is stored in-memory.
\ No newline at end of file diff --git a/doc/hydroflow_plus_test/all.html b/doc/hydroflow_plus_test/all.html deleted file mode 100644 index a9b241140db8..000000000000 --- a/doc/hydroflow_plus_test/all.html +++ /dev/null @@ -1 +0,0 @@ -List of all items in this crate
\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/compute_pi/fn.compute_pi.html b/doc/hydroflow_plus_test/cluster/compute_pi/fn.compute_pi.html deleted file mode 100644 index 0a51400f92b9..000000000000 --- a/doc/hydroflow_plus_test/cluster/compute_pi/fn.compute_pi.html +++ /dev/null @@ -1,4 +0,0 @@ -compute_pi in hydroflow_plus_test::cluster::compute_pi - Rust

Function hydroflow_plus_test::cluster::compute_pi::compute_pi

source ·
pub fn compute_pi<'a>(
-    flow: &FlowBuilder<'a>,
-    batch_size: usize,
-) -> (Cluster<'a, Worker>, Process<'a, Leader>)
\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/compute_pi/index.html b/doc/hydroflow_plus_test/cluster/compute_pi/index.html deleted file mode 100644 index 5fff4211156b..000000000000 --- a/doc/hydroflow_plus_test/cluster/compute_pi/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus_test::cluster::compute_pi - Rust

Module hydroflow_plus_test::cluster::compute_pi

source ·

Structs§

Functions§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/index.html b/doc/hydroflow_plus_test/cluster/index.html deleted file mode 100644 index 2a542d583a40..000000000000 --- a/doc/hydroflow_plus_test/cluster/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus_test::cluster - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/many_to_many/fn.many_to_many.html b/doc/hydroflow_plus_test/cluster/many_to_many/fn.many_to_many.html deleted file mode 100644 index a21dd37a1a3b..000000000000 --- a/doc/hydroflow_plus_test/cluster/many_to_many/fn.many_to_many.html +++ /dev/null @@ -1 +0,0 @@ -many_to_many in hydroflow_plus_test::cluster::many_to_many - Rust

Function hydroflow_plus_test::cluster::many_to_many::many_to_many

source ·
pub fn many_to_many<'a>(flow: &FlowBuilder<'a>) -> Cluster<'a, ()>
\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/many_to_many/index.html b/doc/hydroflow_plus_test/cluster/many_to_many/index.html deleted file mode 100644 index b98b163a2e6d..000000000000 --- a/doc/hydroflow_plus_test/cluster/many_to_many/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus_test::cluster::many_to_many - Rust

Module hydroflow_plus_test::cluster::many_to_many

source ·

Functions§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/map_reduce/fn.map_reduce.html b/doc/hydroflow_plus_test/cluster/map_reduce/fn.map_reduce.html deleted file mode 100644 index 6e1af38d58bc..000000000000 --- a/doc/hydroflow_plus_test/cluster/map_reduce/fn.map_reduce.html +++ /dev/null @@ -1,3 +0,0 @@ -map_reduce in hydroflow_plus_test::cluster::map_reduce - Rust

Function hydroflow_plus_test::cluster::map_reduce::map_reduce

source ·
pub fn map_reduce<'a>(
-    flow: &FlowBuilder<'a>,
-) -> (Process<'a, Leader>, Cluster<'a, Worker>)
\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/map_reduce/index.html b/doc/hydroflow_plus_test/cluster/map_reduce/index.html deleted file mode 100644 index 655052d6a75f..000000000000 --- a/doc/hydroflow_plus_test/cluster/map_reduce/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus_test::cluster::map_reduce - Rust

Module hydroflow_plus_test::cluster::map_reduce

source ·

Structs§

Functions§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/paxos/fn.paxos_core.html b/doc/hydroflow_plus_test/cluster/paxos/fn.paxos_core.html deleted file mode 100644 index 44bdf05525d3..000000000000 --- a/doc/hydroflow_plus_test/cluster/paxos/fn.paxos_core.html +++ /dev/null @@ -1,23 +0,0 @@ -paxos_core in hydroflow_plus_test::cluster::paxos - Rust

Function hydroflow_plus_test::cluster::paxos::paxos_core

source ·
pub unsafe fn paxos_core<'a, P: PaxosPayload, R>(
-    proposers: &Cluster<'a, Proposer>,
-    acceptors: &Cluster<'a, Acceptor>,
-    r_to_acceptors_checkpoint: Stream<(ClusterId<R>, usize), Cluster<'a, Acceptor>, Unbounded, NoOrder>,
-    c_to_proposers: Stream<P, Cluster<'a, Proposer>, Unbounded>,
-    f: usize,
-    i_am_leader_send_timeout: u64,
-    i_am_leader_check_timeout: u64,
-    i_am_leader_check_timeout_delay_multiplier: usize,
-) -> (Stream<Ballot, Cluster<'a, Proposer>, Unbounded>, Stream<(usize, Option<P>), Cluster<'a, Proposer>, Unbounded, NoOrder>)
Expand description

Implements the core Paxos algorithm, which uses a cluster of propsers and acceptors -to sequence payloads being sent to the proposers.

-

Proposers that currently are the leader will work with acceptors to sequence incoming -payloads, but may drop payloads if they are not the lader or lose leadership during -the commit process.

-

Returns a stream of ballots, where new values are emitted when a new leader is elected, -and a stream of sequenced payloads with an index and optional payload (in the case of -holes in the log).

-

§Safety

-

When the leader is stable, the algorithm will commit incoming payloads to the leader -in deterministic order. However, when the leader is changing, payloads may be -non-deterministically dropped. The stream of ballots is also non-deterministic because -leaders are elected in a non-deterministic process.

-
\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/paxos/index.html b/doc/hydroflow_plus_test/cluster/paxos/index.html deleted file mode 100644 index b0277b615649..000000000000 --- a/doc/hydroflow_plus_test/cluster/paxos/index.html +++ /dev/null @@ -1,2 +0,0 @@ -hydroflow_plus_test::cluster::paxos - Rust

Module hydroflow_plus_test::cluster::paxos

source ·

Structs§

Traits§

Functions§

  • Implements the core Paxos algorithm, which uses a cluster of propsers and acceptors -to sequence payloads being sent to the proposers.
\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/paxos/trait.PaxosPayload.html b/doc/hydroflow_plus_test/cluster/paxos/trait.PaxosPayload.html deleted file mode 100644 index ad9f3c77e8b5..000000000000 --- a/doc/hydroflow_plus_test/cluster/paxos/trait.PaxosPayload.html +++ /dev/null @@ -1,7 +0,0 @@ -PaxosPayload in hydroflow_plus_test::cluster::paxos - Rust

Trait hydroflow_plus_test::cluster::paxos::PaxosPayload

source ·
pub trait PaxosPayload:
-    Serialize
-    + DeserializeOwned
-    + PartialEq
-    + Eq
-    + Clone
-    + Debug { }

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/paxos_bench/fn.paxos_bench.html b/doc/hydroflow_plus_test/cluster/paxos_bench/fn.paxos_bench.html deleted file mode 100644 index d6504982492d..000000000000 --- a/doc/hydroflow_plus_test/cluster/paxos_bench/fn.paxos_bench.html +++ /dev/null @@ -1,10 +0,0 @@ -paxos_bench in hydroflow_plus_test::cluster::paxos_bench - Rust

Function hydroflow_plus_test::cluster::paxos_bench::paxos_bench

source ·
pub fn paxos_bench<'a>(
-    flow: &FlowBuilder<'a>,
-    f: usize,
-    num_clients_per_node: usize,
-    median_latency_window_size: usize,
-    checkpoint_frequency: usize,
-    i_am_leader_send_timeout: u64,
-    i_am_leader_check_timeout: u64,
-    i_am_leader_check_timeout_delay_multiplier: usize,
-) -> (Cluster<'a, Proposer>, Cluster<'a, Acceptor>, Cluster<'a, Client>, Cluster<'a, Replica>)
\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/paxos_bench/index.html b/doc/hydroflow_plus_test/cluster/paxos_bench/index.html deleted file mode 100644 index 009d72ef6996..000000000000 --- a/doc/hydroflow_plus_test/cluster/paxos_bench/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus_test::cluster::paxos_bench - Rust

Module hydroflow_plus_test::cluster::paxos_bench

source ·

Structs§

Functions§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/paxos_kv/fn.paxos_kv.html b/doc/hydroflow_plus_test/cluster/paxos_kv/fn.paxos_kv.html deleted file mode 100644 index 6dd913773f63..000000000000 --- a/doc/hydroflow_plus_test/cluster/paxos_kv/fn.paxos_kv.html +++ /dev/null @@ -1,15 +0,0 @@ -paxos_kv in hydroflow_plus_test::cluster::paxos_kv - Rust

Function hydroflow_plus_test::cluster::paxos_kv::paxos_kv

source ·
pub unsafe fn paxos_kv<'a, K: KvKey, V: KvValue>(
-    proposers: &Cluster<'a, Proposer>,
-    acceptors: &Cluster<'a, Acceptor>,
-    replicas: &Cluster<'a, Replica>,
-    c_to_proposers: Stream<KvPayload<K, V>, Cluster<'a, Proposer>, Unbounded>,
-    f: usize,
-    i_am_leader_send_timeout: u64,
-    i_am_leader_check_timeout: u64,
-    i_am_leader_check_timeout_delay_multiplier: usize,
-    checkpoint_frequency: usize,
-) -> (Stream<Ballot, Cluster<'a, Proposer>, Unbounded>, Stream<KvPayload<K, V>, Cluster<'a, Replica>, Unbounded>)
Expand description

Sets up a linearizable key-value store using Paxos.

-

§Safety

-

Notifications for leader election are non-deterministic. When the leader is changing, -writes may be dropped by the old leader.

-
\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/paxos_kv/fn.replica.html b/doc/hydroflow_plus_test/cluster/paxos_kv/fn.replica.html deleted file mode 100644 index 550486fd33bd..000000000000 --- a/doc/hydroflow_plus_test/cluster/paxos_kv/fn.replica.html +++ /dev/null @@ -1,5 +0,0 @@ -replica in hydroflow_plus_test::cluster::paxos_kv - Rust

Function hydroflow_plus_test::cluster::paxos_kv::replica

source ·
pub fn replica<'a, K: KvKey, V: KvValue>(
-    replicas: &Cluster<'a, Replica>,
-    p_to_replicas: Stream<SequencedKv<K, V>, Cluster<'a, Replica>, Unbounded, NoOrder>,
-    checkpoint_frequency: usize,
-) -> (Stream<usize, Cluster<'a, Replica>, Unbounded>, Stream<KvPayload<K, V>, Cluster<'a, Replica>, Unbounded>)
\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/paxos_kv/index.html b/doc/hydroflow_plus_test/cluster/paxos_kv/index.html deleted file mode 100644 index bc9a315e72a7..000000000000 --- a/doc/hydroflow_plus_test/cluster/paxos_kv/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus_test::cluster::paxos_kv - Rust

Module hydroflow_plus_test::cluster::paxos_kv

source ·

Structs§

Traits§

Functions§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/paxos_kv/struct.Replica.html b/doc/hydroflow_plus_test/cluster/paxos_kv/struct.Replica.html deleted file mode 100644 index 27368709e988..000000000000 --- a/doc/hydroflow_plus_test/cluster/paxos_kv/struct.Replica.html +++ /dev/null @@ -1,24 +0,0 @@ -Replica in hydroflow_plus_test::cluster::paxos_kv - Rust

Struct hydroflow_plus_test::cluster::paxos_kv::Replica

source ·
pub struct Replica {}

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an -Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an -Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

-

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> -if into_left is true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where - F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> -if into_left(&self) returns true. -Converts self into a Right variant of Either<Self, Self> -otherwise. Read more
§

impl<T> MinOrder<T> for T

§

type Min = T

The weaker of the two orderings.
source§

impl<T, U> TryFrom<U> for T
where - U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where - U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where - V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where - S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/paxos_kv/trait.KvKey.html b/doc/hydroflow_plus_test/cluster/paxos_kv/trait.KvKey.html deleted file mode 100644 index 74d37dc8d80e..000000000000 --- a/doc/hydroflow_plus_test/cluster/paxos_kv/trait.KvKey.html +++ /dev/null @@ -1,7 +0,0 @@ -KvKey in hydroflow_plus_test::cluster::paxos_kv - Rust

Trait hydroflow_plus_test::cluster::paxos_kv::KvKey

source ·
pub trait KvKey:
-    Serialize
-    + DeserializeOwned
-    + Hash
-    + Eq
-    + Clone
-    + Debug { }

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/paxos_kv/trait.KvValue.html b/doc/hydroflow_plus_test/cluster/paxos_kv/trait.KvValue.html deleted file mode 100644 index eaf6e39626fc..000000000000 --- a/doc/hydroflow_plus_test/cluster/paxos_kv/trait.KvValue.html +++ /dev/null @@ -1,6 +0,0 @@ -KvValue in hydroflow_plus_test::cluster::paxos_kv - Rust

Trait hydroflow_plus_test::cluster::paxos_kv::KvValue

source ·
pub trait KvValue:
-    Serialize
-    + DeserializeOwned
-    + Eq
-    + Clone
-    + Debug { }

Object Safety§

This trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/simple_cluster/fn.decouple_cluster.html b/doc/hydroflow_plus_test/cluster/simple_cluster/fn.decouple_cluster.html deleted file mode 100644 index 6cfc0eece1da..000000000000 --- a/doc/hydroflow_plus_test/cluster/simple_cluster/fn.decouple_cluster.html +++ /dev/null @@ -1,3 +0,0 @@ -decouple_cluster in hydroflow_plus_test::cluster::simple_cluster - Rust
pub fn decouple_cluster<'a>(
-    flow: &FlowBuilder<'a>,
-) -> (Cluster<'a, ()>, Cluster<'a, ()>)
\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/simple_cluster/fn.decouple_process.html b/doc/hydroflow_plus_test/cluster/simple_cluster/fn.decouple_process.html deleted file mode 100644 index f2da17a5f119..000000000000 --- a/doc/hydroflow_plus_test/cluster/simple_cluster/fn.decouple_process.html +++ /dev/null @@ -1,3 +0,0 @@ -decouple_process in hydroflow_plus_test::cluster::simple_cluster - Rust
pub fn decouple_process<'a>(
-    flow: &FlowBuilder<'a>,
-) -> (Process<'a, ()>, Process<'a, ()>)
\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/simple_cluster/fn.simple_cluster.html b/doc/hydroflow_plus_test/cluster/simple_cluster/fn.simple_cluster.html deleted file mode 100644 index ad1d06f627dc..000000000000 --- a/doc/hydroflow_plus_test/cluster/simple_cluster/fn.simple_cluster.html +++ /dev/null @@ -1,3 +0,0 @@ -simple_cluster in hydroflow_plus_test::cluster::simple_cluster - Rust
pub fn simple_cluster<'a>(
-    flow: &FlowBuilder<'a>,
-) -> (Process<'a, ()>, Cluster<'a, ()>)
\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/simple_cluster/index.html b/doc/hydroflow_plus_test/cluster/simple_cluster/index.html deleted file mode 100644 index 8dbc593e653c..000000000000 --- a/doc/hydroflow_plus_test/cluster/simple_cluster/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus_test::cluster::simple_cluster - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/two_pc/fn.two_pc.html b/doc/hydroflow_plus_test/cluster/two_pc/fn.two_pc.html deleted file mode 100644 index 5f0556070402..000000000000 --- a/doc/hydroflow_plus_test/cluster/two_pc/fn.two_pc.html +++ /dev/null @@ -1,4 +0,0 @@ -two_pc in hydroflow_plus_test::cluster::two_pc - Rust

Function hydroflow_plus_test::cluster::two_pc::two_pc

source ·
pub fn two_pc<'a>(
-    flow: &FlowBuilder<'a>,
-    num_participants: u32,
-) -> (Process<'a, Coordinator>, Cluster<'a, Participants>, Process<'a, Client>)
\ No newline at end of file diff --git a/doc/hydroflow_plus_test/cluster/two_pc/index.html b/doc/hydroflow_plus_test/cluster/two_pc/index.html deleted file mode 100644 index b3803298e658..000000000000 --- a/doc/hydroflow_plus_test/cluster/two_pc/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus_test::cluster::two_pc - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus_test/distributed/first_ten/fn.first_ten_distributed.html b/doc/hydroflow_plus_test/distributed/first_ten/fn.first_ten_distributed.html deleted file mode 100644 index 1ef1faafc075..000000000000 --- a/doc/hydroflow_plus_test/distributed/first_ten/fn.first_ten_distributed.html +++ /dev/null @@ -1,5 +0,0 @@ -first_ten_distributed in hydroflow_plus_test::distributed::first_ten - Rust
pub fn first_ten_distributed<'a>(
-    external: &ExternalProcess<'a, ()>,
-    process: &Process<'a, P1>,
-    second_process: &Process<'a, P2>,
-) -> ExternalBincodeSink<String>
\ No newline at end of file diff --git a/doc/hydroflow_plus_test/distributed/first_ten/index.html b/doc/hydroflow_plus_test/distributed/first_ten/index.html deleted file mode 100644 index 169a35aa168c..000000000000 --- a/doc/hydroflow_plus_test/distributed/first_ten/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus_test::distributed::first_ten - Rust

Module hydroflow_plus_test::distributed::first_ten

source ·

Structs§

Functions§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test/distributed/index.html b/doc/hydroflow_plus_test/distributed/index.html deleted file mode 100644 index 861657bef5d1..000000000000 --- a/doc/hydroflow_plus_test/distributed/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus_test::distributed - Rust

Module hydroflow_plus_test::distributed

source ·

Modules§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test/index.html b/doc/hydroflow_plus_test/index.html deleted file mode 100644 index 5dd7ac321579..000000000000 --- a/doc/hydroflow_plus_test/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus_test - Rust

Crate hydroflow_plus_test

source ·

Modules§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/all.html b/doc/hydroflow_plus_test_local/all.html deleted file mode 100644 index 204189847d0b..000000000000 --- a/doc/hydroflow_plus_test_local/all.html +++ /dev/null @@ -1 +0,0 @@ -List of all items in this crate
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/index.html b/doc/hydroflow_plus_test_local/index.html deleted file mode 100644 index 1b1443a89836..000000000000 --- a/doc/hydroflow_plus_test_local/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus_test_local - Rust

Crate hydroflow_plus_test_local

source ·

Modules§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/chat_app/index.html b/doc/hydroflow_plus_test_local/local/chat_app/index.html deleted file mode 100644 index da75934ff4e1..000000000000 --- a/doc/hydroflow_plus_test_local/local/chat_app/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus_test_local::local::chat_app - Rust

Module hydroflow_plus_test_local::local::chat_app

source ·

Macros§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/chat_app/macro.chat_app.html b/doc/hydroflow_plus_test_local/local/chat_app/macro.chat_app.html deleted file mode 100644 index 3ddf35a7a150..000000000000 --- a/doc/hydroflow_plus_test_local/local/chat_app/macro.chat_app.html +++ /dev/null @@ -1 +0,0 @@ -chat_app in hydroflow_plus_test_local::local::chat_app - Rust

Macro hydroflow_plus_test_local::local::chat_app::chat_app

source ·
chat_app!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/compute_pi/fn.compute_pi.html b/doc/hydroflow_plus_test_local/local/compute_pi/fn.compute_pi.html deleted file mode 100644 index 061897c5576b..000000000000 --- a/doc/hydroflow_plus_test_local/local/compute_pi/fn.compute_pi.html +++ /dev/null @@ -1,4 +0,0 @@ -compute_pi in hydroflow_plus_test_local::local::compute_pi - Rust

Function hydroflow_plus_test_local::local::compute_pi::compute_pi

source ·
pub fn compute_pi<'a>(
-    flow: &FlowBuilder<'a>,
-    batch_size: RuntimeData<usize>,
-) -> Process<'a, ()>
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/compute_pi/index.html b/doc/hydroflow_plus_test_local/local/compute_pi/index.html deleted file mode 100644 index 003218a3399a..000000000000 --- a/doc/hydroflow_plus_test_local/local/compute_pi/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus_test_local::local::compute_pi - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/compute_pi/macro.compute_pi_runtime.html b/doc/hydroflow_plus_test_local/local/compute_pi/macro.compute_pi_runtime.html deleted file mode 100644 index 1a7be558f87f..000000000000 --- a/doc/hydroflow_plus_test_local/local/compute_pi/macro.compute_pi_runtime.html +++ /dev/null @@ -1 +0,0 @@ -compute_pi_runtime in hydroflow_plus_test_local::local::compute_pi - Rust
compute_pi_runtime!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/count_elems/fn.count_elems_generic.html b/doc/hydroflow_plus_test_local/local/count_elems/fn.count_elems_generic.html deleted file mode 100644 index f4e5190badcb..000000000000 --- a/doc/hydroflow_plus_test_local/local/count_elems/fn.count_elems_generic.html +++ /dev/null @@ -1,5 +0,0 @@ -count_elems_generic in hydroflow_plus_test_local::local::count_elems - Rust
pub fn count_elems_generic<'a, T: 'a>(
-    flow: FlowBuilder<'a>,
-    input_stream: RuntimeData<UnboundedReceiverStream<T>>,
-    output: RuntimeData<&'a UnboundedSender<u32>>,
-) -> impl Quoted<'a, Hydroflow<'a>>
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/count_elems/index.html b/doc/hydroflow_plus_test_local/local/count_elems/index.html deleted file mode 100644 index d6a6b7caec35..000000000000 --- a/doc/hydroflow_plus_test_local/local/count_elems/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus_test_local::local::count_elems - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/count_elems/macro.count_elems.html b/doc/hydroflow_plus_test_local/local/count_elems/macro.count_elems.html deleted file mode 100644 index 90f7f7cef38b..000000000000 --- a/doc/hydroflow_plus_test_local/local/count_elems/macro.count_elems.html +++ /dev/null @@ -1 +0,0 @@ -count_elems in hydroflow_plus_test_local::local::count_elems - Rust
count_elems!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/first_ten/fn.first_ten.html b/doc/hydroflow_plus_test_local/local/first_ten/fn.first_ten.html deleted file mode 100644 index c92dc71e45e4..000000000000 --- a/doc/hydroflow_plus_test_local/local/first_ten/fn.first_ten.html +++ /dev/null @@ -1 +0,0 @@ -first_ten in hydroflow_plus_test_local::local::first_ten - Rust

Function hydroflow_plus_test_local::local::first_ten::first_ten

source ·
pub fn first_ten(flow: &FlowBuilder<'_>)
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/first_ten/index.html b/doc/hydroflow_plus_test_local/local/first_ten/index.html deleted file mode 100644 index e276c4c8b5ac..000000000000 --- a/doc/hydroflow_plus_test_local/local/first_ten/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus_test_local::local::first_ten - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/first_ten/macro.first_ten_runtime.html b/doc/hydroflow_plus_test_local/local/first_ten/macro.first_ten_runtime.html deleted file mode 100644 index 7164fdfb5191..000000000000 --- a/doc/hydroflow_plus_test_local/local/first_ten/macro.first_ten_runtime.html +++ /dev/null @@ -1 +0,0 @@ -first_ten_runtime in hydroflow_plus_test_local::local::first_ten - Rust
first_ten_runtime!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/graph_reachability/index.html b/doc/hydroflow_plus_test_local/local/graph_reachability/index.html deleted file mode 100644 index d5973b761157..000000000000 --- a/doc/hydroflow_plus_test_local/local/graph_reachability/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus_test_local::local::graph_reachability - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/graph_reachability/macro.graph_reachability.html b/doc/hydroflow_plus_test_local/local/graph_reachability/macro.graph_reachability.html deleted file mode 100644 index af65872641e2..000000000000 --- a/doc/hydroflow_plus_test_local/local/graph_reachability/macro.graph_reachability.html +++ /dev/null @@ -1 +0,0 @@ -graph_reachability in hydroflow_plus_test_local::local::graph_reachability - Rust
graph_reachability!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/index.html b/doc/hydroflow_plus_test_local/local/index.html deleted file mode 100644 index 0742035ff0da..000000000000 --- a/doc/hydroflow_plus_test_local/local/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus_test_local::local - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/negation/index.html b/doc/hydroflow_plus_test_local/local/negation/index.html deleted file mode 100644 index 3569f7166b8e..000000000000 --- a/doc/hydroflow_plus_test_local/local/negation/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus_test_local::local::negation - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/negation/macro.test_anti_join.html b/doc/hydroflow_plus_test_local/local/negation/macro.test_anti_join.html deleted file mode 100644 index 078164dfb239..000000000000 --- a/doc/hydroflow_plus_test_local/local/negation/macro.test_anti_join.html +++ /dev/null @@ -1 +0,0 @@ -test_anti_join in hydroflow_plus_test_local::local::negation - Rust
test_anti_join!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/negation/macro.test_difference.html b/doc/hydroflow_plus_test_local/local/negation/macro.test_difference.html deleted file mode 100644 index 3be30216fa42..000000000000 --- a/doc/hydroflow_plus_test_local/local/negation/macro.test_difference.html +++ /dev/null @@ -1 +0,0 @@ -test_difference in hydroflow_plus_test_local::local::negation - Rust
test_difference!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/teed_join/index.html b/doc/hydroflow_plus_test_local/local/teed_join/index.html deleted file mode 100644 index 14c016e83015..000000000000 --- a/doc/hydroflow_plus_test_local/local/teed_join/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus_test_local::local::teed_join - Rust

Module hydroflow_plus_test_local::local::teed_join

source ·

Macros§

\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local/local/teed_join/macro.teed_join.html b/doc/hydroflow_plus_test_local/local/teed_join/macro.teed_join.html deleted file mode 100644 index a99de141c567..000000000000 --- a/doc/hydroflow_plus_test_local/local/teed_join/macro.teed_join.html +++ /dev/null @@ -1 +0,0 @@ -teed_join in hydroflow_plus_test_local::local::teed_join - Rust
teed_join!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local_macro/all.html b/doc/hydroflow_plus_test_local_macro/all.html deleted file mode 100644 index 70b44702b842..000000000000 --- a/doc/hydroflow_plus_test_local_macro/all.html +++ /dev/null @@ -1 +0,0 @@ -List of all items in this crate
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local_macro/index.html b/doc/hydroflow_plus_test_local_macro/index.html deleted file mode 100644 index f4f9850dfb46..000000000000 --- a/doc/hydroflow_plus_test_local_macro/index.html +++ /dev/null @@ -1 +0,0 @@ -hydroflow_plus_test_local_macro - Rust
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local_macro/macro.macro_0317123C21A365AAC8F7C904D715749D52C4408A36766C2EA4952E8548FDF2CF.html b/doc/hydroflow_plus_test_local_macro/macro.macro_0317123C21A365AAC8F7C904D715749D52C4408A36766C2EA4952E8548FDF2CF.html deleted file mode 100644 index ae15ae89d92d..000000000000 --- a/doc/hydroflow_plus_test_local_macro/macro.macro_0317123C21A365AAC8F7C904D715749D52C4408A36766C2EA4952E8548FDF2CF.html +++ /dev/null @@ -1 +0,0 @@ -macro_0317123C21A365AAC8F7C904D715749D52C4408A36766C2EA4952E8548FDF2CF in hydroflow_plus_test_local_macro - Rust
macro_0317123C21A365AAC8F7C904D715749D52C4408A36766C2EA4952E8548FDF2CF!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local_macro/macro.macro_1C0FE8523A30CEE48113F7CA958EDC55F81545A0CB32FC13A73E2E0B86C69967.html b/doc/hydroflow_plus_test_local_macro/macro.macro_1C0FE8523A30CEE48113F7CA958EDC55F81545A0CB32FC13A73E2E0B86C69967.html deleted file mode 100644 index 6e7b8e4458b8..000000000000 --- a/doc/hydroflow_plus_test_local_macro/macro.macro_1C0FE8523A30CEE48113F7CA958EDC55F81545A0CB32FC13A73E2E0B86C69967.html +++ /dev/null @@ -1 +0,0 @@ -macro_1C0FE8523A30CEE48113F7CA958EDC55F81545A0CB32FC13A73E2E0B86C69967 in hydroflow_plus_test_local_macro - Rust
macro_1C0FE8523A30CEE48113F7CA958EDC55F81545A0CB32FC13A73E2E0B86C69967!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local_macro/macro.macro_88FF4FF66B42C3C3EA6A3A776AD3BBB5A0E778C545379CD74D8134F1BDE2467B.html b/doc/hydroflow_plus_test_local_macro/macro.macro_88FF4FF66B42C3C3EA6A3A776AD3BBB5A0E778C545379CD74D8134F1BDE2467B.html deleted file mode 100644 index 8698d1cc9dc3..000000000000 --- a/doc/hydroflow_plus_test_local_macro/macro.macro_88FF4FF66B42C3C3EA6A3A776AD3BBB5A0E778C545379CD74D8134F1BDE2467B.html +++ /dev/null @@ -1 +0,0 @@ -macro_88FF4FF66B42C3C3EA6A3A776AD3BBB5A0E778C545379CD74D8134F1BDE2467B in hydroflow_plus_test_local_macro - Rust
macro_88FF4FF66B42C3C3EA6A3A776AD3BBB5A0E778C545379CD74D8134F1BDE2467B!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local_macro/macro.macro_B8B04B5C82DD37E36A884DD155638B3BB603ECEE77232C187CB7749C8C3633D4.html b/doc/hydroflow_plus_test_local_macro/macro.macro_B8B04B5C82DD37E36A884DD155638B3BB603ECEE77232C187CB7749C8C3633D4.html deleted file mode 100644 index a24f39c11397..000000000000 --- a/doc/hydroflow_plus_test_local_macro/macro.macro_B8B04B5C82DD37E36A884DD155638B3BB603ECEE77232C187CB7749C8C3633D4.html +++ /dev/null @@ -1 +0,0 @@ -macro_B8B04B5C82DD37E36A884DD155638B3BB603ECEE77232C187CB7749C8C3633D4 in hydroflow_plus_test_local_macro - Rust
macro_B8B04B5C82DD37E36A884DD155638B3BB603ECEE77232C187CB7749C8C3633D4!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local_macro/macro.macro_DBD6835F761FB7B759E0367E64D404553FF74D0CDA5EC33E48C8D94A09338A20.html b/doc/hydroflow_plus_test_local_macro/macro.macro_DBD6835F761FB7B759E0367E64D404553FF74D0CDA5EC33E48C8D94A09338A20.html deleted file mode 100644 index 85552125ea2b..000000000000 --- a/doc/hydroflow_plus_test_local_macro/macro.macro_DBD6835F761FB7B759E0367E64D404553FF74D0CDA5EC33E48C8D94A09338A20.html +++ /dev/null @@ -1 +0,0 @@ -macro_DBD6835F761FB7B759E0367E64D404553FF74D0CDA5EC33E48C8D94A09338A20 in hydroflow_plus_test_local_macro - Rust
macro_DBD6835F761FB7B759E0367E64D404553FF74D0CDA5EC33E48C8D94A09338A20!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local_macro/macro.macro_E29C1936765CFB0AEE40C7D85645A072229E6DD9B20D78BFFDFDF0B90F8550E2.html b/doc/hydroflow_plus_test_local_macro/macro.macro_E29C1936765CFB0AEE40C7D85645A072229E6DD9B20D78BFFDFDF0B90F8550E2.html deleted file mode 100644 index 69de9374353d..000000000000 --- a/doc/hydroflow_plus_test_local_macro/macro.macro_E29C1936765CFB0AEE40C7D85645A072229E6DD9B20D78BFFDFDF0B90F8550E2.html +++ /dev/null @@ -1 +0,0 @@ -macro_E29C1936765CFB0AEE40C7D85645A072229E6DD9B20D78BFFDFDF0B90F8550E2 in hydroflow_plus_test_local_macro - Rust
macro_E29C1936765CFB0AEE40C7D85645A072229E6DD9B20D78BFFDFDF0B90F8550E2!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local_macro/macro.macro_F32B896FDC4E575B912C55F307713AE1C491601401B080576A445697B5F5D872.html b/doc/hydroflow_plus_test_local_macro/macro.macro_F32B896FDC4E575B912C55F307713AE1C491601401B080576A445697B5F5D872.html deleted file mode 100644 index d714c1316e5e..000000000000 --- a/doc/hydroflow_plus_test_local_macro/macro.macro_F32B896FDC4E575B912C55F307713AE1C491601401B080576A445697B5F5D872.html +++ /dev/null @@ -1 +0,0 @@ -macro_F32B896FDC4E575B912C55F307713AE1C491601401B080576A445697B5F5D872 in hydroflow_plus_test_local_macro - Rust
macro_F32B896FDC4E575B912C55F307713AE1C491601401B080576A445697B5F5D872!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/hydroflow_plus_test_local_macro/macro.macro_F395CBD2498F0C0291586D539B1C53802F7DE61514FE27DB041B53B7578FA011.html b/doc/hydroflow_plus_test_local_macro/macro.macro_F395CBD2498F0C0291586D539B1C53802F7DE61514FE27DB041B53B7578FA011.html deleted file mode 100644 index 173420946980..000000000000 --- a/doc/hydroflow_plus_test_local_macro/macro.macro_F395CBD2498F0C0291586D539B1C53802F7DE61514FE27DB041B53B7578FA011.html +++ /dev/null @@ -1 +0,0 @@ -macro_F395CBD2498F0C0291586D539B1C53802F7DE61514FE27DB041B53B7578FA011 in hydroflow_plus_test_local_macro - Rust
macro_F395CBD2498F0C0291586D539B1C53802F7DE61514FE27DB041B53B7578FA011!() { /* proc-macro */ }
\ No newline at end of file diff --git a/doc/search-index.js b/doc/search-index.js index e98ba5a7a3b6..7997e978d251 100644 --- a/doc/search-index.js +++ b/doc/search-index.js @@ -1,4 +1,4 @@ -var searchIndex = new Map(JSON.parse('[["gossip_cli",{"t":"PPPFGFPNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNHHHONNNNNNNNNNNNNNNNNNOOOO","n":["Delete","Exit","Get","InteractiveApp","InteractiveCommands","Opts","Set","augment_args","","augment_args_for_update","","augment_subcommands","augment_subcommands_for_update","borrow","","","borrow_mut","","","command","","command_for_update","","commands","demux_enum","fmt","","","from","","","from_arg_matches","","","from_arg_matches_mut","","","group_id","","has_subcommand","into","","","main","parse_command","parse_key","server_address","try_from","","","try_into","","","type_id","","","update_from_arg_matches","","","update_from_arg_matches_mut","","","vzip","","","key","","","value"],"q":[[0,"gossip_cli"],[65,"gossip_cli::InteractiveCommands"],[69,"clap_builder::builder::command"],[70,"gossip_kv"],[71,"pusherator"],[72,"alloc::string"],[73,"core::fmt"],[74,"clap_builder::parser::matches::arg_matches"],[75,"clap_builder"],[76,"core::result"],[77,"clap_builder::util::id"],[78,"core::option"],[79,"core::any"]],"i":"h00```0AfAl1022102102101002102102102102102102```1102102102102102102BnC`Cb1","f":"```````{bb}00000{d{{d{c}}}{}}00{{{d{f}}}{{d{fc}}}{}}00{{}b}000`{{h{d{f{j{cegi}}}}}l{{Ab{}{{n{{j{A`}}}}}}}{{Ab{}{{n{l}}}}}{{Ab{}{{n{{j{A`}}}}}}}{{Ab{}{{n{{j{A`Ad}}}}}}}}{{{d{Af}}{d{fAh}}}Aj}{{{d{Al}}{d{fAh}}}Aj}{{{d{h}}{d{fAh}}}Aj}{cc{}}00{{{d{An}}}{{Bb{AfB`}}}}{{{d{An}}}{{Bb{AlB`}}}}{{{d{An}}}{{Bb{hB`}}}}{{{d{fAn}}}{{Bb{AfB`}}}}{{{d{fAn}}}{{Bb{AlB`}}}}{{{d{fAn}}}{{Bb{hB`}}}}{{}{{Bf{Bd}}}}0{{{d{Bh}}}Bj}{{}c{}}00{{}l}{Ad{{Bf{h}}}}{{{d{Bh}}}{{Bb{A`Ad}}}}`{c{{Bb{e}}}{}{}}00{{}{{Bb{c}}}{}}00{dBl}00{{{d{fAf}}{d{An}}}{{Bb{lB`}}}}{{{d{fAl}}{d{An}}}{{Bb{lB`}}}}{{{d{fh}}{d{An}}}{{Bb{lB`}}}}{{{d{fAf}}{d{fAn}}}{{Bb{lB`}}}}{{{d{fAl}}{d{fAn}}}{{Bb{lB`}}}}{{{d{fh}}{d{fAn}}}{{Bb{lB`}}}}<<<````","D":"Al","p":[[5,"Command",69],[1,"reference"],[0,"mut"],[6,"InteractiveCommands",0],[1,"tuple"],[1,"unit"],[17,"Item"],[5,"Key",70],[10,"Pusherator",71],[5,"String",72],[5,"Opts",0],[5,"Formatter",73],[8,"Result",73],[5,"InteractiveApp",0],[5,"ArgMatches",74],[8,"Error",75],[6,"Result",76],[5,"Id",77],[6,"Option",78],[1,"str"],[1,"bool"],[5,"TypeId",79],[15,"Get",65],[15,"Set",65],[15,"Delete",65]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAADcABgAAAAAABQAAAAgAFAAgAAgALAAAAC8AFgA="}],["gossip_kv",{"t":"PGGPPPPPGPPFGPGIPPPIPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCCCOONNNNNCONNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNOOOOOOOOOOOOOOOFNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFIFNNNNNNNNNNNNNNNNONNNNNNNNNNNONNNONNONNNNNNNNNNNNNNNNIIIIIIIIHOHKFIFFONNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNHNNNNNNNNNNNNNNPGPPPGPPNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOO","n":["Ack","ClientRequest","ClientResponse","Delete","","Get","","Gossip","GossipMessage","InvalidFormat","InvalidNamespace","Key","KeyParseError","Nack","Namespace","RowKey","Set","","System","TableName","User","borrow","","","","","","borrow_mut","","","","","","clone","","","","","","clone_into","","","","","","clone_to_uninit","","","","","","deserialize","","","","","eq","","","","","","equivalent","","","","","","","","","","","","fmt","","","","","","","from","","","","","","from_str","","hash","","into","","","","","","lattices","membership","model","namespace","row_key","serialize","","","","","server","table","to_owned","","","","","","to_string","try_from","","","","","","try_into","","","","","","type_id","","","","","","util","vzip","","","","","","key","","","value","key","success","","value","member_id","","","message_id","","","writes","BoundedSetLattice","borrow","borrow_mut","clone","clone_into","clone_to_uninit","default","deserialize","eq","equivalent","","fmt","from","","into","is_bot","is_top","lattice_from","merge","","new","new_from","partial_cmp","serialize","to_owned","try_from","try_into","type_id","vzip","MemberData","MemberDataBuilder","MemberId","Protocol","add_protocol","borrow","","","borrow_mut","","","build","clone","","clone_into","","clone_to_uninit","","deserialize","","endpoint","eq","","equivalent","","","","fmt","","from","","","id","into","","","name","new","","protocols","serialize","","to_owned","","try_from","","","try_into","","","type_id","","","vzip","","","Clock","NamespaceMap","Namespaces","RowKey","RowValue","Table","TableMap","TableName","delete_row","key","upsert_row","Address","InfectingWrite","MessageId","SETS_COUNTER","SeedNode","address","borrow","","","borrow_mut","","","clone","","clone_into","","clone_to_uninit","","deref","deserialize","","eq","","equivalent","","fmt","","from","","","hash","id","into","","","is_bot","is_top","lattice_from","merge","partial_cmp","serialize","","server","to_owned","","try_from","","","try_into","","","type_id","","","vzip","","","Ack","ClientRequestWithAddress","Delete","Get","Gossip","GossipRequestWithAddress","Nack","Set","borrow","","borrow_mut","","demux_enum","","fmt","","from","","from_request_and_address","","into","","try_from","","try_into","","type_id","","vzip","","addr","","","key","","","value","addr","","","member_id","","","message_id","","","writes"],"q":[[0,"gossip_kv"],[141,"gossip_kv::ClientRequest"],[145,"gossip_kv::ClientResponse"],[149,"gossip_kv::GossipMessage"],[156,"gossip_kv::lattices"],[185,"gossip_kv::membership"],[241,"gossip_kv::model"],[252,"gossip_kv::server"],[309,"gossip_kv::util"],[339,"gossip_kv::util::ClientRequestWithAddress"],[346,"gossip_kv::util::GossipRequestWithAddress"],[356,"core::result"],[357,"serde::de"],[358,"core::fmt"],[359,"core::hash"],[360,"serde::ser"],[361,"alloc::string"],[362,"core::any"],[363,"core::cmp"],[364,"core::clone"],[365,"core::iter::traits::collect"],[366,"core::option"],[367,"prometheus::counter"],[368,"alloc::vec"],[369,"hydroflow::scheduled::graph"],[370,"futures_core::stream"],[371,"core::marker"],[372,"futures_sink"],[373,"pusherator"]],"i":"A```ln102`h0``3``21f`001j4351204351204351204351204351043512043511220044335512204351204351010120435```0010435`01204352120435120435120435`120435G`GbGd1GfGhGj2GlGnH`2102`Bh000000000000000000000000000````Cn0DbD`210210101010010110010210121002011010210210210210`````````Hb``````Dn0EbEd210212121021212221210222101111121`21210210210210Fl`Fh01`100101010101010101010101HdHfHh2101HjHlHn2102102","f":"`````````````````````{b{{b{c}}}{}}00000{{{b{d}}}{{b{dc}}}{}}00000{{{b{f}}}f}{{{b{h}}}h}{{{b{j}}}j}{{{b{l}}}l}{{{b{n}}}n}{{{b{A`}}}A`}{{b{b{dc}}}Ab{}}00000{bAb}00000{c{{Ad{f}}}Af}{c{{Ad{j}}}Af}{c{{Ad{l}}}Af}{c{{Ad{n}}}Af}{c{{Ad{A`}}}Af}{{{b{f}}{b{f}}}Ah}{{{b{h}}{b{h}}}Ah}{{{b{j}}{b{j}}}Ah}{{{b{l}}{b{l}}}Ah}{{{b{n}}{b{n}}}Ah}{{{b{A`}}{b{A`}}}Ah}{{b{b{c}}}Ah{}}00000000000{{{b{f}}{b{dAj}}}Al}{{{b{h}}{b{dAj}}}Al}0{{{b{j}}{b{dAj}}}Al}{{{b{l}}{b{dAj}}}Al}{{{b{n}}{b{dAj}}}Al}{{{b{A`}}{b{dAj}}}Al}{cc{}}00000{{{b{An}}}{{Ad{fc}}}{}}{{{b{An}}}{{Ad{jc}}}{}}{{{b{f}}{b{dc}}}AbB`}{{{b{j}}{b{dc}}}AbB`}{{}c{}}00000`````{{{b{f}}c}AdBb}{{{b{j}}c}AdBb}{{{b{l}}c}AdBb}{{{b{n}}c}AdBb}{{{b{A`}}c}AdBb}``{bc{}}00000{bBd}{c{{Ad{e}}}{}{}}00000{{}{{Ad{c}}}{}}00000{bBf}00000`::::::````````````````{b{{b{c}}}{}}{{{b{d}}}{{b{dc}}}{}}{{{b{{Bh{c}}}}}{{Bh{c}}}{BjBlBn}}{{b{b{dc}}}Ab{}}{bAb}{{}{{Bh{c}}}{BjBl}}{c{{Ad{{Bh{e}}}}}Af{BjBlC`}}{{{b{{Bh{c}}}}{b{{Bh{c}}}}}Ah{BjBl}}{{b{b{c}}}Ah{}}0{{{b{{Bh{c}}}}{b{dAj}}}Al{BjBlCb}}{Ab{{Bh{c}}}{BjBl}}{cc{}}{{}c{}}{{{b{{Bh{c}}}}}Ah{BjBl}}0{{{Bh{c}}}{{Bh{c}}}{BjBl}}{{{b{d{Bh{c}}}}{Bh{c}}}Ah{BjBl}}{{{b{d{Bh{c}}}}e}Ah{BjBl}{{Cf{}{{Cd{c}}}}}};{e{{Bh{c}}}{BjBl}{{Cf{}{{Cd{c}}}}}}{{{b{{Bh{c}}}}{b{{Bh{c}}}}}{{Cj{Ch}}}{BjBl}}{{{b{{Bh{c}}}}e}Ad{BjBlCl}Bb}{bc{}}{c{{Ad{e}}}{}{}}{{}{{Ad{c}}}{}}{bBf};````{{{Cn{c}}{D`{c}}}{{Cn{c}}}{CbBnBjBlCl}}{b{{b{c}}}{}}00{{{b{d}}}{{b{dc}}}{}}00{{{Cn{c}}}{{Db{c}}}{CbBnBjBlCl}}{{{b{{Db{c}}}}}{{Db{c}}}{CbBnBjBlClBn}}{{{b{{D`{c}}}}}{{D`{c}}}Bn}{{b{b{dc}}}Ab{}}0{bAb}0{c{{Ad{{Db{e}}}}}Af{CbBnBjBlClC`}}{c{{Ad{{D`{e}}}}}AfC`}`{{{b{{Db{c}}}}{b{{Db{c}}}}}Ah{CbBnBjBlClDd}}{{{b{{D`{c}}}}{b{{D`{c}}}}}AhDd}{{b{b{c}}}Ah{}}000{{{b{{Db{c}}}}{b{dAj}}}Al{CbBnBjBlClCb}}{{{b{{D`{c}}}}{b{dAj}}}AlCb}{cc{}}00`{{}c{}}00`{Df{{Cn{c}}}{CbBnBjBlCl}}{{Bdc}{{D`{c}}}{}}`{{{b{{Db{c}}}}e}Ad{CbBnBjBlClCl}Bb}{{{b{{D`{c}}}}e}AdClBb}{bc{}}0{c{{Ad{e}}}{}{}}00{{}{{Ad{c}}}{}}00{bBf}00888````````{{cfDhDj}{{Dl{c}}}{}}`{{cfDhDjBd}{{Dl{c}}}{}}``````{b{{b{c}}}{}}00{{{b{d}}}{{b{dc}}}{}}00{{{b{{Dn{c}}}}}{{Dn{c}}}{E`Bn}}{{{b{Eb}}}Eb}{{b{b{dc}}}Ab{}}0{bAb}0{{{b{Ed}}}{{b{Ef}}}}{c{{Ad{{Dn{e}}}}}Af{E`C`}}{c{{Ad{Eb}}}Af}{{{b{{Dn{c}}}}{b{{Dn{c}}}}}Ah{E`Dd}}{{{b{Eb}}{b{Eb}}}Ah}{{b{b{c}}}Ah{}}0{{{b{{Dn{c}}}}{b{dAj}}}Al{E`Cb}}{{{b{Eb}}{b{dAj}}}Al}{cc{}}00{{{b{{Dn{c}}}}{b{de}}}Ab{E`Bl}B`}`{{}c{}}00{{{b{Eb}}}Ah}0{EbEb}{{{b{dEb}}Eb}Ah}{{{b{Eb}}{b{Eb}}}{{Cj{Ch}}}}{{{b{{Dn{c}}}}e}Ad{E`Cl}Bb}{{{b{Eb}}c}AdBb}{{eikoAa{Db{c}}{Eh{{Dn{c}}}}Ac}Ej{E`El}{{F`{}{{Cd{{En{lc}}}}}}Fb}Cb{{Ff{{En{nc}}}{{Fd{g}}}}Fb}{{F`{}{{Cd{{En{A`c}}}}}}Fb}Cb{{Ff{{En{A`c}}}{{Fd{m}}}}Fb}{{F`{}{{Cd{Ab}}}}Fb}{{F`{}{{Cd{{Eh{{Dn{c}}}}}}}}Fb}}{bc{}}0{c{{Ad{e}}}{}{}}00{{}{{Ad{c}}}{}}00{bBf}00;;;````````{b{{b{c}}}{}}0{{{b{d}}}{{b{dc}}}{}}0{{{Fh{c}}{b{d{En{egi}}}}}Ab{}{{Fj{}{{Cd{{En{jc}}}}}}}{{Fj{}{{Cd{{En{jc}}}}}}}{{Fj{}{{Cd{{En{jBdc}}}}}}}}{{{Fl{c}}{b{d{En{egi}}}}}Ab{}{{Fj{}{{Cd{{En{BdBdc}}}}}}}{{Fj{}{{Cd{{En{BdBd{Dl{Fn}}c}}}}}}}{{Fj{}{{Cd{{En{BdBdc}}}}}}}}{{{b{{Fh{c}}}}{b{dAj}}}AlCb}{{{b{{Fl{c}}}}{b{dAj}}}AlCb}{cc{}}0{{lc}{{Fh{c}}}{}}{{A`c}{{Fl{c}}}{}}{{}c{}}0<<;;::00`````````````````","D":"Jj","p":[[1,"reference"],[0,"mut"],[6,"Namespace",0],[6,"KeyParseError",0],[5,"Key",0],[6,"ClientRequest",0],[6,"ClientResponse",0],[6,"GossipMessage",0],[1,"unit"],[6,"Result",356],[10,"Deserializer",357],[1,"bool"],[5,"Formatter",358],[8,"Result",358],[1,"str"],[10,"Hasher",359],[10,"Serializer",360],[5,"String",361],[5,"TypeId",362],[5,"BoundedSetLattice",156],[10,"Eq",363],[10,"Hash",359],[10,"Clone",364],[10,"Deserialize",357],[10,"Debug",358],[17,"Item"],[10,"IntoIterator",365],[6,"Ordering",363],[6,"Option",366],[10,"Serialize",360],[5,"MemberDataBuilder",185],[5,"Protocol",185],[5,"MemberData",185],[10,"PartialEq",363],[8,"MemberId",185],[8,"TableName",241],[8,"RowKey",241],[8,"Namespaces",241],[5,"SeedNode",252],[10,"Address",252],[5,"InfectingWrite",252],[5,"SETS_COUNTER",252],[8,"IntCounter",367],[5,"Vec",368],[5,"Hydroflow",369],[10,"DeserializeOwned",357],[1,"tuple"],[10,"Stream",370],[10,"Unpin",371],[17,"Error"],[10,"Sink",372],[6,"ClientRequestWithAddress",309],[10,"Pusherator",373],[6,"GossipRequestWithAddress",309],[8,"Clock",241],[15,"Get",141],[15,"Set",141],[15,"Delete",141],[15,"Get",145],[15,"Set",145],[15,"Delete",145],[15,"Gossip",149],[15,"Ack",149],[15,"Nack",149],[8,"RowValue",241],[15,"Get",339],[15,"Set",339],[15,"Delete",339],[15,"Gossip",346],[15,"Ack",346],[15,"Nack",346]],"r":[],"b":[[75,"impl-Debug-for-KeyParseError"],[76,"impl-Display-for-KeyParseError"],[174,"impl-Merge%3CBoundedSetLattice%3CT,+N%3E%3E-for-BoundedSetLattice%3CT,+N%3E"],[175,"impl-Merge%3CU%3E-for-BoundedSetLattice%3CT,+N%3E"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAA8BFgAAAAAAAwAAAAkAAAAWADsAWAADAGIAAgBnAAUAbgAuAJ4ACwCsAA0AvAAAAL8ABQDGAAcAzwAHAOIADwDzAAEA/gAZABsBAQAgAQYAKAENAD4BBwBMARgA"}],["gossip_server",{"t":"FNNNNHONNNNNCNNNNNNNNNNOONNNHHOCHHHNNNNNNNSSSFFFONNNNNNNNNNNHNNNNNNNNNNNNNONNNNNONNHHNNNNNNNONNNNNNFNNNNHNNNNN","n":["Opts","augment_args","augment_args_for_update","borrow","borrow_mut","clap_duration_from_secs","client_port","clone","clone_into","clone_to_uninit","command","command_for_update","config","eq","equivalent","","","","","fmt","from","from_arg_matches","from_arg_matches_mut","gossip_frequency","gossip_port","group_id","hash","into","main","make_seed_node","member_suffix_len","membership","metrics_handler","setup_inbound_deserialization","setup_outbound_serialization","to_owned","try_from","try_into","type_id","update_from_arg_matches","update_from_arg_matches_mut","vzip","CONFIG_ROOT","DYNAMIC_CONFIG_PATH","STATIC_CONFIG_PATH","SeedNodeSettings","ServerSettings","UnboundedSenderEventHandler","address","borrow","","","borrow_mut","","","clone","clone_into","clone_to_uninit","deserialize","","dynamic_config_path","eq","equivalent","","","","","fmt","","from","","","handle_event","hash","id","into","","","new","","seed_nodes","serialize","","setup_settings_watch","static_config_path","to_owned","try_from","","","try_into","","","tx","type_id","","","vzip","","","LowercaseAlphanumeric","borrow","borrow_mut","from","into","member_name","sample","try_from","try_into","type_id","vzip"],"q":[[0,"gossip_server"],[42,"gossip_server::config"],[99,"gossip_server::membership"],[110,"clap_builder::builder::command"],[111,"core::time"],[112,"core::num::dec2flt"],[113,"core::result"],[114,"core::fmt"],[115,"clap_builder::parser::matches::arg_matches"],[116,"clap_builder"],[117,"clap_builder::util::id"],[118,"core::option"],[119,"core::hash"],[120,"core::net::socket_addr"],[121,"gossip_kv::server"],[122,"warp::reply"],[123,"core::convert"],[124,"futures_core::stream"],[125,"bytes::bytes_mut"],[126,"std::io::error"],[127,"serde::de"],[128,"core::marker"],[129,"futures_sink"],[130,"bytes::bytes"],[131,"serde::ser"],[132,"core::any"],[133,"std::path"],[134,"notify::event"],[135,"notify::error"],[136,"tokio::sync::mpsc::unbounded"],[137,"config::error"],[138,"notify"],[139,"gossip_kv::membership"],[140,"rand::rng"]],"i":"`A`000`000000`000000000000000``0````0000000``````BdDnDh210222202`2222220210212210210002``21021021102102`F`000`00000","f":"`{bb}0{d{{d{c}}}{}}{{{d{f}}}{{d{fc}}}{}}{{{d{h}}}{{n{jl}}}}`{{{d{A`}}}A`}{{d{d{fc}}}Ab{}}{dAb}{{}b}0`{{{d{A`}}{d{A`}}}Ad}{{d{d{c}}}Ad{}}0000{{{d{A`}}{d{fAf}}}Ah}{cc{}}{{{d{Aj}}}{{n{A`Al}}}}{{{d{fAj}}}{{n{A`Al}}}}``{{}{{B`{An}}}}{{{d{A`}}{d{fc}}}AbBb}{{}c{}}{{}Ab}{{{d{Bd}}}{{Bh{Bf}}}}``{{}{{n{{`{Bj}}Bl}}}}{c{{`{{Cb{}{{Bn{{C`{eBf}}}}}}}}}{{Cb{}{{Bn{{n{{C`{CdBf}}Cf}}}}}}}{ChCjCl}}{c{{`{{D`{{C`{eBf}}}{{Cn{Cf}}}}}}}{{D`{{C`{DbBf}}}{{Cn{Cf}}}}}{DdCjCl}}{dc{}}{c{{n{e}}}{}{}}{{}{{n{c}}}{}}{dDf}{{{d{fA`}}{d{Aj}}}{{n{AbAl}}}}{{{d{fA`}}{d{fAj}}}{{n{AbAl}}}};```````{d{{d{c}}}{}}00{{{d{f}}}{{d{fc}}}{}}00{{{d{Bd}}}Bd}{{d{d{fc}}}Ab{}}{dAb}{c{{n{Dh}}}Dj}{c{{n{Bd}}}Dj}{{{d{h}}}Dl}{{{d{Bd}}{d{Bd}}}Ad}{{d{d{c}}}Ad{}}0000{{{d{Dh}}{d{fAf}}}Ah}{{{d{Bd}}{d{fAf}}}Ah}{cc{}}00{{{d{fDn}}{Eb{E`}}}Ab}{{{d{Bd}}{d{fc}}}AbBb}`{{}c{}}00{{{Ed{{Eb{E`}}}}}Dn}{{}{{n{DhEf}}}}`{{{d{Dh}}c}nEh}{{{d{Bd}}c}nEh}{{}{{C`{EjDh{`{{Cb{}{{Bn{Dh}}}}}}}}}}={dc{}}{c{{n{e}}}{}{}}00{{}{{n{c}}}{}}00`{dDf}00999`{d{{d{c}}}{}}{{{d{f}}}{{d{fc}}}{}}>;{El{{d{En}}}}{{{d{F`}}{d{fc}}}Fb{FdFf}}654=","D":"Ch","p":[[5,"Command",110],[1,"reference"],[0,"mut"],[1,"str"],[5,"Duration",111],[5,"ParseFloatError",112],[6,"Result",113],[5,"Opts",0],[1,"unit"],[1,"bool"],[5,"Formatter",114],[8,"Result",114],[5,"ArgMatches",115],[8,"Error",116],[5,"Id",117],[6,"Option",118],[10,"Hasher",119],[5,"SeedNodeSettings",42],[6,"SocketAddr",120],[5,"SeedNode",121],[10,"Reply",122],[6,"Infallible",123],[17,"Item"],[1,"tuple"],[10,"Stream",124],[5,"BytesMut",125],[5,"Error",126],[10,"Deserialize",127],[10,"Debug",114],[10,"Send",128],[17,"Error"],[10,"Sink",129],[5,"Bytes",130],[10,"Serialize",131],[5,"TypeId",132],[5,"ServerSettings",42],[10,"Deserializer",127],[5,"PathBuf",133],[5,"UnboundedSenderEventHandler",42],[5,"Event",134],[8,"Result",135],[5,"UnboundedSender",136],[6,"ConfigError",137],[10,"Serializer",131],[8,"RecommendedWatcher",138],[1,"usize"],[8,"MemberId",139],[5,"LowercaseAlphanumeric",99],[1,"char"],[10,"Rng",140],[10,"Sized",128]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAFIADgAAAAUACAAMABYAAQAaAAEAHQAAAB8AAQAkAAkAMgATAEkAAQBPAAAAUgABAFUADgBlAAEAagAEAA=="}],["hydro_cli",{"t":"FFFFFNHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNN","n":["AnyhowError","AnyhowWrapper","Deployment","Host","Service","__clone_box","_core","arguments","","","","as_ptr","as_ref","borrow","","","","","borrow_mut","","","","","clone","clone_into","clone_to_uninit","deref","doc","","","","extract","","","","","","","","","","fmt","","from","","","","","from_borrowed_ptr_or_opt","from_owned_ptr_or_opt","into","","","","","into_py","","","","","items_iter","","","","lazy_type_object","","","","new_err","source","to_object","to_owned","to_string","try_from","","","","","","try_from_exact","try_from_unchecked","try_into","","","","","type_id","","","","","type_object_raw","","","","","underlying","vzip","","","",""],"q":[[0,"hydro_cli"],[102,"dyn_clone::sealed"],[103,"pyo3::marker"],[104,"pyo3::types::module"],[105,"pyo3::err"],[106,"pyo3::types::any"],[107,"pyo3::instance"],[108,"pyo3_ffi::object"],[109,"core::ffi::c_str"],[110,"core::result"],[111,"core::fmt"],[112,"core::option"],[113,"pyo3::impl_::pyclass"],[114,"pyo3::impl_::pyclass::lazy_type_object"],[115,"pyo3::err::err_state"],[116,"core::marker"],[117,"core::error"],[118,"alloc::string"],[119,"core::convert"],[120,"core::any"]],"i":"`````Ah`0B`BbBdAb004321043214440432104443322110004321000432104321432143210004000432100043210432104321404321","f":"`````{{bd}f}{{h{b{j}}}{{l{f}}}}{h{{A`{n}}}}000{{{b{Ab}}}Ad}{{{b{Ab}}}{{b{n}}}}{b{{b{c}}}{}}0000{{{b{Af}}}{{b{Afc}}}{}}0000{{{b{Ah}}}Ah}{{b{b{Afc}}}f{}}{bf}5{h{{l{{b{Aj}}}}}}000{{{b{n}}}{{l{{b{Ab}}}}}}{{{b{n}}}{{An{cAl}}}{}}{{{b{n}}{b{Afc}}}{{l{{b{AfAh}}}}}{}}{{{b{n}}{b{Afc}}}{{l{{b{Ah}}}}}{}}{{{b{n}}{b{Afc}}}{{l{{b{B`}}}}}{}}{{{b{n}}{b{Afc}}}{{l{{b{AfB`}}}}}{}}{{{b{n}}{b{Afc}}}{{l{{b{Bb}}}}}{}}{{{b{n}}{b{Afc}}}{{l{{b{AfBb}}}}}{}}{{{b{n}}{b{Afc}}}{{l{{b{AfBd}}}}}{}}{{{b{n}}{b{Afc}}}{{l{{b{Bd}}}}}{}}{{{b{Ab}}{b{AfBf}}}{{An{fBh}}}}0{cc{}}0000{{hAd}{{Bj{{b{c}}}}}{}}0{{}c{}}0000{{{b{Ab}}h}{{A`{Ab}}}}{{Ahh}Bl}{{B`h}Bl}{{Bbh}Bl}{{Bdh}Bl}{{}Bn}000{{}{{b{{C`{Ah}}}}}}{{}{{b{{C`{B`}}}}}}{{}{{b{{C`{Bb}}}}}}{{}{{b{{C`{Bd}}}}}}{cAl{CbCdCf}}{{{b{Ab}}}{{Bj{{b{Ch}}}}}}{{{b{Ab}}h}Bl}{bc{}}{bCj}{c{{An{e}}}{}{}}{c{{An{{b{e}}Cl}}}{{Cn{{b{n}}}}}{}}11110{c{{b{e}}}{{Cn{{b{n}}}}}{}}{{}{{An{c}}}{}}0000{bD`}0000{hDb}0000`{{}c{}}0000","D":"Ah","p":[[1,"reference"],[5,"Private",102],[1,"unit"],[5,"Python",103],[5,"PyModule",104],[8,"PyResult",105],[5,"PyAny",106],[5,"Py",107],[5,"AnyhowError",0],[5,"PyObject",108],[0,"mut"],[5,"AnyhowWrapper",0],[5,"CStr",109],[5,"PyErr",105],[6,"Result",110],[5,"Deployment",0],[5,"Host",0],[5,"Service",0],[5,"Formatter",111],[5,"Error",111],[6,"Option",112],[8,"PyObject",107],[5,"PyClassItemsIter",113],[5,"LazyTypeObject",114],[10,"PyErrArguments",115],[10,"Send",116],[10,"Sync",116],[10,"Error",117],[5,"String",118],[5,"PyDowncastError",105],[10,"Into",119],[5,"TypeId",120],[5,"PyTypeObject",108]],"r":[],"b":[[33,"impl-PyFunctionArgument%3C\'a,+\'py%3E-for-%26mut+AnyhowWrapper"],[34,"impl-PyFunctionArgument%3C\'a,+\'py%3E-for-%26AnyhowWrapper"],[35,"impl-PyFunctionArgument%3C\'a,+\'py%3E-for-%26Deployment"],[36,"impl-PyFunctionArgument%3C\'a,+\'py%3E-for-%26mut+Deployment"],[37,"impl-PyFunctionArgument%3C\'a,+\'py%3E-for-%26Host"],[38,"impl-PyFunctionArgument%3C\'a,+\'py%3E-for-%26mut+Host"],[39,"impl-PyFunctionArgument%3C\'a,+\'py%3E-for-%26mut+Service"],[40,"impl-PyFunctionArgument%3C\'a,+\'py%3E-for-%26Service"],[41,"impl-Display-for-AnyhowError"],[42,"impl-Debug-for-AnyhowError"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAFoABQAAAAsADQAeADEAAQA4AAwARgAgAA=="}],["hydro_deploy",{"t":"EGEPEPPEKIGEPPKKPPEPPFFFGKRKPPPNMCNNNNNNNNNNNNMMNNNMMMCNMMCNNNNNMNNMNNNNNNCNCMNNNNNNMMCCMMMMMCMMMMMMMMCOOONNNNNNNNNNNNNNNNNNNCNNNNNNMFFNNNNNNNNONNNNNNNONNNNONNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNIINNFNNNNNNNNNNNONNONNONNNNNNNNFFFNNNNNNNNNNOONNNNNNNNNONNNNNONNONNNNNNNNNNNNNNNNNNNNPGPPFNNNNNNNNNNNNNNNNNNNNNNNNNCNNCNNNNCNNNNNNNNPPFPPPFKKKPPPPFIGGPPFPNNMNNNNNNNNNNNNNNNNNNNNNONNNNNNNMNMNNNMNNNMNNNNNNNNNMNNNOOMNNNMNNNNMNNNOOOOMNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNNNNNNNNIFNNNNNNNOOOOOOONNONNNNNFNNNNNNNNNONNCNNNNNNNNNNFNNNNNNNNNNNNNNNNNGPPPPGFPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKMMMNMNNMJFFFFFFFNNNNNNNNNNNNNNONNONNNNNNNNNNNNNNNNNNNNNNNOOONOONNNNNOONNNNNNNNNNNNNNNNNNNNNOONNNNNNNHH","n":["AzureHost","ClientStrategy","CustomService","Demux","Deployment","ExternalTcpPort","ForwardedTcpPort","GcpComputeEngineHost","Host","HostStrategyGetter","HostTargetType","HydroflowCrate","InternalTcpPort","","LaunchedBinary","LaunchedHost","Linux","Local","LocalhostHost","Merge","Null","ResourceBatch","ResourcePool","ResourceResult","ServerStrategy","Service","","ServiceBuilder","Tagged","UnixSocket","","__clone_box","as_any","azure","borrow","","","","","","borrow_mut","","","","","","build","can_connect_to","clone","clone_into","clone_to_uninit","collect_resources","","copy_binary","custom_service","default","deploy","deploy_stdout","deployment","eq","equivalent","","","","exit_code","fmt","","forward_port","from","","","","","","gcp","hash","hydroflow_crate","id","into","","","","","","launch_binary","launched","localhost","progress","provision","ready","request_custom_binary","request_port","server_config","ssh","start","stderr","stdin","stdout","stop","","strategy_as_server","target_type","terraform","","","","to_owned","try_from","","","","","","try_into","","","","","","type_id","","","","","","util","vzip","","","","","","wait","AzureHost","LaunchedVirtualMachine","as_any","borrow","","borrow_mut","","can_connect_to","collect_resources","copy_binary","external_ip","forward_port","from","","get_cloud_provider","get_external_ip","get_internal_ip","id","internal_ip","into","","launch_binary","launched","","new","provision","request_custom_binary","request_port","resource_result","server_config","ssh_user","strategy_as_server","target_type","try_from","","try_into","","type_id","","vzip","","CustomClientPort","CustomService","as_any","borrow","","borrow_mut","","collect_resources","connect","declare_client","deploy","from","","host","instantiate","instantiate_reverse","into","","new","","on","ready","record_server_config","record_server_strategy","server","server_port","source_path","start","stop","try_from","","try_into","","type_id","","vzip","","AddAzureHostDeploymentBuilder","AddGcpComputeEngineHostDeploymentBuilder","AzureHost","CustomService","Deployment","GcpComputeEngineHost","Localhost","add_azure_host","add_gcp_compute_engine_host","add_host","add_service","borrow","borrow_mut","default","deploy","from","hosts","into","new","resource_pool","run_ctrl_c","run_until","services","start","start_ctrl_c","start_until","stop","try_from","try_into","type_id","vzip","GcpComputeEngineHost","GcpNetwork","LaunchedComputeEngine","as_any","borrow","","","borrow_mut","","","can_connect_to","collect_resources","copy_binary","existing_vpc","external_ip","fmt","forward_port","from","","","get_cloud_provider","get_external_ip","get_internal_ip","id","internal_ip","into","","","launch_binary","launched","","new","","project","provision","request_custom_binary","request_port","resource_result","server_config","ssh_user","strategy_as_server","target_type","try_from","","","try_into","","","type_id","","","vzip","","","Bin","CrateTarget","Default","Example","HydroflowCrate","__clone_box","","args","bin","borrow","","borrow_mut","","build","clone","","clone_into","","clone_to_uninit","","display_name","eq","example","features","from","","into","","new","no_default_features","ports","profile","rustflags","service","target_dir","to_owned","","tracing","tracing_options","try_from","","try_into","","type_id","","vzip","","Demux","DemuxSelect","DemuxSink","Direct","","Forwarded","HydroflowPortConfig","HydroflowServer","HydroflowSink","HydroflowSource","Merge","MergeSelect","Null","","NullSourceSink","ReverseSinkInstantiator","ServerConfig","SourcePath","Tagged","","TaggedSource","TaggedUnwrap","__clone_box","","as_any","","","","borrow","","","","","","borrow_mut","","","","","","clone","","clone_into","","clone_to_uninit","","demux","from","","","","","","from_strategy","get_port","","host","","","","instantiate","","","","instantiate_reverse","","","","into","","","","","","launched_host","","load_instantiated","merge","","port","record_server_config","","","","record_server_strategy","","","","send_to","server","","","","service","service_host","service_server_defns","source","source_path","","","","tag","to_owned","","try_from","","","","","","try_into","","","","","","type_id","","","","","","vzip","","","","","","wrap_reverse_server_config","","HydroflowCrateService","add_connection","borrow","borrow_mut","collect_resources","deploy","exit_code","from","get_port","into","new","ready","start","stderr","stdout","stop","try_from","try_into","type_id","update_meta","vzip","NewTracingOptionsBuilder","TracingOptions","__clone_box","borrow","borrow_mut","builder","clone","clone_into","clone_to_uninit","dtrace_outfile","flamegraph_options","flamegraph_outfile","fold_dtrace_options","fold_outfile","fold_perf_options","frequency","from","into","perf_raw_outfile","to_owned","try_from","try_into","type_id","vzip","LocalhostHost","as_any","borrow","borrow_mut","can_connect_to","client_only","collect_resources","fmt","from","id","","into","launched","launched_binary","new","provision","request_custom_binary","request_port","strategy_as_server","target_type","try_from","try_into","type_id","vzip","LaunchedLocalhostBinary","borrow","borrow_mut","deploy_stdout","drop","exit_code","from","into","new","stderr","stdin","stdout","stop","try_from","try_into","type_id","vzip","wait","BarTree","Finished","","Group","Leaf","LeafStatus","ProgressTracker","Root","Started","__clone_box","borrow","","","borrow_mut","","","clone","clone_into","clone_to_uninit","end_task","eq","equivalent","","","","fmt","","from","","","into","","","leaf","println","progress_leaf","rich_leaf","start_task","to_owned","try_from","","","try_into","","","type_id","","","vzip","","","with_group","LaunchedSshHost","get_cloud_provider","get_external_ip","get_internal_ip","open_ssh_session","resource_result","server_config","ssh_key_path","ssh_user","TERRAFORM_ALPHABET","TerraformBatch","TerraformConfig","TerraformOutput","TerraformPool","TerraformProvider","TerraformResult","TerraformResultOutput","borrow","","","","","","","borrow_mut","","","","","","","data","default","","deployment_folder","deserialize","","","","","drop","","fmt","","from","","","","","","","into","","","","","","","output","outputs","provider","provision","required_providers","resource","serialize","","","","","source","terraform","try_from","","","","","","","try_into","","","","","","","type_id","","","","","","","value","version","vzip","","","","","","","async_retry","prioritized_broadcast"],"q":[[0,"hydro_deploy"],[133,"hydro_deploy::azure"],[174,"hydro_deploy::custom_service"],[211,"hydro_deploy::deployment"],[242,"hydro_deploy::gcp"],[296,"hydro_deploy::hydroflow_crate"],[343,"hydro_deploy::hydroflow_crate::ports"],[473,"hydro_deploy::hydroflow_crate::service"],[494,"hydro_deploy::hydroflow_crate::tracing_options"],[518,"hydro_deploy::localhost"],[542,"hydro_deploy::localhost::launched_binary"],[560,"hydro_deploy::progress"],[612,"hydro_deploy::ssh"],[621,"hydro_deploy::terraform"],[713,"hydro_deploy::util"],[715,"dyn_clone::sealed"],[716,"core::any"],[717,"core::future::future"],[718,"alloc::boxed"],[719,"core::pin"],[720,"alloc::sync"],[721,"alloc::string"],[722,"tokio::sync::oneshot"],[723,"core::option"],[724,"core::fmt"],[725,"core::net::socket_addr"],[726,"core::hash"],[727,"hydroflow_deploy_integration"],[728,"tokio::sync::mpsc::unbounded"],[729,"anyhow"],[730,"core::result"],[731,"std::collections::hash::map"],[732,"tokio::sync::rwlock"],[733,"core::ops::function"],[734,"alloc::vec"],[735,"core::convert"],[736,"core::iter::traits::collect"],[737,"std::path"],[738,"serde::ser"],[739,"async_process"],[740,"indicatif::progress_bar"],[741,"serde::de"],[742,"core::time"],[743,"std::sync::mutex"],[744,"std::io::error"],[745,"futures_core::stream"],[746,"core::marker"]],"i":"```Db`0Af`````10``Aj0`22`````A``3321h`Al54BfBh5276105435553AdAn`31Bl`8888803815:9438`8`65:943816``62661`20000266`54385:94385:94385:9438`5:94380``EdEf1011100001000100101111110001101010101``ElEn101010001111010110111110001010101``Gh0`00000000000000000000000000```HbHf1H`12022101011201112112012220022211122120120120120I``00`0Hj00101001010100100101000`00`0100`10101010Gd0`Fd11````1101````01`1Ij2IdIfIh3In2154602154646464610215466Fh5Il2465436543624376816866602460246002466662024626824376824376824376824376802`J`0000000000000000000``D`000000000000000000000`Gn00000000000`0000000000`Jf0000000000000000`JjJn00``011Jl21021222022222210210210000020210210210210`Kd0000000````````KfKhKlKnL`LdLb65432105651543206121654321065432105155455432035654321065432106543210236543210``","f":"```````````````````````````````{{bd}f}{{{b{h}}}{{b{j}}}}`{b{{b{c}}}{}}00000{{{b{l}}}{{b{lc}}}{}}00000{{{A`{}{{n{c}}}}Ab}cAd}{{{b{h}}Af}Ah}{{{b{Aj}}}Aj}{{b{b{lc}}}f{}}{bf}{{{b{h}}{b{lAl}}}f}{{{b{Ad}}{b{lAl}}}f}{{{b{An}}{b{`}}}{{Bd{{Bb{B`}}}}}}`{{}Bf}{{{b{lAd}}{b{{Bj{Bh}}}}}{{Bd{{Bb{B`}}}}}}{{{b{Bl}}}{{C`{Bn}}}}`{{{b{Aj}}{b{Aj}}}Ah}{{b{b{c}}}Ah{}}000{{{b{Bl}}}{{Cd{Cb}}}}{{{b{Bh}}{b{lCf}}}Ch}{{{b{Aj}}{b{lCf}}}Ch}{{{b{An}}{b{Cj}}}{{Bd{{Bb{B`}}}}}}{cc{}}00000`{{{b{Aj}}{b{lc}}}fCl}`{{{b{h}}}Ab}{{}c{}}00000{{{b{An}}Bn{b{`}}{b{{Cn{Bn}}}}{Cd{D`}}}{{Bd{{Bb{B`}}}}}}{{{b{h}}}{{Cd{{Bj{An}}}}}}``{{{b{h}}{b{{Bj{Bh}}}}}{{Bj{An}}}}{{{b{lAd}}}{{Bd{{Bb{B`}}}}}}{{{b{h}}}f}{{{b{h}}{b{Db}}}f}{{{b{An}}{b{Db}}}Dd}`3{{{b{Bl}}}{{Df{Bn}}}}{{{b{Bl}}}{{Dh{Bn}}}}1{{{b{lBl}}}{{Bd{{Bb{B`}}}}}}6{{{b{h}}{b{h}}}{{Dn{{Dl{AfDj}}}}}}{{{b{h}}}Aj}````{bc{}}{c{{E`{e}}}{}{}}00000{{}{{E`{c}}}{}}00000{bEb}00000`{{}c{}}000007``{{{b{Ed}}}{{b{j}}}}{b{{b{c}}}{}}0{{{b{l}}}{{b{lc}}}{}}0{{{b{Ed}}Af}Ah}{{{b{Ed}}{b{lAl}}}f}{{b{b{`}}}{{Bd{{Bb{B`}}}}}}`{{b{b{Cj}}}{{Bd{{Bb{B`}}}}}}{cc{}}0{{{b{Ef}}}Bn}{{{b{Ef}}}{{Cd{Bn}}}}1{{{b{Ed}}}Ab}`;;{{bBn{b{`}}{b{{Cn{Bn}}}}{Cd{D`}}}{{Bd{{Bb{B`}}}}}}{{{b{Ed}}}{{Cd{{Bj{An}}}}}}`{{AbBnBnBn{Cd{{Eh{BnBn}}}}Bn{Cd{Bn}}}Ed}{{{b{Ed}}{b{{Bj{Bh}}}}}{{Bj{An}}}}{{{b{Ed}}}f}{{{b{Ed}}{b{Db}}}f}{{{b{Ef}}}{{b{{Bj{Bh}}}}}}{{b{b{Db}}}Dd}{{{b{Ef}}}{{b{Ej}}}}{{{b{Ed}}{b{h}}}{{Dn{{Dl{AfDj}}}}}}{{{b{Ed}}}Aj}{c{{E`{e}}}{}{}}0{{}{{E`{c}}}{}}0{bEb}0{{}c{}}0``{{{b{El}}}{{b{j}}}}{b{{b{c}}}{}}0{{{b{l}}}{{b{lc}}}{}}0{{{b{En}}{b{lAl}}}f}{{{b{El}}}F`}{{{b{En}}{b{{Bj{{Fb{En}}}}}}}El}{{{b{lEn}}{b{{Bj{Bh}}}}}{{Bd{{Bb{B`}}}}}}{cc{}}0{{{b{El}}}{{Bj{h}}}}{{{b{El}}{b{Fd}}}{{Dn{{Bb{Ff}}}}}}{{{b{El}}{b{{Bj{h}}}}{Bj{Fh}}{b{Fj}}}{{Dn{Fl}}}};;{{Ab{Bj{h}}{G`{Fn}}}En}{{{Gb{{Fb{En}}}}}El}`{{{b{lEn}}}{{Bd{{Bb{B`}}}}}}{{{b{El}}Gd}f}{{{b{El}}Db}f}{{{b{El}}}{{Bj{Fh}}}}{{{b{El}}}Gf}{{{b{El}}}Fd}55{c{{E`{e}}}{}{}}0{{}{{E`{c}}}{}}0{bEb}0{{}c{}}0``{{{b{lGh}}}Gj}{{{b{lGh}}{Bj{h}}{G`{Fn}}}{{Bj{{Fb{En}}}}}}`{{{b{lGh}}}Gl}{{{b{Gh}}}{{Bj{Gn}}}}{{{b{lGh}}BnBnBn{Cd{{Eh{BnBn}}}}Bn{Cd{Bn}}}{{Bj{Ed}}}}{{{b{lGh}}BnBnBnBn{Bj{{Fb{H`}}}}{Cd{Bn}}{Cd{Bn}}}{{Bj{Hb}}}}{{{b{lGh}}e}{{Bj{c}}}h{{Ff{Ab}{{Hd{c}}}}}}{{{b{lGh}}e}{{Bj{{Fb{c}}}}}Ad{{A`{}{{n{c}}}}}}{b{{b{c}}}{}}{{{b{l}}}{{b{lc}}}{}}{{}Gh}{{{b{lGh}}}{{Dn{f}}}}{cc{}}`=2`1{{{b{lGh}}c}{{Dn{f}}}{{B`{}{{Hd{f}}}}}}`2202{c{{E`{e}}}{}{}}{{}{{E`{c}}}{}}{bEb}{{}c{}}```{{{b{Hb}}}{{b{j}}}}:::999{{{b{Hb}}Af}Ah}{{{b{Hb}}{b{lAl}}}f}{{b{b{`}}}{{Bd{{Bb{B`}}}}}}``{{{b{H`}}{b{lCf}}}Ch}{{b{b{Cj}}}{{Bd{{Bb{B`}}}}}};;;{{{b{Hf}}}Bn}{{{b{Hf}}}{{Cd{Bn}}}}1{{{b{Hb}}}Ab}`999{{bBn{b{`}}{b{{Cn{Bn}}}}{Cd{D`}}}{{Bd{{Bb{B`}}}}}}{{{b{Hb}}}{{Cd{{Bj{An}}}}}}`{{Abcegi{Bj{{Fb{H`}}}}{Cd{Bn}}{Cd{Bn}}}Hb{{Hh{Bn}}}{{Hh{Bn}}}{{Hh{Bn}}}{{Hh{Bn}}}}{{c{Cd{Bn}}}H`{{Hh{Bn}}}}`{{{b{Hb}}{b{{Bj{Bh}}}}}{{Bj{An}}}}{{{b{Hb}}}f}{{{b{Hb}}{b{Db}}}f}{{{b{Hf}}}{{b{{Bj{Bh}}}}}}{{b{b{Db}}}Dd}{{{b{Hf}}}{{b{Ej}}}}{{{b{Hb}}{b{h}}}{{Dn{{Dl{AfDj}}}}}}{{{b{Hb}}}Aj}{c{{E`{e}}}{}{}}00{{}{{E`{c}}}{}}00{bEb}00{{}c{}}00`````{{bd}f}0{{Hje}Hj{{Hh{Bn}}}{{Hn{}{{Hl{c}}}}}}{{Hjc}Hj{{Hh{Bn}}}}{b{{b{c}}}{}}0{{{b{l}}}{{b{lc}}}{}}0{{HjAb}c{}}{{{b{I`}}}I`}{{{b{Hj}}}Hj}{{b{b{lc}}}f{}}0{bf}07{{{b{I`}}{b{I`}}}Ah}89{cc{}}0<<{{c{Bj{h}}}Hj{{Hh{Ib}}}}{HjHj}`;;`{{Hjc}Hj{{Hh{Ib}}}}{bc{}}0{{Hjc}Hj{{Hh{D`}}}}`{c{{E`{e}}}{}{}}0{{}{{E`{c}}}{}}0{bEb}0{{}c{}}0``````````````````````{{bd}f}0{{{b{Id}}}{{b{j}}}}{{{b{If}}}{{b{j}}}}{{{b{Ih}}}{{b{j}}}}{{{b{Ij}}}{{b{j}}}}{b{{b{c}}}{}}00000{{{b{l}}}{{b{lc}}}{}}00000{{{b{Ij}}}Ij}{{{b{Gd}}}Gd}{{b{b{lc}}}f{}}0{bf}0`{cc{}}00000{{{b{Af}}{Bj{Fh}}}Gd}{{{b{Fh}}}Gf}{{{b{Ij}}}Gf}{{{b{Il}}}{{Bj{h}}}}{{{b{In}}}{{Bj{h}}}}{{{b{If}}}{{Bj{h}}}}{{{b{Ij}}}{{Bj{h}}}}{{{b{Id}}{b{Fd}}}{{Dn{{Bb{Ff}}}}}}{{{b{If}}{b{Fd}}}{{Dn{{Bb{Ff}}}}}}{{{b{Ih}}{b{Fd}}}{{Dn{{Bb{Ff}}}}}}{{{b{Ij}}{b{Fd}}}{{Dn{{Bb{Ff}}}}}}{{{b{Id}}{b{{Bj{h}}}}{Bj{Fh}}{b{Fj}}}{{Dn{Fl}}}}{{{b{If}}{b{{Bj{h}}}}{Bj{Fh}}{b{Fj}}}{{Dn{Fl}}}}{{{b{Ih}}{b{{Bj{h}}}}{Bj{Fh}}{b{Fj}}}{{Dn{Fl}}}}{{{b{Ij}}{b{{Bj{h}}}}{Bj{Fh}}{b{Fj}}}{{Dn{Fl}}}}{{}c{}}00000{{{b{Fh}}}{{Bj{An}}}}{{{b{Ij}}}{{Bj{An}}}}{{{b{Gd}}{b{Fj}}}{{Bd{{Bb{B`}}}}}}{{{b{Ij}}}Ij}``{{{b{Il}}Gd}f}{{{b{In}}Gd}f}{{{b{If}}Gd}f}{{{b{Ij}}Gd}f}{{{b{Il}}Db}f}{{{b{In}}Db}f}{{{b{If}}Db}f}{{{b{Ij}}Db}f}{{{b{Il}}{b{Id}}}f}{{{b{Il}}}{{Bj{Fh}}}}{{{b{In}}}{{Bj{Fh}}}}{{{b{If}}}{{Bj{Fh}}}}{{{b{Ij}}}{{Bj{Fh}}}}````{{{b{Il}}}Fd}{{{b{In}}}Fd}{{{b{If}}}Fd}{{{b{Ij}}}Fd}`{bc{}}0{c{{E`{e}}}{}{}}00000{{}{{E`{c}}}{}}00000{bEb}00000{{}c{}}00000{{{b{Il}}Gd}Gd}{{{b{In}}Gd}Gd}`{{{b{lJ`}}{b{{Bj{{Fb{J`}}}}}}Bn{b{Id}}}{{Dn{f}}}}{b{{b{c}}}{}}{{{b{l}}}{{b{lc}}}{}}{{{b{J`}}{b{lAl}}}f}{{{b{lJ`}}{b{{Bj{Bh}}}}}{{Bd{{Bb{B`}}}}}}{{{b{J`}}}{{Cd{Cb}}}}{cc{}}{{{b{J`}}Bn{b{{Bj{{Fb{J`}}}}}}}Ij}:{{AbIb{Bj{h}}{Cd{Bn}}{Cd{Bn}}{Cd{Bn}}{Cd{Bn}}{Cd{Ib}}Ah{Cd{D`}}{Cd{{G`{Bn}}}}{Cd{{G`{Bn}}}}{Cd{Bn}}{G`{Fn}}}J`}{{{b{lJ`}}}{{Bd{{Bb{B`}}}}}}0{{{b{J`}}}{{Df{Bn}}}}01{c{{E`{e}}}{}{}}{{}{{E`{c}}}{}}{bEb}{{{b{lJ`}}c}fJb}{{}c{}}``{{bd}f}?>{{}Jd}{{{b{D`}}}D`}{{b{b{lc}}}f{}}{bf}```````>5`{bc{}}:986`{{{b{Gn}}}{{b{j}}}}{b{{b{c}}}{}}{{{b{l}}}{{b{lc}}}{}}{{{b{Gn}}Af}Ah}{{{b{Gn}}}Gn}{{{b{Gn}}{b{lAl}}}f}{{{b{Gn}}{b{lCf}}}Ch}{cc{}}{{{b{Gn}}}Ab}`?{{{b{Gn}}}{{Cd{{Bj{An}}}}}}`{AbGn}{{{b{Gn}}{b{{Bj{Bh}}}}}{{Bj{An}}}}{{{b{Gn}}}f}{{{b{Gn}}{b{Db}}}f}{{{b{Gn}}{b{h}}}{{Dn{{Dl{AfDj}}}}}}{{{b{Gn}}}Aj}{c{{E`{e}}}{}{}}{{}{{E`{c}}}{}}{bEb}{{}c{}}`{b{{b{c}}}{}}{{{b{l}}}{{b{lc}}}{}}{{{b{Jf}}}{{C`{Bn}}}}{{{b{lJf}}}f}{{{b{Jf}}}{{Cd{Cb}}}}{cc{}}6{{JhBn{Cd{D`}}}Jf}{{{b{Jf}}}{{Df{Bn}}}}{{{b{Jf}}}{{Dh{Bn}}}}1{{{b{lJf}}}{{Bd{{Bb{B`}}}}}}=<;:0`````````{{bd}f}:::999{{{b{Jj}}}Jj}{{b{b{lc}}}f{}}{bf}{{{b{lJl}}{G`{Ab}}}f}{{{b{Jj}}{b{Jj}}}Ah}{{b{b{c}}}Ah{}}000{{{b{Jj}}{b{lCf}}}Ch}{{{b{Jn}}{b{lCf}}}Ch}==={{}c{}}00{{cg}{{`{{B`{}{{Hd{e}}}}}}}{{Hh{Bn}}}{}{{B`{}{{Hd{e}}}}}}{cf{{K`{Ej}}}}{{ci}{{`{{B`{}{{Hd{e}}}}}}}{{Hh{Bn}}}{}{{B`{}{{Hd{e}}}}}{{Ff{{Bb{Fj}}{Bb{Fj}}}{{Hd{g}}}}}}{{ci}{{`{{B`{}{{Hd{e}}}}}}}{{Hh{Bn}}}{}{{B`{}{{Hd{e}}}}}{{Ff{{Bb{Fj}}}{{Hd{g}}}}}}{{{b{lJl}}{G`{Ab}}BnAh{Cd{Ab}}Ah}{{Dl{Ab{Bj{Kb}}}}}}{bc{}}{c{{E`{e}}}{}{}}00{{}{{E`{c}}}{}}00{bEb}00999{{c{Cd{Ab}}i}{{`{{B`{}{{Hd{e}}}}}}}{{Hh{Bn}}}{}{{B`{}{{Hd{e}}}}}{{Ff{}{{Hd{g}}}}}}`{{{b{Kd}}}Bn}{{{b{Kd}}}{{Cd{Bn}}}}1{{{b{Kd}}}{{Bd{{Bb{B`}}}}}}{{{b{Kd}}}{{b{{Bj{Bh}}}}}}{{{b{Kd}}{b{Db}}}Dd}{{{b{Kd}}}Ib}{{{b{Kd}}}{{b{Ej}}}}````````{b{{b{c}}}{}}000000{{{b{l}}}{{b{lc}}}{}}000000`{{}Kf}{{}Kh}`{c{{E`{Kh}}}Kj}{c{{E`{Kl}}}Kj}{c{{E`{Kn}}}Kj}{c{{E`{L`}}}Kj}{c{{E`{Lb}}}Kj}{{{b{lKf}}}f}{{{b{lLd}}}f}{{{b{L`}}{b{lCf}}}Ch}{{{b{Ld}}{b{lCf}}}Ch}{cc{}}000000{{}c{}}000000```{{Kh{b{lKf}}}{{Dn{Ld}}}}``{{{b{Kh}}c}E`Lf}{{{b{Kl}}c}E`Lf}{{{b{Kn}}c}E`Lf}{{{b{L`}}c}E`Lf}{{{b{Lb}}c}E`Lf}``{c{{E`{e}}}{}{}}000000{{}{{E`{c}}}{}}000000{bEb}000000``9999999{{gAbLh}{{Dn{c}}}{}{{B`{}{{Hd{{Dn{c}}}}}}}{{Lj{}{{Hd{e}}}}}}{{ce}{{Dl{{Bj{{Ln{{Cd{{Ll{Bn}}}}}}}}{Bj{{Ln{{G`{{Dh{Bn}}}}}}}}}}}{{Mb{}{{Hl{{M`{Bn}}}}}}MdMf}{{Fj{Bn}}Md}}","D":"Nn","p":[[1,"reference"],[5,"Private",715],[1,"unit"],[10,"Host",0],[10,"Any",716],[0,"mut"],[17,"Service"],[10,"ServiceBuilder",0],[1,"usize"],[10,"Service",0],[6,"ClientStrategy",0],[1,"bool"],[6,"HostTargetType",0],[5,"ResourceBatch",0],[10,"LaunchedHost",0],[10,"Future",717],[5,"Box",718],[5,"Pin",719],[5,"ResourcePool",0],[5,"ResourceResult",0],[5,"Arc",720],[10,"LaunchedBinary",0],[5,"String",721],[5,"Receiver",722],[1,"i32"],[6,"Option",723],[5,"Formatter",724],[8,"Result",724],[6,"SocketAddr",725],[10,"Hasher",726],[1,"slice"],[5,"TracingOptions",494],[6,"ServerStrategy",0],[6,"ServerBindConfig",727],[5,"UnboundedReceiver",728],[5,"UnboundedSender",728],[8,"HostStrategyGetter",0],[1,"tuple"],[8,"Result",729],[6,"Result",730],[5,"TypeId",716],[5,"AzureHost",133],[5,"LaunchedVirtualMachine",133],[5,"HashMap",731],[1,"str"],[5,"CustomClientPort",174],[5,"CustomService",174],[5,"ConnectedDirect",727],[5,"RwLock",732],[6,"SourcePath",343],[10,"FnOnce",733],[10,"HydroflowServer",343],[10,"Fn",733],[8,"ReverseSinkInstantiator",343],[1,"u16"],[5,"Vec",734],[5,"Weak",720],[6,"ServerConfig",343],[6,"ServerPort",727],[5,"Deployment",211],[8,"AddAzureHostDeploymentBuilder",211],[8,"AddGcpComputeEngineHostDeploymentBuilder",211],[5,"LocalhostHost",518],[5,"GcpNetwork",242],[5,"GcpComputeEngineHost",242],[17,"Output"],[5,"LaunchedComputeEngine",242],[10,"Into",735],[5,"HydroflowCrate",296],[17,"Item"],[10,"IntoIterator",736],[6,"CrateTarget",296],[5,"PathBuf",737],[10,"HydroflowSink",343],[5,"NullSourceSink",343],[5,"DemuxSink",343],[5,"HydroflowPortConfig",343],[10,"HydroflowSource",343],[5,"TaggedSource",343],[5,"HydroflowCrateService",473],[10,"Serialize",738],[8,"NewTracingOptionsBuilder",494],[5,"LaunchedLocalhostBinary",542],[5,"Child",739],[6,"LeafStatus",560],[5,"ProgressTracker",560],[6,"BarTree",560],[10,"AsRef",735],[5,"ProgressBar",740],[10,"LaunchedSshHost",612],[5,"TerraformPool",621],[5,"TerraformBatch",621],[10,"Deserializer",741],[5,"TerraformConfig",621],[5,"TerraformProvider",621],[5,"TerraformOutput",621],[5,"TerraformResultOutput",621],[5,"TerraformResult",621],[10,"Serializer",738],[5,"Duration",742],[10,"FnMut",733],[5,"Sender",722],[5,"Mutex",743],[8,"Result",744],[10,"Stream",745],[10,"Send",746],[10,"Unpin",746]],"r":[[0,133],[2,174],[4,211],[7,242],[11,296],[18,518]],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAFQCNQAAAAEAAwAVABoABgAiAA0AMQACADYAAgA7AAkASwACAFUAAwBcAAAAXgAAAGAAAgBmAB4AhgALAJQABACbABQAsQAIALwAAgDBABIA1gAMAOQAAADmAAEA6gABAO4AFQAHAQQADwEdAC4BAQAyAQoAPgEAAEABAABGAQEASQEOAFoBBwBkASIAjQEGAJUBAgCZAQIAogE+AOIBAADkAQoA8AEDAPUBAgD5AQAA+wEAAP0BAAACAgwAEAIBABMCEQAnAiQAUgIfAHMCEwCIAggAnwIsAA=="}],["hydroflow",{"t":"YIQEECQEQQQQEEEQXQQEQQECEEXEEEECQQQEECFFFKFFFFFFHNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNMNNMNNNNNNNNNMNNMNNNHOOONNNNNNNNNNNNNNNNNNNNNNNNNNNFFFNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNCCCNNNCNNNCNNCCCNNCCNNNNNNNNNNNNNNFNNNNNNNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKMMMMMMMMMMKKKRFFKFMNNNNNNNNMNNNNNNNNNNNNNNNNNNMNNNNNCNNNNNMNNNMNNNNNNNMNNNNNNNRKKKRMMMFKFNNNNNNNNNNNMNNNNNNNNNNNNFOONNNNNNNNNNNNCNNNNIKFFGIIGIINNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNTFFTNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNPPFFFPPGGIIIIIIIIIIHHHHHNNNNNNNNNNCNNNNNNHHHHHCCHNNNNNNNNNNNHHCCHHHCHCHHHHNNNNNNNNNNNNNNNNNHHHHHHHHHCHHKFNNMNNNNNNNNNNNNNNNNNNKYKRKMMPGIKFFKKFPPPPFFIIIIRPPPPFPPPPRGPGGGRRKPPPPFPPPPPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNHHNNNNNNNNNNNNNMNNMNNOQHONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNNNNNNFFFFIFKIFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNCPPFFFGNNNNNNNNHHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNH","n":["DemuxEnum","Never","assert_var_impl","bincode","bytes","compiled","datalog","futures","hydroflow_expect_warnings","hydroflow_parser","hydroflow_syntax","hydroflow_syntax_noemit","itertools","lang","lattices","launch","main","monotonic_fn","morphism","pusherator","rassert","rassert_eq","rustc_hash","scheduled","serde","serde_json","test","tokio","tokio_stream","tokio_util","tracing","util","var_args","var_expr","var_type","variadics","web_time","pull","AntiJoin","CrossJoin","CrossJoinState","HalfJoinState","HalfJoinStateFold","HalfJoinStateFoldFrom","HalfJoinStateReduce","HalfMultisetJoinState","HalfSetJoinState","SymmetricHashJoin","anti_join_into_iter","borrow","","","","","","","","","borrow_mut","","","","","","","","","build","","","clear","","","","","default","","","","","","fmt","","fold_into","","from","","","","","","","","","full_probe","","","into","","","","","","","","","into_iter","","","is_empty","","iter","","","len","","","multiunzip","","","new","next","","","pop_match","","","probe","","","reduce_into","symmetric_hash_join_into_iter","table","","","try_from","","","","","","","","","try_into","","","","","","","","","type_id","","","","","","","","","HandoffId","StateId","SubgraphId","borrow","","","borrow_mut","","","clone","","","clone_into","","","clone_to_uninit","","","cmp","","context","eq","","","equivalent","","","","","","fmt","","","","","from","","","graph","graph_ext","handoff","hash","","","input","into","","","net","partial_cmp","","port","query","reactor","serialize","","state","ticks","to_owned","","","to_string","","try_from","","","try_into","","","type_id","","","Context","abort_tasks","add_state","borrow","borrow_mut","current_stratum","current_subgraph","current_tick","current_tick_start","default","from","into","is_first_run_this_tick","join_tasks","remove_state","request_task","schedule_subgraph","set_state_tick_hook","spawn_tasks","state_mut","state_ref","try_from","try_into","type_id","waker","Hydroflow","abort_tasks","add_channel_input","add_input","add_input_from_stream","add_read_tcp_stream","add_state","add_subgraph","add_subgraph_2in_2out","add_subgraph_2in_out","add_subgraph_2sink","add_subgraph_in_2out","add_subgraph_in_out","add_subgraph_n_m","add_subgraph_sink","add_subgraph_source","add_subgraph_stratified","add_subgraph_stratified_n_m","add_tcp_stream","add_write_tcp_stream","borrow","borrow_mut","context_mut","current_stratum","current_tick","default","diagnostics","drop","from","inbound_tcp_vertex","inbound_tcp_vertex_port","into","join_tasks","make_edge","meta_graph","new","next_stratum","outbound_tcp_vertex","reactor","recv_events","recv_events_async","request_task","run","run_async","run_available","run_available_async","run_stratum","run_tick","schedule_subgraph","set_state_tick_hook","teeing_handoff_drop","teeing_handoff_tee","try_from","try_into","try_recv_events","type_id","GraphExt","add_channel_input","add_input","add_input_from_stream","add_subgraph_2in_2out","add_subgraph_2in_out","add_subgraph_2sink","add_subgraph_in_2out","add_subgraph_in_out","add_subgraph_sink","add_subgraph_source","CanReceive","Handoff","HandoffMeta","Inner","Iter","TeeingHandoff","TryCanReceive","VecHandoff","any_ref","","","borrow","","","borrow_mut","","","borrow_mut_swap","","","clone","","clone_into","","clone_to_uninit","","cmp","default","","eq","equivalent","","fmt","from","","","give","","","","","","handoff_list","hash","into","","","into_iter","is_bottom","","","partial_cmp","take_inner","","","to_owned","","try_from","","","try_give","","try_into","","","type_id","","","Ctx","HandoffList","PortList","PortListSplit","Suffix","make_ctx","set_graph_meta","split_ctx","Buffer","Give","Input","borrow","","borrow_mut","","clone","clone_into","clone_to_uninit","default","flush","from","","give","","","into","","new","to_owned","try_from","","try_into","","type_id","","Message","address","batch","borrow","borrow_mut","clone","clone_into","clone_to_uninit","decode","eq","equivalent","","fmt","from","into","network_vertex","to_owned","try_from","try_into","type_id","Address","Polarity","Port","PortCtx","RECV","RecvCtx","RecvPort","SEND","SendCtx","SendPort","borrow","","","","borrow_mut","","","","borrow_mut_swap","","drop","","from","","","","give","","into","","","","ref_cast","ref_cast_mut","take_inner","","tee","","try_from","","","","try_give","","try_into","","","","type_id","","","","Operator","Query","borrow","","borrow_mut","","concat","","default","filter","from","","into","","map","new","run_available","sink","source","tee","try_from","","try_into","","type_id","","Reactor","borrow","borrow_mut","clone","clone_into","clone_to_uninit","from","into","into_waker","to_owned","trigger","try_from","try_into","type_id","StateHandle","StateHandleErased","borrow","","borrow_mut","","clone","","clone_into","","clone_to_uninit","","cmp","","eq","","equivalent","","","","fmt","","from","","","hash","","into","","partial_cmp","","to_owned","","try_from","","","try_into","","type_id","","SINGLE_TICK","TickDuration","TickInstant","ZERO","add","","add_assign","","borrow","","borrow_mut","","clone","","clone_into","","clone_to_uninit","","cmp","","default","","deserialize","","eq","","equivalent","","","","fmt","","","","from","","hash","","into","","neg","new","","partial_cmp","","serialize","","sub","","","sub_assign","","ticks","to_owned","","to_string","","try_from","","try_into","","type_id","","Delete","","DroppableChild","MonotonicFn","Morphism","Persist","","Persistence","PersistenceKeyed","TcpFramedSink","TcpFramedStream","UdpBytesSink","UdpBytesStream","UdpFramedSink","UdpFramedStream","UdpLinesSink","UdpLinesStream","UdpSink","UdpStream","bind_tcp","bind_tcp_bytes","bind_tcp_lines","bind_udp_bytes","bind_udp_lines","borrow","","","","","borrow_mut","","","","","clear","clone","","clone_into","","clone_to_uninit","","collect_ready","collect_ready_async","connect_tcp","connect_tcp_bytes","connect_tcp_lines","demux_enum","deploy","deserialize_from_bytes","drop","from","","","","","into","","","","","ipv4_resolve","iter_batches_stream","monotonic_map","multiset","ready_iter","run_cargo_example","serialize_to_bytes","simulation","sort_unstable_by_key_hrtb","sparse_vec","tcp_bytes","tcp_bytestream","tcp_framed","tcp_lines","to_owned","","try_from","","","","","try_into","","","","","type_id","","","","","udp_bytes","udp_bytestream","udp_framed","udp_lines","unbounded_channel","unix_bytes","unix_bytestream","unix_framed","unix_lines","unsync","unsync_channel","wait_for_process_output","Clear","ClearDefault","borrow","borrow_mut","clear","","clone","clone_into","clone_to_uninit","cmp","default","eq","equivalent","","fmt","from","hash","into","partial_cmp","to_owned","try_from","try_into","type_id","DemuxEnum","","DemuxEnumBase","Output","SingleVariant","demux_enum","single_variant","Bound","BoundConnection","BufferedDrain","Connected","ConnectedDemux","ConnectedDirect","ConnectedSink","ConnectedSource","ConnectedTagged","Demux","","","","DemuxDrain","DeployPorts","DynSink","DynStream","DynStreamSink","InitConfig","Input","Merge","","","","MergeSource","Null","","","","Output","RealizedServerPort","Server","ServerBindConfig","ServerOrBound","ServerPort","Sink","Stream","StreamSink","Tagged","","","","TaggedSource","TcpPort","","","","UnixSocket","","","","accept_tcp","bind","borrow","","","","","","","","","","","","borrow_mut","","","","","","","","","","","","clone","","clone_into","","clone_to_uninit","","connect","connect_local_blocking","deserialize","","fmt","","","","","from","","","","","","","","","","","","","from_defn","","","","init","init_no_ack_start","instantiate","into","","","","","","","","","","","","into_sink","","","into_source","","","keys","launch","launch_flow","meta","poll_close","poll_flush","poll_next","","poll_ready","port","serialize","","sink_port","start_send","to_owned","","try_from","","","","","","","","","","","","try_into","","","","","","","","","","","","try_poll_next","","type_id","","","","","","","","","","","","MonotonicMap","borrow","borrow_mut","clone","clone_into","clone_to_uninit","default","fmt","from","get_mut_clear","get_mut_default","get_mut_with","into","new_init","to_owned","try_from","try_into","type_id","HashMultiSet","borrow","borrow_mut","clone","clone_into","clone_to_uninit","default","eq","equivalent","","fmt","from","from_iter","insert","into","to_owned","try_from","try_into","type_id","Address","Fleet","Host","HostBuilder","Hostname","Inbox","MessageSender","MessageWithAddress","Outbox","TransducerBuilderContext","add_host","borrow","","","","","","","borrow_mut","","","","","","","build","clone","clone_into","clone_to_uninit","default","deserialize","eq","equivalent","","fmt","from","","","","","","","get_host","get_host_mut","hash","into","","","","","","","new","","","new_inbox","new_outbox","process_network","run_single_tick_all_hosts","run_tick","run_until_quiescent","send","serialize","to_owned","try_from","","","","","","","try_into","","","","","","","type_id","","","","","","","with_transducer","SparseVec","borrow","borrow_mut","default","delete","from","into","iter","push","try_from","try_into","type_id","mpsc","Closed","Full","Receiver","SendError","Sender","TrySendError","borrow","","","","borrow_mut","","","","bounded","channel","clone","","","clone_into","","","clone_to_uninit","","","close","close_this_sender","drop","","eq","","equivalent","","","","fmt","","","","from","","","","","into","","","","is_closed","poll_close","poll_flush","poll_next","poll_ready","poll_recv","recv","send","start_send","to_owned","","","to_string","","try_from","","","","try_into","","","","try_poll_next","try_send","type_id","","","","unbounded"],"q":[[0,"hydroflow"],[37,"hydroflow::compiled"],[38,"hydroflow::compiled::pull"],[162,"hydroflow::scheduled"],[234,"hydroflow::scheduled::context"],[259,"hydroflow::scheduled::graph"],[315,"hydroflow::scheduled::graph_ext"],[326,"hydroflow::scheduled::handoff"],[394,"hydroflow::scheduled::handoff::handoff_list"],[402,"hydroflow::scheduled::input"],[429,"hydroflow::scheduled::net"],[449,"hydroflow::scheduled::net::network_vertex"],[450,"hydroflow::scheduled::port"],[501,"hydroflow::scheduled::query"],[527,"hydroflow::scheduled::reactor"],[541,"hydroflow::scheduled::state"],[581,"hydroflow::scheduled::ticks"],[644,"hydroflow::util"],[747,"hydroflow::util::clear"],[770,"hydroflow::util::demux_enum"],[777,"hydroflow::util::deploy"],[961,"hydroflow::util::monotonic_map"],[979,"hydroflow::util::multiset"],[998,"hydroflow::util::simulation"],[1084,"hydroflow::util::sparse_vec"],[1096,"hydroflow::util::unsync"],[1097,"hydroflow::util::unsync::mpsc"],[1174,"rustc_hash"],[1175,"core::iter::traits::iterator"],[1176,"core::cmp"],[1177,"core::hash"],[1178,"core::clone"],[1179,"hydroflow::compiled::pull::half_join_state"],[1180,"hydroflow::compiled::pull::half_join_state::multiset"],[1181,"hydroflow::compiled::pull::half_join_state::set"],[1182,"hydroflow::compiled::pull::half_join_state::fold"],[1183,"hydroflow::compiled::pull::half_join_state::fold_from"],[1184,"hydroflow::compiled::pull::half_join_state::reduce"],[1185,"hydroflow::compiled::pull::cross_join"],[1186,"core::fmt"],[1187,"core::ops::function"],[1188,"core::slice::iter"],[1189,"smallvec"],[1190,"std::collections::hash::map"],[1191,"core::option"],[1192,"hydroflow::compiled::pull::symmetric_hash_join"],[1193,"hydroflow::compiled::pull::anti_join"],[1194,"core::result"],[1195,"core::any"],[1196,"serde::ser"],[1197,"alloc::string"],[1198,"std::time"],[1199,"alloc::boxed"],[1200,"core::future::future"],[1201,"core::task::wake"],[1202,"std::sync::mpsc"],[1203,"alloc::borrow"],[1204,"core::convert"],[1205,"futures_core::stream"],[1206,"tokio::net::tcp::stream"],[1207,"hydroflow::scheduled::handoff::vector"],[1208,"alloc::vec"],[1209,"hydroflow_lang::diagnostic"],[1210,"serde::de"],[1211,"core::marker"],[1212,"hydroflow_lang::graph::hydroflow_graph"],[1213,"hydroflow::scheduled::handoff::tee"],[1214,"core::cell"],[1215,"core::iter::traits::collect"],[1216,"variadics"],[1217,"bytes::bytes"],[1218,"tokio::sync::mpsc::error"],[1219,"core::net::socket_addr"],[1220,"hydroflow::util::tcp"],[1221,"std::io::error"],[1222,"tokio_util::codec::decoder"],[1223,"tokio_util::codec::encoder"],[1224,"bytes::bytes_mut"],[1225,"tokio_util::codec::lines_codec"],[1226,"hydroflow::util::udp"],[1227,"hydroflow::util::monotonic"],[1228,"core::default"],[1229,"tokio_util::codec::length_delimited"],[1230,"bincode::error"],[1231,"core::task::poll"],[1232,"futures_util::stream::poll_fn"],[1233,"std::process"],[1234,"tokio::net::tcp::split_owned"],[1235,"tokio_util::codec::framed_write"],[1236,"tokio_util::codec::framed_read"],[1237,"tokio_util::codec::bytes_codec"],[1238,"tokio::net::udp"],[1239,"tokio::sync::mpsc::unbounded"],[1240,"tokio_stream::wrappers::mpsc_unbounded"],[1241,"tokio::net::unix::stream"],[1242,"tokio::net::unix::split_owned"],[1243,"core::num::nonzero"],[1244,"hydroflow_deploy_integration"],[1245,"core::pin"],[1246,"futures_sink"],[1247,"core::iter::traits::double_ended"],[1248,"core::iter::traits::marker"],[1249,"hydroflow_macro"],[1250,"hydroflow_datalog"],[1251,"hydroflow::util::socket"]],"i":"`````````````````````````````````````````````````BdCjCnAlB`BbD`AhAj876543210Af216542196542121659876543210219876543218730002102187388730210214`654987654321987654321987654321```DfDhDj21021021021010`21022110022110210```210`210`10```21``21021210210210`Ed00000000000000000000000`Fd000000000000000000000000000000000000000000000000000000`Jf000000000```Gb````JhGnJd10Jn2104211010100210000210Gd33352`13211432153221321Kh6432432Hd```AIb110```GfFj101111010Kn212112212121`Gl0000000000000`0000``````````HfHbLdLb3210Hh12H`5432Hj3654333234165430365436543``LhLj1010011010100101101010`J`000000000000``EfM`101010101010110010100101010101101010Mb``0Ej1010101010101010101010011001101010110101010010110101010101AIdAIf```10`````````````````10A@jOfOh43210`101010````````24321043210``````````````10432104321043210``````````````ACj0ACh111111111111111111```ACn`ACl1AD`````````ADfADlADbADn``````AEf4321`4321AFd`6```10`5432`5432543263AEnAF`AFjAFnAFf:98;7AFhAE`65432<;:=910<:<:<:==<:<;:=965432<;;:=910ADh763``=76543=<;>:219768736``1225421=;:2=;76543=<;>:2176543=<;>:215476543=<;>:21`AGb0000000000000000`AGf00000000000000000``````````AGhAIhAIjAGjAGnAGl5AH`5432160200060000054321606605432160260116636AHf116543271654327165432713`AHj0000000000`AI`0````NfNjLn32103``203203203122103003300332103321032221211222030321032103122103`","f":"````````````````````````````````````````````````{{g{f{b{d{c}}}}{f{b{d{{h{ce}}}}}}j}{{`{{n{}{{l{{h{ce}}}}}}}}}{A`AbAd}{A`AbAd}{{n{}{{l{{h{ce}}}}}}}}{f{{f{c}}}{}}00000000{{{f{b}}}{{f{bc}}}{}}00000000{{{f{bAf}}c{f{e}}}j{}{}}{{{f{b{Ah{ceg}}}}c{f{e}}}j{AdA`Ab}AdAd}{{{f{b{Aj{ceg}}}}c{f{e}}}j{AdA`Ab}{AdA`}Ad}{{{f{b{Al{ce}}}}}An{}{}}{{{f{b{B`{ce}}}}}An{}{}}{{{f{b{Bb{ce}}}}}An{}{}}{{{f{b{Ah{ceg}}}}}An{}{}{}}{{{f{b{Aj{ceg}}}}}An{}{}{}}{{}{{Bd{ce}}}{}{}}{{}{{Al{ce}}}{}{}}{{}{{B`{ce}}}{}{}}{{}{{Bb{ce}}}{}{}}{{}{{Ah{ceg}}}{}{}{}}{{}{{Aj{ceg}}}{}{}{}}{{{f{{Ah{ceg}}}}{f{bBf}}}BhBjBjBj}{{{f{{Aj{ceg}}}}{f{bBf}}}BhBjBjBj}{{{f{b{Al{ce}}}}imo}An{A`Ab}{}{}{{n{}{{l{{h{cg}}}}}}}{}{{Bn{{f{be}}g}{{Bl{k}}}}}{{Bn{}{{Bl{e}}}}}}{{{f{b{B`{ce}}}}imo}An{A`Ab}{}{}{{n{}{{l{{h{cg}}}}}}}{}{{Bn{{f{be}}g}{{Bl{k}}}}}{{Bn{g}{{Bl{e}}}}}}{cc{}}00000000{{{f{Af}}{f{c}}}{{C`{e}}}{}{}}{{{f{{Ah{ceg}}}}{f{c}}}{{C`{e}}}{AdA`Ab}AdAd}{{{f{{Aj{ceg}}}}{f{c}}}{{C`{e}}}{AdA`Ab}{AdA`}Ad}{{}c{}}00000000000{{{f{Af}}}j}0{{{f{Af}}}{{Cf{c{Cd{{Cb{e}}}}}}}{}{}}{{{f{{Ah{ceg}}}}}{{Cf{c{Cd{{Cb{e}}}}}}}{AdA`Ab}AdAd}{{{f{{Aj{ceg}}}}}{{Cf{c{Cd{{Cb{e}}}}}}}{AdA`Ab}{AdA`}Ad}{{{f{Af}}}Ch}{{{f{{Ah{ceg}}}}}Ch{AdA`Ab}AdAd}{{{f{{Aj{ceg}}}}}Ch{AdA`Ab}{AdA`}Ad}{{}{{h{ce}}}{}{}}00{{ei{f{b{Bd{cg}}}}}{{Cj{ecig}}}{A`Ad}{{n{}{{l{c}}}}}{A`Ad}{{n{}{{l{g}}}}}}{{{f{b{Cj{ecig}}}}}{{Cl{k}}}{A`Ad}{{n{}{{l{c}}}}}{A`Ad}{{n{}{{l{g}}}}}{}}{{{f{b{Cn{cgekimo}}}}}{{Cl{Aa}}}{A`AbAd}Ad{{n{}{{l{{h{ce}}}}}}}Ad{{n{}{{l{{h{ci}}}}}}}{{Af{cei}}}{{Af{cie}}}{}}{{{f{b{D`{ceg}}}}}{{Cl{i}}}{A`AbAd}{A`AbAd}{{n{}{{l{{h{ce}}}}}}}{}}{{{f{bAf}}}{{Cl{{h{ceg}}}}}{}{}{}}{{{f{b{Ah{ceg}}}}}{{Cl{{h{cge}}}}}{AdA`Ab}AdAd}{{{f{b{Aj{ceg}}}}}{{Cl{{h{cge}}}}}{AdA`Ab}{AdA`}Ad}{{{f{bAf}}{f{c}}{f{e}}}{{Cl{{h{ceg}}}}}{}{}{}}{{{f{b{Ah{ceg}}}}{f{c}}{f{g}}}{{Cl{{h{cge}}}}}{AdA`Ab}AdAd}{{{f{b{Aj{ceg}}}}{f{c}}{f{g}}}{{Cl{{h{cge}}}}}{AdA`Ab}{AdA`}Ad}{{{f{b{Bb{ce}}}}gk}An{A`Ab}{}{{n{}{{l{{h{ce}}}}}}}{}{{Bn{{f{be}}e}{{Bl{i}}}}}}{{gk{f{bm}}{f{bo}}j}{{`{{n{}{{l{{h{c{h{ei}}}}}}}}}}}{A`AbAd}Ad{{n{}{{l{{h{ce}}}}}}}Ad{{n{}{{l{{h{ci}}}}}}}{{Af{cei}}}{{Af{cie}}}}```{c{{Db{e}}}{}{}}00000000{{}{{Db{c}}}{}}00000000{fDd}00000000```{f{{f{c}}}{}}00{{{f{b}}}{{f{bc}}}{}}00{{{f{Df}}}Df}{{{f{Dh}}}Dh}{{{f{Dj}}}Dj}{{f{f{bc}}}An{}}00{fAn}00{{{f{Dh}}{f{Dh}}}Dl}{{{f{Dj}}{f{Dj}}}Dl}`{{{f{Df}}{f{Df}}}j}{{{f{Dh}}{f{Dh}}}j}{{{f{Dj}}{f{Dj}}}j}{{f{f{c}}}j{}}00000{{{f{Df}}{f{bBf}}}Bh}0{{{f{Dh}}{f{bBf}}}Bh}0{{{f{Dj}}{f{bBf}}}Bh}{cc{}}00```{{{f{Df}}{f{bc}}}AnDn}{{{f{Dh}}{f{bc}}}AnDn}{{{f{Dj}}{f{bc}}}AnDn}`{{}c{}}00`{{{f{Dh}}{f{Dh}}}{{Cl{Dl}}}}{{{f{Dj}}{f{Dj}}}{{Cl{Dl}}}}```{{{f{Df}}c}DbE`}{{{f{Dh}}c}DbE`}``{fc{}}00{fEb}0{c{{Db{e}}}{}{}}00{{}{{Db{c}}}{}}00{fDd}00`{{{f{bEd}}}An}{{{f{bEd}}c}{{Ef{c}}}Eh}{f{{f{c}}}{}}{{{f{b}}}{{f{bc}}}{}}{{{f{Ed}}}Ch}{{{f{Ed}}}Df}{{{f{Ed}}}Ej}{{{f{Ed}}}El}{{}Ed}{cc{}}{{}c{}}{{{f{Ed}}}j};{{{f{bEd}}{Ef{c}}}{{En{c}}}Eh}{{{f{bEd}}c}An{{F`{}{{Bl{An}}}}}}{{{f{Ed}}Dfj}An}{{{f{bEd}}{Ef{c}}e}AnEh{{Bn{{f{bc}}}}}}?{{{f{bEd}}{Ef{c}}}{{f{bc}}}Eh}{{{f{Ed}}{Ef{c}}}{{f{c}}}Eh}{c{{Db{e}}}{}{}}{{}{{Db{c}}}{}}{fDd}{{{f{Ed}}}Fb}`{{{f{bFd}}}An}{{{f{bFd}}c{Ff{g}}}{{Fj{e{Fh{e}}}}}{{G`{{Fn{Fl}}}}}{}{Gb{Gd{e}}}}{{{f{bFd}}c{Ff{g}}}{{Fj{e{Gf{e}}}}}{{G`{{Fn{Fl}}}}}{}{Gb{Gd{e}}}}{{{f{bFd}}c{Ff{g}}i}An{{G`{{Fn{Fl}}}}}{}{Gb{Gd{e}}}{{Gh{}{{l{e}}}}}}{{{f{bFd}}Gj}{{H`{{Gn{Gl}}}}}}{{{f{bFd}}c}{{Ef{c}}}Eh}{{{f{bFd}}cegi}Df{{G`{{Fn{Fl}}}}}{{Hd{Hb}}}{{Hd{Hf}}}{{Bn{{f{bEd}}}}}}{{{f{bFd}}c{H`{e}}{H`{g}}{Ff{i}}{Ff{k}}m}Df{{G`{{Fn{Fl}}}}}GbGbGbGb{{Bn{{f{Ed}}{f{{Hh{e}}}}{f{{Hh{g}}}}{f{{Hj{i}}}}{f{{Hj{k}}}}}}}}{{{f{bFd}}c{H`{e}}{H`{g}}{Ff{i}}k}Df{{G`{{Fn{Fl}}}}}GbGbGb{{Bn{{f{Ed}}{f{{Hh{e}}}}{f{{Hh{g}}}}{f{{Hj{i}}}}}}}}{{{f{bFd}}c{H`{e}}{H`{g}}i}Df{{G`{{Fn{Fl}}}}}GbGb{{Bn{{f{Ed}}{f{{Hh{e}}}}{f{{Hh{g}}}}}}}}{{{f{bFd}}c{H`{e}}{Ff{g}}{Ff{i}}k}Df{{G`{{Fn{Fl}}}}}GbGbGb{{Bn{{f{Ed}}{f{{Hh{e}}}}{f{{Hj{g}}}}{f{{Hj{i}}}}}}}}{{{f{bFd}}c{H`{e}}{Ff{g}}i}Df{{G`{{Fn{Fl}}}}}GbGb{{Bn{{f{Ed}}{f{{Hh{e}}}}{f{{Hj{g}}}}}}}}{{{f{bFd}}c{Hl{{H`{e}}}}{Hl{{Ff{g}}}}i}Df{{G`{{Fn{Fl}}}}}GbGb{{Bn{{f{bEd}}{f{{Hn{{f{{Hh{e}}}}}}}}{f{{Hn{{f{{Hj{g}}}}}}}}}}}}{{{f{bFd}}c{H`{e}}g}Df{{G`{{Fn{Fl}}}}}Gb{{Bn{{f{Ed}}{f{{Hh{e}}}}}}}}{{{f{bFd}}c{Ff{e}}g}Df{{G`{{Fn{Fl}}}}}Gb{{Bn{{f{Ed}}{f{{Hj{e}}}}}}}}{{{f{bFd}}cChegji}Df{{G`{{Fn{Fl}}}}}{{Hd{Hb}}}{{Hd{Hf}}}{{Bn{{f{bEd}}}}}}{{{f{bFd}}cCh{Hl{{H`{e}}}}{Hl{{Ff{g}}}}i}Df{{G`{{Fn{Fl}}}}}GbGb{{Bn{{f{bEd}}{f{{Hn{{f{{Hh{e}}}}}}}}{f{{Hn{{f{{Hj{g}}}}}}}}}}}}{{{f{bFd}}Gj}{{h{{Ff{{Gn{Gl}}}}{H`{{Gn{Gl}}}}}}}}{{{f{bFd}}Gj}{{Ff{{Gn{Gl}}}}}}{f{{f{c}}}{}}{{{f{b}}}{{f{bc}}}{}}{{{f{bFd}}Df}{{f{bEd}}}}{{{f{Fd}}}Ch}{{{f{Fd}}}Ej}{{}Fd}{{{f{Fd}}}{{Cl{{f{{Hn{{Ib{I`}}}}}}}}}}{{{f{bFd}}}An}{cc{}}{{{f{bFd}}}{{h{Id{H`{{Gn{c}}}}}}}{IfIh}}{{{f{bFd}}Id}{{H`{{Gn{c}}}}}{IfIh}}{{}c{}}{{{f{bFd}}}{{`{F`}}}}{{{f{bFd}}c}{{h{{Ff{e}}{H`{e}}}}}{{G`{{Fn{Fl}}}}}Gb}{{{f{Fd}}}{{Cl{{f{Ij}}}}}}9{{{f{bFd}}j}j}{{{f{bFd}}}{{Ff{{Gn{{h{Ilc}}}}}}}{InIh}}{{{f{Fd}}}J`}{{{f{bFd}}}{{Cl{Ch}}}}0{{{f{bFd}}c}An{{F`{}{{Bl{An}}}}}}{{{f{bFd}}}{{Cl{Jb}}}}0{{{f{bFd}}}j}000{{{f{bFd}}Df}j}{{{f{bFd}}{Ef{c}}e}AnEh{{Bn{{f{bc}}}}}}{{{f{bFd}}{H`{{Jd{c}}}}}AnAd}{{{f{bFd}}{f{{H`{{Jd{c}}}}}}}{{H`{{Jd{c}}}}}Ad}{c{{Db{e}}}{}{}}{{}{{Db{c}}}{}}{{{f{bFd}}}Ch}{fDd}`{{{f{bJf}}c{Ff{g}}}{{Fj{e{Fh{e}}}}}{{G`{{Fn{Fl}}}}}{}{Gb{Gd{e}}}}{{{f{bJf}}c{Ff{g}}}{{Fj{e{Gf{e}}}}}{{G`{{Fn{Fl}}}}}{}{Gb{Gd{e}}}}{{{f{bJf}}c{Ff{g}}i}An{{G`{{Fn{Fl}}}}}{}{Gb{Gd{e}}}{{Gh{}{{l{e}}}}}}{{{f{bJf}}c{H`{e}}{H`{g}}{Ff{i}}{Ff{k}}m}Df{{G`{{Fn{Fl}}}}}GbGbGbGb{{Bn{{f{Ed}}{f{{Hh{e}}}}{f{{Hh{g}}}}{f{{Hj{i}}}}{f{{Hj{k}}}}}}}}{{{f{bJf}}c{H`{e}}{H`{g}}{Ff{i}}k}Df{{G`{{Fn{Fl}}}}}GbGbGb{{Bn{{f{Ed}}{f{{Hh{e}}}}{f{{Hh{g}}}}{f{{Hj{i}}}}}}}}{{{f{bJf}}c{H`{e}}{H`{g}}i}Df{{G`{{Fn{Fl}}}}}GbGb{{Bn{{f{Ed}}{f{{Hh{e}}}}{f{{Hh{g}}}}}}}}{{{f{bJf}}c{H`{e}}{Ff{g}}{Ff{i}}k}Df{{G`{{Fn{Fl}}}}}GbGbGb{{Bn{{f{Ed}}{f{{Hh{e}}}}{f{{Hj{g}}}}{f{{Hj{i}}}}}}}}{{{f{bJf}}c{H`{e}}{Ff{g}}i}Df{{G`{{Fn{Fl}}}}}GbGb{{Bn{{f{Ed}}{f{{Hh{e}}}}{f{{Hj{g}}}}}}}}{{{f{bJf}}c{H`{e}}g}Df{{G`{{Fn{Fl}}}}}Gb{{Bn{{f{Ed}}{f{{Hh{e}}}}}}}}{{{f{bJf}}c{Ff{e}}g}Df{{G`{{Fn{Fl}}}}}Gb{{Bn{{f{Ed}}{f{{Hj{e}}}}}}}}````````{{{f{Jh}}}{{f{Eh}}}}{{{f{{Gn{c}}}}}{{f{Eh}}}{}}{{{f{{Jd{c}}}}}{{f{Eh}}}{}}{f{{f{c}}}{}}00{{{f{b}}}{{f{bc}}}{}}00{{{f{{Gb{}{{Jj{c}}}}}}}{{Jl{c}}}{}}{{{f{{Gn{c}}}}}{{Jl{e}}}{}{}}{{{f{{Jd{c}}}}}{{Jl{e}}}{}{}}{{{f{{Jd{c}}}}}{{Jd{c}}}Ad}{{{f{{Jn{c}}}}}{{Jn{c}}}{K`Ad}}{{f{f{bc}}}An{}}0{fAn}0{{{f{{Jn{c}}}}{f{{Jn{c}}}}}Dl{K`Kb}}{{}{{Gn{c}}}{}}{{}{{Jd{c}}}{}}{{{f{{Jn{c}}}}{f{{Jn{c}}}}}j{K`Kd}}{{f{f{c}}}j{}}0{{{f{{Jn{c}}}}{f{bBf}}}Bh{K`Bj}}{cc{}}00{{{f{Gd}}c}c{}}{{{f{{Gn{c}}}}{Hl{c}}}{{Hl{c}}}{}}{{{f{{Gn{c}}}}{Jn{e}}}{{Jn{e}}}{}{{n{}{{l{c}}}}}}{{{f{{Gn{c}}}}{Cl{c}}}{{Cl{c}}}{}}{{{f{{Gb{}{{Jj{c}}}}}}e}e{}{}}{{{f{{Jd{c}}}}{Hl{c}}}{{Hl{c}}}Ad}`{{{f{{Jn{c}}}}{f{be}}}An{K`Ab}Dn}{{}c{}}00{{{Jn{c}}}eK`{}}{{{f{Jh}}}j}{{{f{{Gn{c}}}}}j{}}{{{f{{Jd{c}}}}}j{}}{{{f{{Jn{c}}}}{f{{Jn{c}}}}}{{Cl{Dl}}}{K`Kf}}{{{f{{Gb{}{{Jj{c}}}}}}}c{}}{{{f{{Gn{c}}}}}e{}{}}{{{f{{Jd{c}}}}}e{}{}}{fc{}}0{c{{Db{e}}}{}{}}00{{{f{Kh}}c}{{Db{cc}}}{}}{{{f{{Gb{}{{Jj{c}}}}}}e}{{Db{ee}}}{}{}}{{}{{Db{c}}}{}}00{fDd}00`````{{{f{{Hd{}{{Kj{c}}}}}}{f{{Hn{`}}}}}cKl}{{{f{{Hd{}{{Kj{c}}}}}}{f{b{Hn{`}}}}{f{b{Hl{Dh}}}}Dfj}AnKl}{ch{}}```{f{{f{c}}}{}}0{{{f{b}}}{{f{bc}}}{}}0{{{f{{Gf{c}}}}}{{Gf{c}}}{}}{{f{f{bc}}}An{}}{fAn}{{}{{Gf{c}}}{}}{{{f{{Fj{ce}}}}}An{}{{Kn{c}}}}{cc{}}0{{{f{Kn}}c}j{}}{{{f{{Gf{c}}}}c}j{}}{{{f{{Fj{ce}}}}c}An{}{{Kn{c}}}}{{}c{}}0{{J`Dfe}{{Fj{ce}}}{}{{Kn{c}}}}{fc{}}{c{{Db{e}}}{}{}}0{{}{{Db{c}}}{}}0{fDd}0```{f{{f{c}}}{}}{{{f{b}}}{{f{bc}}}{}}{{{f{Gl}}}Gl}{{f{f{bc}}}An{}}{fAn}{L`Gl}{{{f{Gl}}{f{Gl}}}j}{{f{f{c}}}j{}}0{{{f{Gl}}{f{bBf}}}Bh}{cc{}}?`=<;:``````````99998888{{{f{{Hh{c}}}}}JlGb}{{{f{{Lb{Hbc}}}}}JlGb}{{{Ld{Hb{Jd{c}}}}{f{bFd}}}AnAd}{{{H`{{Jd{c}}}}{f{bFd}}}AnAd}4444{{{f{{Hj{e}}}}c}c{}{{Gd{c}}Gb}}{{{f{{Lb{Hfe}}}}c}c{}{{Gd{c}}Gb}}{{}c{}}000{{{f{c}}}{{f{{Lb{eg}}}}}{}Lf{}}{{{f{bc}}}{{f{b{Lb{eg}}}}}{}Lf{}}{{{f{{Hh{c}}}}}{}Gb}{{{f{{Lb{Hbc}}}}}{}Gb}{{{f{{Ld{Hb{Jd{c}}}}}}{f{bFd}}}{{H`{{Jd{c}}}}}Ad}{{{f{{H`{{Jd{c}}}}}}{f{bFd}}}{{H`{{Jd{c}}}}}Ad}{c{{Db{e}}}{}{}}000{{{f{{Hj{e}}}}c}{{Db{cc}}}{}{{Kh{c}}Gb}}{{{f{{Lb{Hfe}}}}c}{{Db{cc}}}{}{{Kh{c}}Gb}}{{}{{Db{c}}}{}}000{fDd}000``{f{{f{c}}}{}}0{{{f{b}}}{{f{bc}}}{}}0{{{Lh{c}}{Lh{c}}}{{Lh{c}}}{}}{{{f{bLj}}{Hl{{Lh{c}}}}}{{Lh{c}}}{}}{{}Lj}{{{Lh{c}}e}{{Lh{c}}}{}{{Ll{{f{c}}}{{Bl{j}}}}}}{cc{}}0{{}c{}}0{{{Lh{c}}g}{{Lh{e}}}{}{}{{Ll{c}{{Bl{e}}}}}}4{{{f{bLj}}}An}{{{Lh{c}}e}An{}{{Ll{c}}}}{{{f{bLj}}e}{{Lh{c}}}{}{{Bn{{f{Ed}}{f{{Hj{{Gn{c}}}}}}}}}}{{{Lh{c}}Ch}{{Hl{{Lh{c}}}}}Ad}{c{{Db{e}}}{}{}}0??>>`=<{{{f{J`}}}J`}{{f{f{bc}}}An{}}{fAn}:9{{J`Df}Fb}{fc{}}{{{f{J`}}Df}{{Db{An{Ln{{h{Dfj}}}}}}}}6{{}{{Db{c}}}{}}{fDd}``{f{{f{c}}}{}}0{{{f{b}}}{{f{bc}}}{}}0{{{f{{Ef{c}}}}}{{Ef{c}}}{}}{{{f{M`}}}M`}::99{{{f{{Ef{c}}}}{f{{Ef{c}}}}}DlKb}{{{f{M`}}{f{M`}}}Dl}{{{f{{Ef{c}}}}{f{{Ef{c}}}}}jKd}{{{f{M`}}{f{M`}}}j}{{f{f{c}}}j{}}000{{{f{{Ef{c}}}}{f{bBf}}}BhBj}{{{f{M`}}{f{bBf}}}Bh}{cc{}}0{{{Ef{c}}}M`Eh}{{{f{{Ef{c}}}}{f{be}}}AnAbDn}{{{f{M`}}{f{bc}}}AnDn}{{}c{}}0{{{f{{Ef{c}}}}{f{{Ef{c}}}}}{{Cl{Dl}}}Kf}{{{f{M`}}{f{M`}}}{{Cl{Dl}}}}{fc{}}0{c{{Db{e}}}{}{}}{M`{{Db{{Ef{c}}e}}}Eh{}}1{{}{{Db{c}}}{}}0{fDd}0````{{EjMb}c{}}{{MbMb}c{}}{{{f{bEj}}Mb}An}{{{f{bMb}}Mb}An}{f{{f{c}}}{}}0{{{f{b}}}{{f{bc}}}{}}0{{{f{Ej}}}Ej}{{{f{Mb}}}Mb}{{f{f{bc}}}An{}}0{fAn}0{{{f{Ej}}{f{Ej}}}Dl}{{{f{Mb}}{f{Mb}}}Dl}{{}Ej}{{}Mb}{c{{Db{Ej}}}Md}{c{{Db{Mb}}}Md}{{{f{Ej}}{f{Ej}}}j}{{{f{Mb}}{f{Mb}}}j}{{f{f{c}}}j{}}000{{{f{Ej}}{f{bBf}}}Bh}0{{{f{Mb}}{f{bBf}}}Bh}0{cc{}}0{{{f{Ej}}{f{bc}}}AnDn}{{{f{Mb}}{f{bc}}}AnDn}{{}c{}}0{Mbc{}}{MfEj}{MhMb}{{{f{Ej}}{f{Ej}}}{{Cl{Dl}}}}{{{f{Mb}}{f{Mb}}}{{Cl{Dl}}}}{{{f{Ej}}c}DbE`}{{{f{Mb}}c}DbE`}{{EjMb}c{}}{{EjEj}c{}}{{MbMb}c{}}{{{f{bEj}}Mb}An}{{{f{bMb}}Mb}An}`{fc{}}0{fEb}0{c{{Db{e}}}{}{}}0{{}{{Db{c}}}{}}0{fDd}0```````````````````{{Mje}{{Db{{h{{Ml{c}}{Mn{e}}Mj}}N`}}}{}{AdNb{Nd{c}}}}{Mj{{h{{Nf{{h{L`Mj}}}}{Nj{{Db{{h{NhMj}}N`}}}}Mj}}}}{Mj{{h{{Nf{{h{EbMj}}}}{Nj{{Db{{h{EbMj}}Nl}}}}Mj}}}}{Mj{{h{NnO`Mj}}}}{Mj{{h{ObOdMj}}}}{f{{f{c}}}{}}0000{{{f{b}}}{{f{bc}}}{}}0000`{{{f{{Of{c}}}}}{{Of{c}}}Ad}{{{f{{Oh{c}}}}}{{Oh{c}}}Ad}{{f{f{bc}}}An{}}0{fAn}0{ceGhOj}{ceGh{OlOn}}{e{{h{{Ml{c}}{Mn{e}}}}}{}{AdNb{Nd{c}}}}{{}{{h{{Ml{L`}}{Mn{A@`}}}}}}{{}{{h{{Ml{Eb}}{Mn{A@b}}}}}}``{c{{A@d{e}}}{{A@h{{Hn{A@f}}}}}If}{{{f{bA@j}}}An}{cc{}}0000{{}c{}}0000{{{f{Fl}}}{{Db{MjN`}}}}{{cCh}{{AA`{{`{{Bn{{f{bA@l}}}{{Bl{{A@n{Cl}}}}}}}}}}}{K`AAb}}``{c{{`{{n{}{{l{}}}}}}}Gh}{{{f{Fl}}{f{Fl}}}{{h{A@jAAdAAf}}}}{cL`In}`{{{f{b{Hn{c}}}}g}An{}Kb{{Ll{{f{c}}}{{Bl{{f{e}}}}}}}}`{Gj{{h{{AAj{AAhA@`}}{AAn{AAlA@`}}}}}}{Gj{{h{{AAj{AAhAB`}}{AAn{AAlAB`}}}}}}{{Gjc}{{h{{AAj{AAhc}}{AAn{AAlc}}}}}{AdNb}}{Gj{{h{{AAj{AAhA@b}}{AAn{AAlA@b}}}}}}{fc{}}0{c{{Db{e}}}{}{}}0000{{}{{Db{c}}}{}}0000{fDd}0000{ABb{{h{NnO`Mj}}}}{ABb{{h{ABdABfMj}}}}{{ABbe}{{h{{ABh{ec}}{ABj{e}}Mj}}}{}{{Nd{c}}Nb}}{ABb{{h{{ABh{A@bEb}}{ABj{A@b}}Mj}}}}{{}{{h{{ABl{c}}{ABn{c}}}}}{}}{AC`{{h{{AAj{ACbA@`}}{AAn{ACdA@`}}}}}}{AC`{{h{{AAj{ACbAB`}}{AAn{ACdAB`}}}}}}{{AC`c}{{h{{AAj{ACbc}}{AAn{ACdc}}}}}{AdNb}}{AC`{{h{{AAj{ACbA@b}}{AAn{ACdA@b}}}}}}`{{{Cl{ACf}}}{{h{{Nf{c}}{Nj{c}}}}}{}}{{{f{bEb}}{f{bAAf}}{f{Fl}}}An}``{f{{f{c}}}{}}{{{f{b}}}{{f{bc}}}{}}{{{f{bACh}}}An}{{{f{b{ACj{c}}}}}AnOl}{{{f{{ACj{c}}}}}{{ACj{c}}}{OlAd}}{{f{f{bc}}}An{}}{fAn}{{{f{{ACj{c}}}}{f{{ACj{c}}}}}Dl{OlKb}}{{}{{ACj{c}}}Ol}{{{f{{ACj{c}}}}{f{{ACj{c}}}}}j{OlKd}}{{f{f{c}}}j{}}0{{{f{{ACj{c}}}}{f{bBf}}}Bh{OlBj}}{cc{}}{{{f{{ACj{c}}}}{f{be}}}An{OlAb}Dn}{{}c{}}{{{f{{ACj{c}}}}{f{{ACj{c}}}}}{{Cl{Dl}}}{OlKf}}{fc{}}{c{{Db{e}}}{}{}}{{}{{Db{c}}}{}}{fDd}`````{{ACl{f{bc}}}An{}}{{{ACn{}{{Bl{c}}}}}c{}}```````````````````````````````````````````````````{{{f{bAD`}}}Gj}{ADb{{ADd{{En{F`}}}}}}{f{{f{c}}}{}}00000000000{{{f{b}}}{{f{bc}}}{}}00000000000{{{f{ADf}}}ADf}{{{f{ADb}}}ADb}{{f{f{bc}}}An{}}0{fAn}0{AD`cADh}0{c{{Db{ADf}}}Md}{c{{Db{ADb}}}Md}{{{f{ADf}}{f{bBf}}}{{Db{AnADj}}}}{{{f{ADl}}{f{bBf}}}{{Db{AnADj}}}}{{{f{ADb}}{f{bBf}}}{{Db{AnADj}}}}{{{f{AD`}}{f{bBf}}}{{Db{AnADj}}}}{{{f{ADn}}{f{bBf}}}{{Db{AnADj}}}}{cc{}}00000{{{f{ADf}}}ADl}111111{AD`{{ADd{{En{F`}}}}}}000{{}{{AE`{c}}}{IfOl}}0{{{f{ADf}}}AD`}{{}c{}}00000000000{{{AEf{}{{AEb{c}}{AEd{e}}}}}eIh{{AEj{c}{{AEh{N`}}}}IhAEl}}{AEn{{ADd{{En{AEj}}}}}}{{{AF`{c}}}{}AEf}{{{AFd{}{{Bl{c}}{AFb{e}}}}}eIh{{Gh{}{{l{{Db{cN`}}}}}}IhAEl}}{AEn{{ADd{{En{Gh}}}}}}{{{AFf{c}}}{}AFd}``{FdAn}`{{{ADd{{f{b{AFh{ce}}}}}}{f{bA@l}}}{{A@n{{Db{An}}}}}{}{{AEj{c}{{AEh{N`}}}}IhAEl}}0{{{ADd{{f{b{AFj{ce}}}}}}{f{bA@l}}}{{A@n{Cl}}}AAb{{Gh{}{{l{c}}}}IhAElAFl}}{{{ADd{{f{b{AFn{ce}}}}}}{f{bA@l}}}{{A@n{Cl}}}AAb{{Gh{}{{l{{Db{cN`}}}}}}IhAElAFl}}2{{{f{{AE`{c}}}}{f{Fl}}}AD`{}}{{{f{ADf}}c}DbE`}{{{f{ADb}}c}DbE`}{{{f{ADn}}}ADf}{{{ADd{{f{b{AFh{ce}}}}}}{h{AG`c}}}{{Db{An}}}{}{{AEj{c}{{AEh{N`}}}}IhAEl}}{fc{}}0{c{{Db{e}}}{}{}}00000000000{{}{{Db{c}}}{}}00000000000{{{ADd{{f{bc}}}}{f{bA@l}}}{{A@n{{Cl{Db}}}}}{}}0{fDd}00000000000`{f{{f{c}}}{}}{{{f{b}}}{{f{bc}}}{}}{{{f{{AGb{ce}}}}}{{AGb{ce}}}{KfAd}Ad}{{f{f{bc}}}An{}}{fAn}{{}{{AGb{ce}}}KfOl}{{{f{{AGb{ce}}}}{f{bBf}}}Bh{KfBj}Bj}{cc{}}{{{f{b{AGb{ce}}}}c}{{f{be}}}KfACh}{{{f{b{AGb{ce}}}}c}{{f{be}}}KfOl}{{{f{b{AGb{ce}}}}cg}{{f{be}}}Kf{}{{AGd{}{{Bl{e}}}}}}{{}c{}}{c{{AGb{ec}}}{}Kf}{fc{}}{c{{Db{e}}}{}{}}{{}{{Db{c}}}{}}{fDd}`{f{{f{c}}}{}}{{{f{b}}}{{f{bc}}}{}}{{{f{{AGf{c}}}}}{{AGf{c}}}{AdAbA`}}{{f{f{bc}}}An{}}{fAn}{{}{{AGf{c}}}{AbA`}}{{{f{{AGf{c}}}}{f{{AGf{c}}}}}j{KdAbA`}}{{f{f{c}}}j{}}0{{{f{{AGf{c}}}}{f{bBf}}}Bh{BjAbA`}}{cc{}}{e{{AGf{c}}}{AbA`}{{K`{}{{l{c}}}}}}{{{f{b{AGf{c}}}}c}An{AbA`}}{{}c{}}{fc{}}{c{{Db{e}}}{}{}}{{}{{Db{c}}}{}}{fDd}``````````{{{f{bAGh}}Ebc}{{f{AGj}}}{{AGd{{f{bAGl}}}{{Bl{Fd}}}}}}{f{{f{c}}}{}}000000{{{f{b}}}{{f{bc}}}{}}000000{AGnAGj}{{{f{AH`}}}AH`}{{f{f{bc}}}An{}}{fAn}{{}AGh}{c{{Db{AH`}}}Md}{{{f{AH`}}{f{AH`}}}j}{{f{f{c}}}j{}}0{{{f{AH`}}{f{bBf}}}Bh}{cc{}}000000{{{f{AGh}}{f{Fl}}}{{Cl{{f{AGj}}}}}}{{{f{bAGh}}{f{Fl}}}{{Cl{{f{bAGj}}}}}}{{{f{AH`}}{f{bc}}}AnDn}{{}c{}}000000{AHbAGn}:{{AHbEb}AH`}{{{f{bAGl}}Eb}{{ABn{{h{cAH`}}}}}{}}{{{f{bAGl}}Eb}{{`{{AEj{{h{cAH`}}}{{AEh{AHd}}}}}}}{}}{{{f{bAGh}}}An}{{{f{bAGh}}}j}{{{f{bAGj}}}j}2{{{f{AHf}}AHh}An}{{{f{AH`}}c}DbE`}{fc{}}{c{{Db{e}}}{}{}}000000{{}{{Db{c}}}{}}000000{fDd}000000{{AGnc}AGn{{AGd{{f{bAGl}}}{{Bl{Fd}}}}}}`{f{{f{c}}}{}}{{{f{b}}}{{f{bc}}}{}}{{}{{AHj{c}}}{}}{{{f{b{AHj{c}}}}{f{c}}}An{AdA`Ab}}{cc{}}{{}c{}}{{{f{{AHj{c}}}}}{{`{{AHl{}{{l{{f{c}}}}}}AHnAd}}}{AdA`Ab}}{{{f{b{AHj{c}}}}c}An{AdA`Ab}};:9```````77776666{Ch{{h{{Nf{c}}{Nj{c}}}}}{}}{{{Cl{ACf}}}{{h{{Nf{c}}{Nj{c}}}}}{}}{{{f{{Nf{c}}}}}{{Nf{c}}}{}}{{{f{{Ln{c}}}}}{{Ln{c}}}Ad}{{{f{{AI`{c}}}}}{{AI`{c}}}Ad}{{f{f{bc}}}An{}}00{fAn}00{{{f{b{Nj{c}}}}}An{}}{{{f{b{Nf{c}}}}}An{}}01{{{f{{Ln{c}}}}{f{{Ln{c}}}}}jKd}{{{f{{AI`{c}}}}{f{{AI`{c}}}}}jKd}{{f{f{c}}}j{}}000{{{f{{Ln{c}}}}{f{bBf}}}{{Db{AnADj}}}{}}0{{{f{{AI`{c}}}}{f{bBf}}}{{Db{AnADj}}}{}}0{cc{}}000{{{Ln{c}}}{{AI`{c}}}{}}{{}c{}}000{{{f{{Nf{c}}}}}j{}}{{{ADd{{f{b{Nf{c}}}}}}{f{bA@l}}}{{A@n{{Db{Ane}}}}}{}{}}0{{{ADd{{f{b{Nj{c}}}}}}{f{bA@l}}}{{A@n{{Cl{e}}}}}{}{}}1{{{f{b{Nj{c}}}}{f{A@l}}}{{A@n{{Cl{c}}}}}{}}{{{f{b{Nj{c}}}}}{{Cl{c}}}{}}{{{f{{Nf{c}}}}c}{{Db{An{Ln{c}}}}}{}}{{{ADd{{f{b{Nf{c}}}}}}c}{{Db{Ane}}}{}{}}{fc{}}00{fEb}0{c{{Db{e}}}{}{}}000{{}{{Db{c}}}{}}000{{{ADd{{f{bc}}}}{f{bA@l}}}{{A@n{{Cl{Db}}}}}{}}{{{f{{Nf{c}}}}c}{{Db{An{AI`{c}}}}}{}}{fDd}000{{}{{h{{Nf{c}}{Nj{c}}}}}{}}","D":"CBb","p":[[0,"mut"],[8,"FxHashSet",1174],[1,"reference"],[1,"tuple"],[1,"bool"],[17,"Item"],[10,"Iterator",1175],[10,"Eq",1176],[10,"Hash",1177],[10,"Clone",1178],[10,"HalfJoinState",38,1179],[5,"HalfMultisetJoinState",38,1180],[5,"HalfSetJoinState",38,1181],[5,"HalfJoinStateFold",38,1182],[1,"unit"],[5,"HalfJoinStateFoldFrom",38,1183],[5,"HalfJoinStateReduce",38,1184],[5,"CrossJoinState",38,1185],[5,"Formatter",1186],[8,"Result",1186],[10,"Debug",1186],[17,"Output"],[10,"FnMut",1187],[5,"Iter",1188],[1,"array"],[5,"SmallVec",1189],[5,"Iter",1190],[1,"usize"],[5,"CrossJoin",38,1185],[6,"Option",1191],[5,"SymmetricHashJoin",38,1192],[5,"AntiJoin",38,1193],[6,"Result",1194],[5,"TypeId",1195],[5,"SubgraphId",162],[5,"HandoffId",162],[5,"StateId",162],[6,"Ordering",1176],[10,"Hasher",1177],[10,"Serializer",1196],[5,"String",1197],[5,"Context",234],[5,"StateHandle",541],[10,"Any",1195],[5,"TickInstant",581],[5,"SystemTime",1198],[5,"Box",1199],[10,"Future",1200],[5,"Waker",1201],[5,"Hydroflow",259],[8,"SendPort",450],[5,"SyncSender",1202],[5,"Input",402],[1,"str"],[6,"Cow",1203],[10,"Into",1204],[10,"Handoff",326],[10,"CanReceive",326],[5,"Buffer",402],[10,"Stream",1205],[5,"TcpStream",1206],[5,"Message",429],[5,"VecHandoff",326,1207],[8,"RecvPort",450],[6,"RECV",450],[10,"PortList",394],[6,"SEND",450],[8,"RecvCtx",450],[8,"SendCtx",450],[5,"Vec",1208],[1,"slice"],[5,"SerdeSpan",1209],[5,"Diagnostic",1209],[1,"u16"],[10,"DeserializeOwned",1210],[10,"Send",1211],[5,"HydroflowGraph",1212],[8,"Address",449],[10,"Serialize",1196],[5,"Reactor",527],[8,"Never",0],[5,"TeeingHandoff",326,1213],[10,"GraphExt",315],[10,"HandoffMeta",326],[17,"Inner"],[5,"RefMut",1214],[5,"Iter",326],[10,"IntoIterator",1215],[10,"Ord",1176],[10,"PartialEq",1176],[10,"PartialOrd",1176],[10,"TryCanReceive",326],[17,"Ctx"],[10,"Variadic",1216],[10,"Give",402],[5,"Bytes",1217],[5,"PortCtx",450],[5,"Port",450],[10,"Polarity",450],[5,"Operator",501],[5,"Query",501],[10,"Fn",1187],[5,"SendError",1097,1218],[5,"StateHandleErased",541],[5,"TickDuration",581],[10,"Deserializer",1210],[1,"u64"],[1,"i64"],[6,"SocketAddr",1219],[8,"TcpFramedSink",644,1220],[8,"TcpFramedStream",644,1220],[5,"Error",1221],[10,"Decoder",1222],[10,"Encoder",1223],[5,"Sender",1097],[5,"BytesMut",1224],[5,"Receiver",1097],[6,"LinesCodecError",1225],[8,"UdpSink",644,1226],[8,"UdpStream",644,1226],[8,"UdpLinesSink",644,1226],[8,"UdpLinesStream",644,1226],[5,"MonotonicFn",644,1227],[5,"Morphism",644,1227],[10,"FromIterator",1215],[10,"Default",1228],[10,"Extend",1215],[5,"LengthDelimitedCodec",1229],[5,"LinesCodec",1225],[8,"Result",1230],[1,"u8"],[10,"AsRef",1204],[5,"DroppableChild",644],[5,"Context",1201],[6,"Poll",1231],[5,"PollFn",1232],[10,"Unpin",1211],[5,"ChildStdin",1233],[5,"ChildStdout",1233],[5,"OwnedWriteHalf",1234],[5,"FramedWrite",1235],[5,"OwnedReadHalf",1234],[5,"FramedRead",1236],[5,"BytesCodec",1237],[5,"UdpSocket",1238],[8,"UdpBytesSink",644,1226],[8,"UdpBytesStream",644,1226],[8,"UdpFramedSink",644,1226],[8,"UdpFramedStream",644,1226],[5,"UnboundedSender",1239],[5,"UnboundedReceiverStream",1240],[5,"UnixStream",1241],[5,"OwnedWriteHalf",1242],[5,"OwnedReadHalf",1242],[8,"NonZeroUsize",1243],[10,"Clear",747],[5,"ClearDefault",747],[10,"DemuxEnum",770],[10,"SingleVariant",770],[6,"ServerOrBound",777,1244],[6,"ServerBindConfig",777,1244],[5,"Pin",1245],[6,"ServerPort",777,1244],[10,"Connected",777,1244],[5,"Error",1186],[6,"RealizedServerPort",777,1244],[6,"BoundConnection",777,1244],[5,"DeployPorts",777],[17,"Input"],[17,"Sink"],[10,"ConnectedSink",777,1244],[17,"Error"],[10,"Sink",1246],[10,"Sync",1211],[5,"ConnectedDirect",777,1244],[5,"ConnectedDemux",777,1244],[17,"Stream"],[10,"ConnectedSource",777,1244],[5,"ConnectedTagged",777,1244],[5,"DemuxDrain",777,1244],[5,"MergeSource",777,1244],[10,"Sized",1211],[5,"TaggedSource",777,1244],[1,"u32"],[5,"MonotonicMap",961],[10,"FnOnce",1187],[5,"HashMultiSet",979],[5,"Fleet",998],[5,"Host",998],[5,"TransducerBuilderContext",998],[5,"HostBuilder",998],[5,"Address",998],[8,"Hostname",998],[6,"Infallible",1204],[10,"MessageSender",998],[8,"MessageWithAddress",998],[5,"SparseVec",1084],[10,"DoubleEndedIterator",1247],[10,"FusedIterator",1248],[6,"TrySendError",1097,1218],[10,"PortListSplit",394],[6,"Persistence",644],[6,"PersistenceKeyed",644],[5,"Inbox",998],[5,"Outbox",998]],"r":[[0,1249],[6,1250],[9,1249],[10,1249],[11,1249],[17,1249],[18,1249],[32,1216],[33,1216],[34,1216],[38,1193],[39,1185],[40,1185],[41,1179],[42,1182],[43,1183],[44,1184],[45,1180],[46,1181],[47,1192],[48,1193],[131,1192],[331,1213],[333,1207],[647,1227],[648,1227],[653,1220],[654,1220],[655,1226],[656,1226],[657,1226],[658,1226],[659,1226],[660,1226],[661,1226],[662,1226],[663,1220],[687,1220],[714,1220],[715,1220],[716,1220],[717,1220],[735,1226],[736,1226],[737,1226],[738,1226],[740,1251],[741,1251],[742,1251],[743,1251],[771,1249],[778,1244],[779,1244],[780,1244],[781,1244],[782,1244],[783,1244],[784,1244],[785,1244],[790,1244],[792,1244],[793,1244],[794,1244],[795,1244],[801,1244],[807,1244],[809,1244],[810,1244],[811,1244],[814,1244],[819,1244],[908,0],[1100,1218],[1102,1218]],"b":[[192,"impl-Display-for-SubgraphId"],[193,"impl-Debug-for-SubgraphId"],[194,"impl-Display-for-HandoffId"],[195,"impl-Debug-for-HandoffId"],[363,"impl-CanReceive%3CVec%3CT%3E%3E-for-VecHandoff%3CT%3E"],[364,"impl-CanReceive%3CIter%3CI%3E%3E-for-VecHandoff%3CT%3E"],[365,"impl-CanReceive%3COption%3CT%3E%3E-for-VecHandoff%3CT%3E"],[611,"impl-Display-for-TickInstant"],[612,"impl-Debug-for-TickInstant"],[613,"impl-Debug-for-TickDuration"],[614,"impl-Display-for-TickDuration"],[628,"impl-Sub%3CTickDuration%3E-for-TickInstant"],[629,"impl-Sub-for-TickInstant"],[1132,"impl-Debug-for-SendError%3CT%3E"],[1133,"impl-Display-for-SendError%3CT%3E"],[1134,"impl-Debug-for-TrySendError%3CT%3E"],[1135,"impl-Display-for-TrySendError%3CT%3E"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAAUDYQABAAAABAABAAgAAAANAAQAFAAAABcAAAAZAAYAJAABACcAHABFABAAXwACAGsAEQB+AAEAgQAhAKYAEAC4AA0AzAADANQAAQDZAAEA3QANAO4AAQD0AAAAAAECAAYBAwAMAQQAEgEBABYBAwAdAQAAHwEAACEBAQApAQAAOAEBADsBAABQAQcAWQEOAGwBAgBwAQAAcgEAAHYBAAB4AQAAegEAAHwBBgCFAQUAkwELAKEBAgCmARQAvQEFAMwBBwDiAQEA6AEDAO4BEQAEAgsAEQIEABkCAAAbAgIAIAITADYCAgA7AgoASgIdAGoCAQBuAgAAcQIIAHsCCQCdAgkAqAIFALQCAAC2AgAAzwIQAO4CAQDxAgkA/AIAAP4CBAAEAwAACgMNABkDEgAtAzgAbAMAAHMDBgCGAzsAwwMGANADAwDVAwkA4AMAAOMDAwDyAw0AAQQIABMEAAAlBBYAPgQCAEYEAgBQBAcAWgQIAGUECwB1BAAAewQDAIIEDgCSBAMA"}],["hydroflow_datalog",{"t":"Q","n":["datalog"],"q":[[0,"hydroflow_datalog"]],"i":"`","f":"`","D":"b","p":[],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OjAAAAEAAAAAAAAAEAAAAAAA"}],["hydroflow_datalog_core",{"t":"CHHHHFPPGPFPNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNOOONONNNONNNNNNNNNNNNNNNNNNN","n":["diagnostic","gen_hydroflow_graph","hydroflow_graph_to_program","parse_pipeline","parse_static","Diagnostic","Error","Help","Level","Note","SerdeSpan","Warning","borrow","","","borrow_mut","","","clone","","","clone_into","","","clone_to_uninit","","","cmp","column","deserialize","","","eq","fmt","","","","","","from","","","","","hash","into","","","is_error","","level","line","message","partial_cmp","path","serialize","","","span","spanned","to_owned","","","to_serde","to_string","","to_tokens","try_emit","try_emit_all","try_from","","","try_into","","","type_id","",""],"q":[[0,"hydroflow_datalog_core"],[5,"hydroflow_datalog_core::diagnostic"],[78,"proc_macro2"],[79,"hydroflow_lang::graph::hydroflow_graph"],[80,"hydroflow_lang::diagnostic"],[81,"alloc::vec"],[82,"core::result"],[83,"alloc::string"],[84,"rust_sitter"],[85,"hydroflow_lang::parse"],[86,"core::ops::function"],[87,"syn::expr"],[88,"core::clone"],[89,"core::cmp"],[90,"serde::de"],[91,"core::fmt"],[92,"syn::error"],[93,"core::hash"],[94,"core::option"],[95,"serde::ser"],[96,"core::convert"],[97,"core::iter::traits::collect"],[98,"core::any"],[99,"hydroflow_lang"]],"i":"``````Bd0`0`00fBh210210210210202102211100211002210211012021011210110111210210210","f":"`{b{{j{d{h{f}}}}}}{{dl}l}{{{Ab{{A`{n}}}}{Ab{c}}}{{j{Ad{h{f}}}}}{{An{{Ah{AfAf}}}{{Aj{Al}}}}}}{{{Ab{{A`{n}}}}{Ab{c}}}{{j{B`{h{f}}}}}{{An{{Ah{AfAf}}}{{Aj{Al}}}}}}```````{Ab{{Ab{c}}}{}}00{{{Ab{Bb}}}{{Ab{Bbc}}}{}}00{{{Ab{Bd}}}Bd}{{{Ab{{f{c}}}}}{{f{c}}}Bf}{{{Ab{Bh}}}Bh}{{Ab{Ab{Bbc}}}Bj{}}00{AbBj}00{{{Ab{Bd}}{Ab{Bd}}}Bl}`{c{{j{Bd}}}Bn}{c{{j{{f{e}}}}}BnC`}{c{{j{Bh}}}Bn}{{{Ab{Bd}}{Ab{Bd}}}Cb}{{{Ab{Bd}}{Ab{BbCd}}}{{j{BjCf}}}}{{{Ab{{f{Bh}}}}{Ab{BbCd}}}{{j{BjCf}}}}{{{Ab{{f{c}}}}{Ab{BbCd}}}{{j{BjCf}}}Ch}{{{Ab{f}}{Ab{BbCd}}}{{j{BjCf}}}}{{{Ab{Bh}}{Ab{BbCd}}}{{j{BjCf}}}}0{cc{}}{Cjf}1{AlBh}2{{{Ab{Bd}}{Ab{Bbc}}}BjCl}{{}c{}}00{{{Ab{Bd}}}Cb}{{{Ab{{f{c}}}}}Cb{}}```{{{Ab{Bd}}{Ab{Bd}}}{{Cn{Bl}}}}`{{{Ab{Bd}}c}jD`}{{{Ab{{f{c}}}}e}jDbD`}{{{Ab{Bh}}c}jD`}`{{AlBdc}f{{Dd{n}}}}{Abc{}}00{{{Ab{f}}}{{f{Bh}}}}{Abn}0{{{Ab{f}}}l}{{{Ab{f}}}{{j{Bjl}}}}{c{{j{Bjl}}}{{Dh{}{{Df{{Ab{f}}}}}}}}{c{{j{e}}}{}{}}00{{}{{j{c}}}{}}00{AbDj}00","D":"Cf","p":[[5,"Literal",78],[5,"HydroflowGraph",79],[5,"Diagnostic",5,80],[5,"Vec",81],[6,"Result",82],[5,"TokenStream",78],[5,"String",83],[5,"Spanned",84],[1,"reference"],[6,"Pipeline",85],[1,"usize"],[1,"tuple"],[17,"Output"],[5,"Span",78],[10,"Fn",86],[6,"Expr",87],[0,"mut"],[6,"Level",5,80],[10,"Clone",88],[5,"SerdeSpan",5,80],[1,"unit"],[6,"Ordering",89],[10,"Deserializer",90],[10,"Deserialize",90],[1,"bool"],[5,"Formatter",91],[5,"Error",91],[10,"Debug",91],[5,"Error",92],[10,"Hasher",93],[6,"Option",94],[10,"Serializer",95],[10,"Serialize",95],[10,"Into",96],[17,"Item"],[10,"IntoIterator",97],[5,"TypeId",98]],"r":[[0,99],[5,80],[8,80],[10,80]],"b":[[34,"impl-Display-for-Diagnostic%3CSerdeSpan%3E"],[35,"impl-Debug-for-Diagnostic%3CS%3E"],[36,"impl-Display-for-Diagnostic"],[37,"impl-Display-for-SerdeSpan"],[38,"impl-Debug-for-SerdeSpan"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAADMADAAAAAAAAgADAA0ADwAeAAkAKQAAACsAAAAtAAAANgAAADgAAgA9AAIAQQABAEYACAA="}],["hydroflow_deploy_integration",{"t":"PGIKFFKKFPPPPFIIIIRPPPPFPPPPRGPGGGRRKPPPPFPPPPPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNMNNMNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["Bound","BoundConnection","BufferedDrain","Connected","ConnectedDemux","ConnectedDirect","ConnectedSink","ConnectedSource","ConnectedTagged","Demux","","","","DemuxDrain","DynSink","DynStream","DynStreamSink","InitConfig","Input","Merge","","","","MergeSource","Null","","","","Output","RealizedServerPort","Server","ServerBindConfig","ServerOrBound","ServerPort","Sink","Stream","StreamSink","Tagged","","","","TaggedSource","TcpPort","","","","UnixSocket","","","","accept_tcp","bind","borrow","","","","","","","","","","","borrow_mut","","","","","","","","","","","clone","","clone_into","","clone_to_uninit","","connect","connect_local_blocking","deserialize","","fmt","","","","","from","","","","","","","","","","","","from_defn","","","","instantiate","into","","","","","","","","","","","into_sink","","","into_source","","","keys","poll_close","poll_flush","poll_next","","poll_ready","serialize","","sink_port","start_send","to_owned","","try_from","","","","","","","","","","","try_into","","","","","","","","","","","try_poll_next","","type_id","","","","","","","","","",""],"q":[[0,"hydroflow_deploy_integration"],[170,"tokio::net::tcp::stream"],[171,"core::future::future"],[172,"alloc::boxed"],[173,"core::pin"],[174,"core::result"],[175,"serde::de"],[176,"core::fmt"],[177,"core::marker"],[178,"std::io::error"],[179,"futures_sink"],[180,"futures_core::stream"],[181,"core::task::wake"],[182,"core::task::poll"],[183,"core::option"],[184,"serde::ser"],[185,"core::any"]],"i":"d````````AbB`jBb`````Bh4321`4321Cn`6```10`5432`5432543263CdChDnEfDf:98;7Dh54321;:9<80;9;9;9<<;9;:9<854321;::9<80Af652<65432<;:=91865762511431<:91<:65432<;:=9165432<;:=914365432<;:=91","f":"``````````````````````````````````````````````````{{{f{bd}}}h}{j{{A`{{n{l}}}}}}{f{{f{c}}}{}}0000000000{{{f{b}}}{{f{bc}}}{}}0000000000{{{f{Ab}}}Ab}{{{f{j}}}j}{{f{f{bc}}}Ad{}}0{fAd}0{dcAf}0{c{{Ah{Ab}}}Aj}{c{{Ah{j}}}Aj}{{{f{Ab}}{f{bAl}}}An}{{{f{B`}}{f{bAl}}}An}{{{f{j}}{f{bAl}}}An}{{{f{d}}{f{bAl}}}An}{{{f{Bb}}{f{bAl}}}An}{cc{}}00000{{{f{Ab}}}B`}11111{d{{A`{{n{l}}}}}}000{{{f{Ab}}}d}{{}c{}}0000000000{{{Bh{}{{Bd{c}}{Bf{e}}}}}eBj{{C`{c}{{Bl{Bn}}}}BjCb}}{Cd{{Cf{c}}}{}}{{{Ch{c}}}eBh{}}{{{Cn{}{{Cj{c}}{Cl{e}}}}}eBj{{Db{}{{D`{{Ah{cBn}}}}}}BjCb}}{CdDd}{{{Df{c}}}eCn{}}`{{{A`{{f{b{Dh{ce}}}}}}{f{bDj}}}{{Dl{{Ah{Adg}}}}}{}{{C`{c}{{Bl{Bn}}}}BjCb}{}}0{{{A`{{f{b{Dn{ce}}}}}}{f{bDj}}}{{Dl{{E`{g}}}}}Eb{{Db{}{{D`{c}}}}BjCbEd}{}}{{{A`{{f{b{Ef{ce}}}}}}{f{bDj}}}{{Dl{{E`{g}}}}}Eb{{Db{}{{D`{{Ah{cBn}}}}}}BjCbEd}{}}2{{{f{Ab}}c}AhEh}{{{f{j}}c}AhEh}{{{f{Bb}}}Ab}{{{A`{{f{b{Dh{ce}}}}}}{El{Ejc}}}{{Ah{Adg}}}{}{{C`{c}{{Bl{Bn}}}}BjCb}{}}{fc{}}0{c{{Ah{e}}}{}{}}0000000000{{}{{Ah{c}}}{}}0000000000{{{A`{{f{bc}}}}{f{bDj}}}{{Dl{{E`{Ah}}}}}{}}0{fEn}0000000000","D":"Bn","p":[[0,"mut"],[6,"ServerOrBound",0],[1,"reference"],[5,"TcpStream",170],[6,"ServerBindConfig",0],[10,"Future",171],[5,"Box",172],[5,"Pin",173],[6,"ServerPort",0],[1,"unit"],[10,"Connected",0],[6,"Result",174],[10,"Deserializer",175],[5,"Formatter",176],[8,"Result",176],[6,"RealizedServerPort",0],[6,"BoundConnection",0],[17,"Input"],[17,"Sink"],[10,"ConnectedSink",0],[10,"Send",177],[17,"Error"],[5,"Error",178],[10,"Sink",179],[10,"Sync",177],[5,"ConnectedDirect",0],[8,"DynSink",0],[5,"ConnectedDemux",0],[17,"Output"],[17,"Stream"],[10,"ConnectedSource",0],[17,"Item"],[10,"Stream",180],[8,"DynStream",0],[5,"ConnectedTagged",0],[5,"DemuxDrain",0],[5,"Context",181],[6,"Poll",182],[5,"MergeSource",0],[6,"Option",183],[10,"Unpin",177],[10,"Sized",177],[5,"TaggedSource",0],[10,"Serializer",184],[1,"u32"],[1,"tuple"],[5,"TypeId",185]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAJMABQAAACEAIwA2AGAAAABmAAQAdgA0AA=="}],["hydroflow_lang",{"t":"CCCCCCFPPGPFPNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNOOONONNNONNNNNNNNNNNNNNNNNNNGPFPPFFFGFFPPFPPPFPFPGPPFGNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOHCNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOONNNNNNNNNNNNNNNNNOOONNNCONNNNNNHONNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNOOOOHHHPPGPPPGPSPPPPPPPSSGFFGPGSSSKPPPPPPPPPPPPPFIOONNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNMONNNMNNNNHHONNNNNNNNNNNNNOOONNOOHOONNNNNNNNOONNOOHOOOOHONNNNOOOONOOOMONNNNNNNNNNNNNNNNNNNNNONNNNNNNNOOOOFGFFPPPFPPPFFPPPGPFFFGFPNOOONNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNOOOONNNNNNNNNNNNNOONONOOONNNNNNNNNNNNNHNOOOOOOOONNNNNNNNNNNNNOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOFFNNNNNNNNNNNNNNNNNNHHHFNNNNNNNNNNNNNNNNN","n":["diagnostic","graph","parse","pretty_span","process_singletons","union_find","Diagnostic","Error","Help","Level","Note","SerdeSpan","Warning","borrow","","","borrow_mut","","","clone","","","clone_into","","","clone_to_uninit","","","cmp","column","deserialize","","","eq","fmt","","","","","","from","","","","","hash","into","","","is_error","","level","line","message","partial_cmp","path","serialize","","","span","spanned","to_owned","","","to_serde","to_string","","to_tokens","try_emit","try_emit_all","try_from","","","try_into","","","type_id","","","Color","Comp","DiMulGraph","Dot","Elided","FlatGraphBuilder","GraphEdgeId","GraphLoopId","GraphNode","GraphNodeId","GraphSubgraphId","Handoff","Hoff","HydroflowGraph","Int","Mermaid","ModuleBoundary","OpInstGenerics","Operator","OperatorInstance","Path","PortIndexValue","Pull","Push","WriteConfig","WriteGraphType","add_statement","add_statement_with_loop","arguments_pre","arguments_raw","as_code","as_error_message_string","assert_valid","augment_args","augment_args_for_update","augment_subcommands","augment_subcommands_for_update","borrow","","","","","","","","","","","","","","borrow_mut","","","","","","","","","","","","","","build","build_hfcode","clone","","","","","","","","","","","","clone_into","","","","","","","","","","","","clone_to_uninit","","","","","","","","","","","","cmp","","","","","","combine","command","command_for_update","data","","","","default","","","","","","","","degree_in","degree_out","deserialize","","","","","","","","","edge","","edge_ids","","edge_ports","edges","","eliminate_extra_unions_tees","eq","","","","","","fmt","","","","","","","","","","","","","","","from","","","","","","","","","","","","","","","","","","","","from_arg_matches","","from_arg_matches_mut","","from_hfcode","from_ported","generic_args","generics","get_operator_generics","graph_algorithms","group_id","has_subcommand","hash","","","","input_ports","insert_edge","","insert_intermediate_node","insert_intermediate_vertex","insert_loop","insert_node","insert_node_op_inst","insert_node_op_insts_all","insert_subgraph","into","","","","","","","","","","","","","","is_specified","loop_children","loop_ids","loop_parent","loops","max_stratum","merge_modules","mermaid_string_flat","new","","","no_handoffs","no_pull_push","no_references","no_subgraphs","no_varnames","node","node_color_map","node_degree_in","node_degree_out","node_ids","node_loop","node_op_inst","node_predecessor_edges","node_predecessor_nodes","node_predecessors","node_singleton_references","node_subgraph","node_successor_edges","node_successor_nodes","node_successors","node_varname","nodes","op_constraints","op_short_text","op_text_no_imports","open_dot","open_graph","open_mermaid","ops","output_ports","partial_cmp","","","","","","partition_graph","persistence_args","predecessor_edges","predecessor_vertices","predecessors","remove_edge","","remove_from_subgraph","remove_intermediate_node","remove_intermediate_vertex","remove_vertex","serialize","","","","","","","","","set_node_singleton_references","set_subgraph_laziness","set_subgraph_stratum","singletons_referenced","span","","subgraph","subgraph_ids","subgraph_stratum","subgraphs","successor_edges","successor_vertices","successors","surface_syntax_string","to_dot","to_mermaid","to_name_string","to_owned","","","","","","","","","","","","to_possible_value","to_pretty_string","to_string","try_from","","","","","","","","","","","","","","try_into","","","","","","","","","","","","","","type_args","type_id","","","","","","","","","","","","","","update_from_arg_matches","","update_from_arg_matches_mut","","value_variants","with_capacity","write_dot","write_mermaid","write_mermaid_flat","write_surface_syntax","dst_span","import_expr","input","src_span","scc_kosaraju","topo_sort","topo_sort_scc","CompilerFusionOperator","Control","DelayType","Filter","Fixed","Flatten","FloType","Fold","IDENTITY_WRITE_FN","KeyedFold","LatticeFold","Map","MonotoneAccum","MultiIn","MultiOut","Mutable","NULL_WRITE_FN","OPERATORS","OperatorCategory","OperatorConstraints","OperatorWriteOutput","Persistence","","PortListSpec","RANGE_0","RANGE_1","RANGE_ANY","RangeTrait","Sink","Source","","Static","Stratum","Tick","","TickLazy","Unwindowing","","Variadic","Windowing","","WriteContextArgs","WriteFn","arguments","arguments_handles","borrow","","","","","","","","borrow_mut","","","","","","","","categories","clone","","","","","clone_into","","","","","clone_to_uninit","","","","","cmp","","","","contains","context","default","description","deserialize","end_bound","eq","","","","find_node_op_constraints","find_op_op_constraints","flo_type","fmt","","","","","from","","","","","","","","hard_range_inn","hard_range_out","has_singleton_output","hash","human_string","hydroflow","ident","identity_write_iterator_fn","input_delaytype_fn","inputs","into","","","","","","","","is_external_input","is_pull","make_ident","name","","node_id","null_write_iterator_fn","num_args","op_inst","op_name","op_span","operator_lookup","outputs","partial_cmp","","","","persistence_args","ports_inn","ports_out","root","serialize","singleton_output_ident","soft_range_inn","soft_range_out","start_bound","subgraph_id","to_owned","","","","","try_from","","","","","","","","try_into","","","","","","","","type_args","type_id","","","","","","","","write_fn","write_iterator","write_iterator_after","write_prologue","HfCode","HfStatement","IndexInt","Indexing","Int","Link","Loop","LoopStatement","ModuleBoundary","Name","Named","NamedHfStatement","Operator","","Paren","Path","Pipeline","","PipelineLink","PipelineParen","PipelineStatement","PortIndex","Ported","Use","args","","args_raw","arrow","borrow","","","","","","","","","","","","","borrow_mut","","","","","","","","","","","","","brace_token","bracket_token","clone","","","","","","","","clone_into","","","","","","","","clone_to_uninit","","","","","","","","cmp","eq","equals","fmt","","","","","","","","from","","","","","","","","","","","","","hash","ident","index","inn","inner","into","","","","","","","","","","","","","lhs","loop_token","name","","name_string","out","paren_token","","parse","","","","","","","","","","","","","parse_terminated","partial_cmp","path","pipeline","","","rhs","semi_token","","singletons_referenced","span","","","","","","","","","","","","","","statements","","to_owned","","","","","","","","to_pretty_string","to_tokens","","","","","","","","","","","","","try_from","","","","","","","","","","","","","try_into","","","","","","","","","","","","","type_arguments","type_id","","","","","","","","","","","","","value","PrettyRowCol","PrettySpan","borrow","","borrow_mut","","fmt","","from","","into","","to_string","","try_from","","try_into","","type_id","","postprocess_singletons","postprocess_singletons_handles","preprocess_singletons","UnionFind","borrow","borrow_mut","clone","clone_into","clone_to_uninit","default","find","from","into","new","same_set","to_owned","try_from","try_into","type_id","union","with_capacity"],"q":[[0,"hydroflow_lang"],[6,"hydroflow_lang::diagnostic"],[79,"hydroflow_lang::graph"],[455,"hydroflow_lang::graph::GraphNode"],[459,"hydroflow_lang::graph::graph_algorithms"],[462,"hydroflow_lang::graph::ops"],[648,"hydroflow_lang::parse"],[880,"hydroflow_lang::pretty_span"],[900,"hydroflow_lang::process_singletons"],[903,"hydroflow_lang::union_find"],[921,"core::clone"],[922,"core::cmp"],[923,"core::result"],[924,"serde::de"],[925,"core::fmt"],[926,"syn::error"],[927,"proc_macro2"],[928,"core::hash"],[929,"core::option"],[930,"serde::ser"],[931,"alloc::string"],[932,"core::convert"],[933,"core::iter::traits::collect"],[934,"core::any"],[935,"hydroflow_lang::graph::flat_graph_builder"],[936,"hydroflow_lang::graph::hydroflow_graph"],[937,"alloc::vec"],[938,"hydroflow_lang::graph::di_mul_graph"],[939,"slotmap"],[940,"clap_builder::builder::command"],[941,"syn::item"],[942,"slotmap::basic"],[943,"core::iter::traits::exact_size"],[944,"core::iter::traits::marker"],[945,"clap_builder::parser::matches::arg_matches"],[946,"clap_builder"],[947,"syn::spanned"],[948,"clap_builder::util::id"],[949,"slotmap::sparse_secondary"],[950,"core::iter::traits::double_ended"],[951,"std::io::error"],[952,"core::slice::iter"],[953,"core::iter::adapters::copied"],[954,"alloc::borrow"],[955,"clap_builder::builder::possible_value"],[956,"alloc::collections::btree::map"],[957,"core::marker"],[958,"core::ops::function"],[959,"core::ops::range"],[960,"std::collections::hash::map"],[961,"syn::expr"],[962,"syn::token"],[963,"syn::punctuated"],[964,"syn::path"],[965,"syn::parse"],[966,"quote::to_tokens"],[967,"core::default"],[968,"hydroflow_lang::graph::eliminate_extra_unions_tees"],[969,"hydroflow_lang::graph::flat_to_partitioned"]],"i":"```````f0`0`00hl210210210210202102211100211002210211012021011210110111210210210`F``EbDb``````Ej3`120`0`1`33``Ch0El0Cn4DdE`07714207EdEfEhCl97En=;6975<4321:80=;9`65<4321:80=;65<4321:80=;65<4321:80=;4321=;;<<43216975432166674321:=;6767767`4321=;6975<4321:80=;;66975<44332211:80=;;5<5<9;08``5<432186776777776975<4321:80=;;77777776975555577777777777777777855777`84321=;`0666677766674321:=;7778:;7777666777:65<4321:80=;<:;6975<4321:80=;6975<4321:80=;06975<4321:80=;5<5<<67777NbNd01```Jf0`0Nf1`1`111J`22Jd``````3`````33Jh1221240340``Jb04Kb4Jl24736150247315247352473524735473Jj318506584``226584726135842228033`2372613584233823`2333`3658422235322036358472613584726135842726135842111````FnKnCj`110``112`0`````0Gh00LbDn3LnM`Mb7GdL`6Ld;8Lf7:654;3281<9041;3281<90;3281<90;3281<90006;3281<907:654;3281<90041337:654;3281<90849693297:654;3281<90`0965286597:654;3281<90074;3281<9097:654;3281<907:654;3281<907:654;3281<9097:654;3281<900``MjMl1010101010101010````Mn0000000000000000","f":"`````````````{b{{b{c}}}{}}00{{{b{d}}}{{b{dc}}}{}}00{{{b{f}}}f}{{{b{{h{c}}}}}{{h{c}}}j}{{{b{l}}}l}{{b{b{dc}}}n{}}00{bn}00{{{b{f}}{b{f}}}A`}`{c{{Ab{f}}}Ad}{c{{Ab{{h{e}}}}}AdAf}{c{{Ab{l}}}Ad}{{{b{f}}{b{f}}}Ah}{{{b{f}}{b{dAj}}}Al}{{{b{{h{l}}}}{b{dAj}}}Al}{{{b{h}}{b{dAj}}}Al}{{{b{{h{c}}}}{b{dAj}}}AlAn}{{{b{l}}{b{dAj}}}Al}0{cc{}}{B`h}11{Bbl}{{{b{f}}{b{dc}}}nBd}{{}c{}}00{{{b{f}}}Ah}{{{b{{h{c}}}}}Ah{}}```{{{b{f}}{b{f}}}{{Bf{A`}}}}`{{{b{f}}c}AbBh}{{{b{{h{c}}}}e}AbBjBh}{{{b{l}}c}AbBh}`{{Bbfc}h{{Bn{Bl}}}}{bc{}}00{{{b{h}}}{{h{l}}}}{bBl}0{{{b{h}}}C`}{{{b{h}}}{{Ab{nC`}}}}{c{{Ab{nC`}}}{{Cd{}{{Cb{{b{h}}}}}}}}{c{{Ab{e}}}{}{}}00{{}{{Ab{c}}}{}}00{bCf}00``````````````````````````{{{b{dCh}}Cj}n}{{{b{dCh}}Cj{Bf{Cl}}}n}``{{{b{Cn}}{b{C`}}AhC`{b{d{D`{h}}}}}C`}{{{b{Db}}}Bl}{{{b{{Dd{ce}}}}}nDfDf}{DhDh}000{b{{b{c}}}{}}0000000000000{{{b{d}}}{{b{dc}}}{}}0000000000000{Ch{{Dl{Cn{D`{Dj}}{D`{h}}}}}}{{Dn{b{C`}}}{{Dl{{Bf{{Dl{CnC`}}}}{D`{h}}}}}}{{{b{{Dd{ce}}}}}{{Dd{ce}}}{Dfj}{Dfj}}{{{b{E`}}}E`}{{{b{Eb}}}Eb}{{{b{Ed}}}Ed}{{{b{Ef}}}Ef}{{{b{Eh}}}Eh}{{{b{Cl}}}Cl}{{{b{Ej}}}Ej}{{{b{El}}}El}{{{b{En}}}En}{{{b{F`}}}F`}{{{b{Db}}}Db}{{b{b{dc}}}n{}}00000000000{bn}00000000000{{{b{Ed}}{b{Ed}}}A`}{{{b{Ef}}{b{Ef}}}A`}{{{b{Eh}}{b{Eh}}}A`}{{{b{Cl}}{b{Cl}}}A`}{{{b{F`}}{b{F`}}}A`}{{{b{Db}}{b{Db}}}A`}{{DbDb}{{Ab{DbDb}}}}{{}Dh}0{{{b{Ed}}}Fb}{{{b{Ef}}}Fb}{{{b{Eh}}}Fb}{{{b{Cl}}}Fb}{{}{{Dd{ce}}}DfDf}{{}Ch}{{}Cn}{{}E`}{{}Ed}{{}Ef}{{}Eh}{{}Cl}{{{b{{Dd{ce}}}}c}FdDfDf}0{c{{Ab{{Dd{eg}}}}}Ad{DfAf}{DfAf}}{c{{Ab{Cn}}}Ad}{c{{Ab{Ed}}}Ad}{c{{Ab{Ef}}}Ad}{c{{Ab{Eh}}}Ad}{c{{Ab{Cl}}}Ad}{c{{Ab{Ej}}}Ad}{c{{Ab{F`}}}Ad}{c{{Ab{Db}}}Ad}{{{b{{Dd{ce}}}}e}{{Bf{{Dl{cc}}}}}DfDf}{{{b{Cn}}Ef}{{Dl{EdEd}}}}{{{b{{Dd{ce}}}}}{{Ff{e{Dl{cc}}}}}DfDf}{{{b{Cn}}}{{Ff{Ef{Dl{EdEd}}}}}}{{{b{Cn}}Ef}{{Dl{{b{Db}}{b{Db}}}}}}{{{b{{Dd{ce}}}}}{{`{{Fh{}{{Cb{{Dl{e{Dl{cc}}}}}}}}FjjAn}}}DfDf}{{{b{Cn}}}{{`{{Fh{}{{Cb{{Dl{Ef{Dl{EdEd}}}}}}}}FjjAn}}}}{{{b{dCn}}}n}{{{b{Ed}}{b{Ed}}}Ah}{{{b{Ef}}{b{Ef}}}Ah}{{{b{Eh}}{b{Eh}}}Ah}{{{b{Cl}}{b{Cl}}}Ah}{{{b{F`}}{b{F`}}}Ah}{{{b{Db}}{b{Db}}}Ah}{{{b{{Dd{ce}}}}{b{dAj}}}Al{DfAn}{DfAn}}{{{b{Ch}}{b{dAj}}}Al}{{{b{Cn}}{b{dAj}}}Al}{{{b{E`}}{b{dAj}}}Al}{{{b{Eb}}{b{dAj}}}Al}{{{b{Ed}}{b{dAj}}}Al}{{{b{Ef}}{b{dAj}}}Al}{{{b{Eh}}{b{dAj}}}Al}{{{b{Cl}}{b{dAj}}}Al}{{{b{Ej}}{b{dAj}}}Al}{{{b{El}}{b{dAj}}}Al}{{{b{En}}{b{dAj}}}Al}{{{b{F`}}{b{dAj}}}Al}{{{b{Db}}{b{dAj}}}Al}0{cc{}}{{{Fl{c{Dl{ee}}}}}{{Dd{ec}}}DfDf}1111{FbEd}22{FbEf}3{FbEh}{FbCl}55555{FnDb}6{{{b{G`}}}{{Ab{E`Gb}}}}{{{b{G`}}}{{Ab{EbGb}}}}{{{b{dG`}}}{{Ab{E`Gb}}}}{{{b{dG`}}}{{Ab{EbGb}}}}{DnCh}{{{Gd{c}}}{{Dl{DbcDb}}}Gf}``{{{b{d{D`{h}}}}{b{Gh}}}En}`{{}{{Bf{Gj}}}}{{{b{Gl}}}Ah}{{{b{Ed}}{b{dc}}}nBd}{{{b{Ef}}{b{dc}}}nBd}{{{b{Eh}}{b{dc}}}nBd}{{{b{Cl}}{b{dc}}}nBd}`{{{b{d{Dd{ce}}}}cc}eDfDf}{{{b{dCn}}EdDbEdDb}Ef}{{{b{dCn}}EfEj}{{Dl{EdEf}}}}{{{b{d{Dd{ce}}}}ce}{{Bf{{Dl{ee}}}}}DfDf}{{{b{dCn}}{Bf{Cl}}}Cl}{{{b{dCn}}Ej{Bf{Gn}}{Bf{Cl}}}Ed}{{{b{dCn}}EdEl}n}{{{b{dCn}}{b{d{D`{h}}}}}n}{{{b{dCn}}{D`{Ed}}}{{Ab{Eh{Dl{EdEh}}}}}}{{}c{}}0000000000000{{{b{Db}}}Ah}{{{b{Cn}}Cl}{{b{{D`{Cl}}}}}}{{{b{Cn}}}{{Ff{Cl{D`{Ed}}}}}}{{{b{Cn}}Cl}{{Bf{Cl}}}}{{{b{Cn}}}{{H`{Cl{D`{Ed}}}}}}{{{b{Cn}}}{{Bf{Fd}}}}{{{b{dCn}}}{{Ab{nh}}}}{{{b{Cn}}}Bl}{{}{{Dd{ce}}}DfDf}{{}Ch}{{}Cn}`````{{{b{Cn}}Ed}{{b{Ej}}}}{{{b{Cn}}}{{Hb{EdF`}}}}{{{b{Cn}}Ed}Fd}0{{{b{Cn}}}{{Ff{EdEj}}}}{{{b{Cn}}Ed}{{Bf{Cl}}}}{{{b{Cn}}Ed}{{Bf{{b{El}}}}}}{{{b{Cn}}Ed}{{`{{Hd{}{{Cb{Ef}}}}FhFjjAn}}}}{{{b{Cn}}Ed}{{`{{Hd{}{{Cb{Ed}}}}FhFjjAn}}}}{{{b{Cn}}Ed}{{`{{Hd{}{{Cb{{Dl{EfEd}}}}}}FhFjjAn}}}}{{{b{Cn}}Ed}{{b{{Hf{{Bf{Ed}}}}}}}}{{{b{Cn}}Ed}{{Bf{Eh}}}}432{{{b{Cn}}Ed}{{Bf{Gn}}}}{{{b{Cn}}}{{H`{EdEj}}}}```{{{b{Cn}}{b{E`}}}{{Hh{n}}}}{{{b{Cn}}Eb{Bf{E`}}}{{Hh{n}}}}1``{{{b{Ed}}{b{Ed}}}{{Bf{A`}}}}{{{b{Ef}}{b{Ef}}}{{Bf{A`}}}}{{{b{Eh}}{b{Eh}}}{{Bf{A`}}}}{{{b{Cl}}{b{Cl}}}{{Bf{A`}}}}{{{b{F`}}{b{F`}}}{{Bf{A`}}}}{{{b{Db}}{b{Db}}}{{Bf{A`}}}}{Cn{{Ab{Cnh}}}}`{{{b{{Dd{ce}}}}c}{{Hl{{Hj{e}}}}}DfDf}{{{b{{Dd{ce}}}}c}{{`{{Hd{}{{Cb{c}}}}FhFjjAn}}}DfDf}{{{b{{Dd{ce}}}}c}{{`{{Hd{}{{Cb{{Dl{ec}}}}}}FhFjjAn}}}DfDf}{{{b{d{Dd{ce}}}}e}{{Bf{{Dl{cc}}}}}DfDf}{{{b{dCn}}Ef}n}{{{b{dCn}}Ed}Ah}{{{b{dCn}}Ed}n}{{{b{d{Dd{ce}}}}c}{{Bf{{Dl{e{Dl{ee}}}}}}}DfDf}{{{b{d{Dd{ce}}}}c}nDfDf}{{{b{{Dd{ce}}}}g}Ab{DfBj}{DfBj}Bh}{{{b{Cn}}c}AbBh}{{{b{Ed}}c}AbBh}{{{b{Ef}}c}AbBh}{{{b{Eh}}c}AbBh}{{{b{Cl}}c}AbBh}{{{b{Ej}}c}AbBh}{{{b{F`}}c}AbBh}{{{b{Db}}c}AbBh}{{{b{dCn}}Ed{D`{{Bf{Ed}}}}}{{Bf{{D`{{Bf{Ed}}}}}}}}{{{b{dCn}}EhAh}Ah}{{{b{dCn}}EhFd}{{Bf{Fd}}}}`{{{b{Ej}}}Bb}{{{b{Db}}}Bb}{{{b{Cn}}Eh}{{b{{D`{Ed}}}}}}{{{b{Cn}}}{{Ff{Eh{D`{Ed}}}}}}{{{b{Cn}}Eh}{{Bf{Fd}}}}{{{b{Cn}}}{{H`{Eh{D`{Ed}}}}}}{{{b{{Dd{ce}}}}c}{{Hl{{Hj{e}}}}}DfDf}{{{b{{Dd{ce}}}}c}{{`{{Hd{}{{Cb{c}}}}FhFjjAn}}}DfDf}{{{b{{Dd{ce}}}}c}{{`{{Hd{}{{Cb{{Dl{ec}}}}}}FhFjjAn}}}DfDf}{{{b{Cn}}}Bl}{{{b{Cn}}{b{E`}}}Bl}0{{{b{Ej}}}{{Hn{Gl}}}}{bc{}}00000000000{{{b{Eb}}}{{Bf{I`}}}}2{bBl}{c{{Ab{e}}}{}{}}0000000000000{{}{{Ab{c}}}{}}0000000000000`{bCf}0000000000000{{{b{dE`}}{b{G`}}}{{Ab{nGb}}}}{{{b{dEb}}{b{G`}}}{{Ab{nGb}}}}{{{b{dE`}}{b{dG`}}}{{Ab{nGb}}}}{{{b{dEb}}{b{dG`}}}{{Ab{nGb}}}}{{}{{b{{Hf{Eb}}}}}}{Fd{{Dd{ce}}}DfDf}{{{b{Cn}}c{b{E`}}}AlIb}0{{{b{Cn}}{b{dc}}}AlIb}0````{{eim}{{Id{cc}}}{IfIhIj}{{Cd{}{{Cb{c}}}}}{{Cd{}{{Cb{c}}}}}{{In{c}{{Il{g}}}}}{{Cd{}{{Cb{c}}}}}{{In{c}{{Il{k}}}}}}{{ei}{{Ab{{D`{c}}{D`{c}}}}}{IfIhIj}{{Cd{}{{Cb{c}}}}}{{Cd{}{{Cb{c}}}}}{{In{c}{{Il{g}}}}}}{{gko}{{D`{c}}}{IfIhIj}{{Cd{}{{Cb{c}}}}}{{In{}{{Il{e}}}}}{{Cd{}{{Cb{c}}}}}{{In{c}{{Il{i}}}}}{{Cd{}{{Cb{c}}}}}{{In{c}{{Il{m}}}}}}`````````````````````````````````````````````{b{{b{c}}}{}}0000000{{{b{d}}}{{b{dc}}}{}}0000000`{{{b{J`}}}J`}{{{b{Jb}}}Jb}{{{b{Jd}}}Jd}{{{b{Jf}}}Jf}{{{b{Jh}}}Jh}{{b{b{dc}}}n{}}0000{bn}0000{{{b{J`}}{b{J`}}}A`}{{{b{Jd}}{b{Jd}}}A`}{{{b{Jf}}{b{Jf}}}A`}{{{b{Jh}}{b{Jh}}}A`}{{{b{Jj}}{b{c}}}Ah{}}`{{}Jl}{Jf{{b{Gl}}}}{c{{Ab{Jd}}}Ad}{{{b{Jj}}}{{Jn{{b{c}}}}}K`}{{{b{J`}}{b{J`}}}Ah}{{{b{Jd}}{b{Jd}}}Ah}{{{b{Jf}}{b{Jf}}}Ah}{{{b{Jh}}{b{Jh}}}Ah}{{{b{Ej}}}{{Bf{{b{Kb}}}}}}{{{b{Gh}}}{{Bf{{b{Kb}}}}}}`{{{b{Kb}}{b{dAj}}}Al}{{{b{J`}}{b{dAj}}}Al}{{{b{Jd}}{b{dAj}}}Al}{{{b{Jf}}{b{dAj}}}Al}{{{b{Jh}}{b{dAj}}}Al}{cc{}}0000000```{{{b{Jf}}{b{dc}}}nBd}{{{b{Jj}}}Bl}``{{{b{Jb}}}C`}``{{}c{}}0000000``{{{b{Jb}}c}Gn{{Kd{Gl}}}}{Jf{{b{Gl}}}}``3````{{}{{b{{Kf{{b{Gl}}{b{Kb}}}}}}}}`{{{b{J`}}{b{J`}}}{{Bf{A`}}}}{{{b{Jd}}{b{Jd}}}{{Bf{A`}}}}{{{b{Jf}}{b{Jf}}}{{Bf{A`}}}}{{{b{Jh}}{b{Jh}}}{{Bf{A`}}}}````{{{b{Jd}}c}AbBh}```{{{b{Jj}}}{{Jn{{b{c}}}}}K`}`{bc{}}0000{c{{Ab{e}}}{}{}}0000000{{}{{Ab{c}}}{}}0000000`{bCf}0000000````````````````````````````{{{b{Gh}}}{{b{{Kl{KhKj}}}}}}```{b{{b{c}}}{}}000000000000{{{b{d}}}{{b{dc}}}{}}000000000000``{{{b{Kn}}}Kn}{{{b{{Gd{c}}}}}{{Gd{c}}}j}{{{b{L`}}}L`}{{{b{Lb}}}Lb}{{{b{Ld}}}Ld}{{{b{Fn}}}Fn}{{{b{Gh}}}Gh}{{{b{Lf}}}Lf}{{b{b{dc}}}n{}}0000000{bn}0000000{{{b{Lf}}{b{Lf}}}A`}{{{b{Lf}}{b{Lf}}}Ah}`{{{b{Kn}}{b{dAj}}}Al}{{{b{{Gd{c}}}}{b{dAj}}}AlAn}{{{b{L`}}{b{dAj}}}Al}{{{b{Lb}}{b{dAj}}}Al}{{{b{Ld}}{b{dAj}}}Al}{{{b{Fn}}{b{dAj}}}Al}{{{b{Gh}}{b{dAj}}}Al}{{{b{Lf}}{b{dAj}}}Al}{cc{}}000000000000{{{b{Lf}}{b{dc}}}nBd}````{{}c{}}000000000000``{{{b{Gh}}}Lh}`{{{b{Gh}}}Bl}```{Lj{{Ll{Dn}}}}{Lj{{Ll{Cj}}}}{Lj{{Ll{Ln}}}}{Lj{{Ll{M`}}}}{Lj{{Ll{Mb}}}}{Lj{{Ll{Kn}}}}{Lj{{Ll{{Gd{c}}}}}Md}{Lj{{Ll{L`}}}}{Lj{{Ll{Lb}}}}{Lj{{Ll{Ld}}}}{Lj{{Ll{Fn}}}}{Lj{{Ll{Gh}}}}{Lj{{Ll{Lf}}}}{C`{{Ll{{Kl{ce}}}}}MdMd}{{{b{Lf}}{b{Lf}}}{{Bf{A`}}}}````````{bBb}000000000000```{bc{}}0000000{{{b{Gh}}}Bl}{{{b{Dn}}{b{dC`}}}n}{{{b{Cj}}{b{dC`}}}n}{{{b{Ln}}{b{dC`}}}n}{{{b{M`}}{b{dC`}}}n}{{{b{Mb}}{b{dC`}}}n}{{{b{Kn}}{b{dC`}}}n}{{{b{{Gd{c}}}}{b{dC`}}}nMf}{{{b{L`}}{b{dC`}}}n}{{{b{Lb}}{b{dC`}}}n}{{{b{Ld}}{b{dC`}}}n}{{{b{Fn}}{b{dC`}}}n}{{{b{Gh}}{b{dC`}}}n}{{{b{Lf}}{b{dC`}}}n}{c{{Ab{e}}}{}{}}000000000000{{}{{Ab{c}}}{}}000000000000{{{b{Gh}}}{{Bf{{b{{Kl{MhKj}}}}}}}}{bCf}000000000000```{b{{b{c}}}{}}0{{{b{d}}}{{b{dc}}}{}}0{{{b{Mj}}{b{dAj}}}Al}{{{b{Ml}}{b{dAj}}}Al}{cc{}}0{{}c{}}0{bBl}0::9977{{C`c{b{Gn}}}{{Kl{KhKj}}}{{Cd{}{{Cb{Gn}}}}}}{{C`c}{{Kl{KhKj}}}{{Cd{}{{Cb{Gn}}}}}}{{C`{b{d{D`{Gn}}}}}C`}`98{{{b{{Mn{c}}}}}{{Mn{c}}}{Dfj}}{{b{b{dc}}}n{}}{bn}{{}{{Mn{c}}}{DfN`}}{{{b{d{Mn{c}}}}c}cDf}:9{{}{{Mn{c}}}Df}{{{b{d{Mn{c}}}}cc}AhDf}{bc{}}{c{{Ab{e}}}{}{}}{{}{{Ab{c}}}{}}{bCf}{{{b{d{Mn{c}}}}cc}nDf}{Fd{{Mn{c}}}Df}","D":"BJj","p":[[1,"reference"],[0,"mut"],[6,"Level",6],[5,"Diagnostic",6],[10,"Clone",921],[5,"SerdeSpan",6],[1,"unit"],[6,"Ordering",922],[6,"Result",923],[10,"Deserializer",924],[10,"Deserialize",924],[1,"bool"],[5,"Formatter",925],[8,"Result",925],[10,"Debug",925],[5,"Error",926],[5,"Span",927],[10,"Hasher",928],[6,"Option",929],[10,"Serializer",930],[10,"Serialize",930],[5,"String",931],[10,"Into",932],[5,"TokenStream",927],[17,"Item"],[10,"IntoIterator",933],[5,"TypeId",934],[5,"FlatGraphBuilder",79,935],[6,"HfStatement",648],[5,"GraphLoopId",79],[5,"HydroflowGraph",79,936],[5,"Vec",937],[6,"PortIndexValue",79],[5,"DiMulGraph",79,938],[10,"Key",939],[5,"Command",940],[5,"ItemUse",941],[1,"tuple"],[5,"HfCode",648],[5,"WriteConfig",79,936],[6,"WriteGraphType",79,936],[5,"GraphNodeId",79],[5,"GraphEdgeId",79],[5,"GraphSubgraphId",79],[6,"GraphNode",79],[5,"OperatorInstance",79],[5,"OpInstGenerics",79],[6,"Color",79],[5,"KeyData",939],[1,"usize"],[5,"Keys",942],[10,"ExactSizeIterator",943],[10,"FusedIterator",944],[5,"SlotMap",942],[6,"PortIndex",648],[5,"ArgMatches",945],[8,"Error",946],[5,"Ported",648],[10,"Spanned",947],[5,"Operator",648],[5,"Id",948],[1,"str"],[5,"Ident",927],[5,"Iter",942],[5,"SparseSecondaryMap",949],[10,"DoubleEndedIterator",950],[1,"slice"],[8,"Result",951],[5,"Iter",952],[5,"Copied",953],[6,"Cow",954],[5,"PossibleValue",955],[10,"Write",925],[5,"BTreeMap",956],[10,"Copy",957],[10,"Eq",922],[10,"Ord",922],[17,"Output"],[10,"FnMut",958],[6,"DelayType",462],[5,"WriteContextArgs",462],[6,"Persistence",462],[6,"OperatorCategory",462],[6,"FloType",462],[10,"RangeTrait",462],[5,"OperatorWriteOutput",462],[6,"Bound",959],[10,"Sized",957],[5,"OperatorConstraints",462],[10,"AsRef",932],[5,"HashMap",960],[6,"Expr",961],[5,"Comma",962],[5,"Punctuated",963],[6,"Pipeline",648],[5,"PipelineParen",648],[5,"PipelineLink",648],[5,"Indexing",648],[5,"IndexInt",648],[5,"Path",964],[8,"ParseStream",965],[8,"Result",926],[5,"NamedHfStatement",648],[5,"PipelineStatement",648],[5,"LoopStatement",648],[10,"Parse",965],[10,"ToTokens",966],[6,"GenericArgument",964],[5,"PrettySpan",880],[5,"PrettyRowCol",880],[5,"UnionFind",903],[10,"Default",967],[15,"Handoff",455],[15,"ModuleBoundary",455],[6,"PortListSpec",462]],"r":[[81,938],[84,935],[92,936],[103,936],[104,936],[221,968],[350,969]],"b":[[35,"impl-Display-for-Diagnostic%3CSerdeSpan%3E"],[36,"impl-Display-for-Diagnostic"],[37,"impl-Debug-for-Diagnostic%3CS%3E"],[38,"impl-Debug-for-SerdeSpan"],[39,"impl-Display-for-SerdeSpan"],[241,"impl-Display-for-PortIndexValue"],[242,"impl-Debug-for-PortIndexValue"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAEQCOAAOAA8AHwAJACoAAAAtAAEANwAAADkAAgA+AAIAQgABAEcACABxAB8AkwApAL4ADQDOAAgA3wAUAPUAAAD6AAAA/QAAAP8AAQAGAQAACAEDABIBBQBZAQUAagEIAIQBDACSARwAsAESAM8BAQDSAQAA1AEAANYBAADYAQIA3AEBAOUBAADrAQEA8wEAAPYBAAD8AQ8ADQISACICAAAkAgAAJgIDAC0CBAA9AgAAWQIDAGECAABnAhQAfQIHAIkCFACfAkQA8QIEAAMDNgA7AzUAcwMFAH0DBwCJAwUAlAMDAA=="}],["hydroflow_macro",{"t":"YXQQQXQQ","n":["DemuxEnum","hydroflow_main","hydroflow_parser","hydroflow_syntax","hydroflow_syntax_noemit","hydroflow_test","monotonic_fn","morphism"],"q":[[0,"hydroflow_macro"]],"i":"````````","f":"````````","D":"j","p":[],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OjAAAAEAAAAAAAMAEAAAAAAAAQACAAYA"}],["hydroflow_plus",{"t":"EEEEEEEEEEEEEEEEECCCCCECCCQCCCCGGNNNNNNNNNNNNNNSFIFNNNNCNNNCNCNNNNNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKKKKFGRRFGNNNNNNNNMNNMMMNNNNNNNNNNNNNNNNNNNNRRKRKRRRKRRRRKKRRRKRRRRKRKMMMMMMMMMMMMMMNNCMMMMMMCMMMMMMMMMNNNNMFFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFNNOHHONHHHHHHNNNNONNNPPPPPPPFGPPPPPPPPPPPPPGGGPPPPPPPPPIPPPPPFPPNNNNNNNNNNNNNNNNNNNHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOEEPEEPKGEEPREPENNCHNNNCNNNNNCMNNNMNMCNMNNNNNNNCNNNNNKRRRMMJFEFFKRNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNNNNNONNNNNNFFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNNNNNNNNNKKFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCCCHHHFNNNNNNNHNNNJFNNNNNNNNNNNNRRFKNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNMNNNNMNNNNNNNNNNNNNRKFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["Bounded","CLUSTER_SELF_ID","Cluster","ClusterId","ExternalProcess","FlowBuilder","Location","NoOrder","Optional","Process","RUNTIME_CONTEXT","Singleton","Stream","Tick","Timestamped","TotalOrder","Unbounded","boundedness","builder","cycle","deploy","deploy_runtime","hydroflow","ir","location","optional","q","rewrites","runtime_context","singleton","stream","Bounded","Unbounded","borrow","","borrow_mut","","from","","into","","try_from","","try_into","","type_id","","FLOW_USED_MESSAGE","FlowBuilder","FlowState","FlowStateInner","borrow","","borrow_mut","","built","cluster","compile","compile_no_network","compiled","create","deploy","","drop","external_process","finalize","flow_state","from","","into","","new","optimize_with","process","try_from","","try_into","","type_id","","with_cluster","with_default_optimize","with_external","with_process","BuiltFlow","borrow","borrow_mut","compile","compile_no_network","deploy","drop","from","into","ir","optimize_with","try_from","try_into","type_id","with_cluster","with_default_optimize","with_external","with_process","CompiledFlow","CompiledFlowWithId","borrow","","borrow_mut","","from","","hydroflow_ir","into","","take_ir","to_tokens","","try_from","","try_into","","type_id","","with_dynamic_id","DeployFlow","DeployResult","borrow","","borrow_mut","","compile","compile_no_network","connect_sink_bincode","connect_sink_bytes","connect_source_bincode","connect_source_bytes","deploy","drop","from","","get_cluster","get_external","get_process","into","","ir","raw_port","try_from","","try_into","","type_id","","with_cluster","with_external","with_process","CycleCollection","CycleCollectionWithInitial","CycleComplete","DeferTick","ForwardRef","ForwardRefMarker","Location","","TickCycle","TickCycleMarker","borrow","","","","borrow_mut","","","","complete","","complete_next_tick","create_source","","defer_tick","from","","","","into","","","","try_from","","","","try_into","","","","type_id","","","","Cluster","","ClusterSpec","CompileEnv","Deploy","ExternalProcess","","ExternalRawPort","ExternalSpec","GraphId","","InstantiateEnv","","IntoProcessSpec","LocalDeploy","Meta","","","Node","Port","","Process","","ProcessSpec","","RegisterPort","allocate_cluster_port","allocate_external_port","allocate_process_port","as_bincode_sink","as_bincode_source","as_bytes_sink","as_bytes_source","build","","","cluster_ids","cluster_self_id","e2o_connect","e2o_source","has_trivial_node","","in_memory_graph","instantiate","into_process_spec","m2m_connect","m2m_sink_source","m2o_connect","m2o_sink_source","macro_runtime","next_port","o2e_connect","o2e_sink","o2m_connect","o2m_sink_source","o2o_connect","o2o_sink_source","raw_port","register","trivial_cluster","","trivial_process","","update_meta","MultiGraph","MultiNode","SingleNode","SingleProcessGraph","borrow","","","","borrow_mut","","","","clone","","clone_into","","clone_to_uninit","","from","","","","has_trivial_node","","instantiate","","into","","","","next_port","","to_owned","","trivial_cluster","","trivial_process","","try_from","","","","try_into","","","","type_id","","","","update_meta","","DeployRuntime","DeployRuntimeCluster","DeployRuntimeNode","allocate_cluster_port","allocate_external_port","allocate_process_port","as_bincode_sink","as_bincode_source","as_bytes_sink","as_bytes_source","borrow","","","borrow_mut","","","clone","","clone_into","","clone_to_uninit","","cluster_ids","cluster_self_id","e2o_connect","e2o_source","from","","","has_trivial_node","","instantiate","","into","","","m2m_connect","m2m_sink_source","m2o_connect","m2o_sink_source","next_port","","o2e_connect","o2e_sink","o2m_connect","o2m_sink_source","o2o_connect","o2o_sink_source","raw_port","register","to_owned","","trivial_cluster","","trivial_process","","try_from","","","try_into","","","type_id","","","update_meta","","HydroflowPlusMeta","borrow","borrow_mut","cluster_id","cluster_members","cluster_self_id","clusters","default","deploy_e2o","deploy_m2m","deploy_m2o","deploy_o2e","deploy_o2m","deploy_o2o","deserialize","from","into","serialize","subgraph_id","try_from","try_into","type_id","AntiJoin","Building","Chain","CrossProduct","CrossSingleton","CycleSink","CycleSource","DebugExpr","DebugInstantiate","DeferTick","Delta","DestSink","Difference","Enumerate","ExternalNetwork","Filter","FilterMap","Finalized","FlatMap","Fold","FoldKeyed","ForEach","HfPlusLeaf","HfPlusNode","HfPlusSource","Inspect","Iter","Join","Map","Network","Persist","Placeholder","Reduce","ReduceKeyed","SeenTees","Sort","Source","Spin","Stream","Tee","TeeNode","Unique","Unpersist","borrow","","","","","","borrow_mut","","","","","","clone","clone_into","clone_to_uninit","compile_network","","connect_network","","dbg_dedup_tee","deref","emit","","fmt","","","","","","from","","","","","","","into","","","","","","span","to_owned","to_tokens","transform_bottom_up","transform_children","","try_from","","","","","","try_into","","","","","","type_id","","","","","","f","ident","input","","","location_kind","sink","acc","","deserialize_fn","f","","","","","","","from_key","from_location","ident","init","","inner","input","","","","","","","","","","","instantiate_fn","is_static","location_kind","","serialize_fn","source","to_key","to_location","CanSend","Cluster","","ClusterId","ExternalProcess","","Location","LocationId","NoTick","Process","","Root","Tick","","Timestamped","borrow","borrow_mut","can_send","check_matching_location","clone","clone_into","clone_to_uninit","cluster","eq","equivalent","","","","external_process","flow_state","fmt","forward_ref","from","id","into","is_top_level","process","raw_id","root","","singleton","source_interval","source_interval_delayed","source_iter","source_stream","spin","tick","","to_owned","try_from","try_into","type_id","CanSend","In","Out","OutStrongestOrder","is_demux","tagged_type","CLUSTER_SELF_ID","Cluster","ClusterId","ClusterIds","ClusterSelfId","IsCluster","Tag","borrow","","","borrow_mut","","","clone","","","clone_into","","","clone_to_uninit","","","cluster_id","flow_state","from","","","id","into","","","is_demux","","is_top_level","members","root","tagged_type","","to_owned","","","to_tokens","","try_from","","","try_into","","","type_id","","","ClusterId","borrow","borrow_mut","clone","clone_into","clone_to_uninit","deserialize","eq","equivalent","","","","fmt","","from","from_raw","hash","into","raw_id","serialize","to_owned","to_string","try_from","try_into","type_id","ExternalBincodeSink","ExternalBincodeStream","ExternalBytesPort","ExternalProcess","borrow","","","","borrow_mut","","","","clone","clone_into","clone_to_uninit","flow_state","from","","","","id","into","","","","is_top_level","root","source_external_bincode","source_external_bytes","to_owned","try_from","","","","try_into","","","","type_id","","","","Process","borrow","borrow_mut","clone","clone_into","clone_to_uninit","flow_state","from","id","into","is_demux","","","is_top_level","root","tagged_type","","","to_owned","try_from","try_into","type_id","NoTick","NoTimestamp","Tick","Timestamped","borrow","","borrow_mut","","clone","","clone_into","","clone_to_uninit","","cycle","cycle_with_initial","flow_state","","forward_ref","forward_ref_timestamped","from","","id","","into","","is_top_level","","outer","root","","singleton","singleton_first_tick","spin_batch","to_owned","","try_from","","try_into","","type_id","","Optional","all_ticks","borrow","borrow_mut","clone","clone_into","clone_to_uninit","complete","","","continue_if","continue_unless","create_source","","","defer_tick","","delta","drop_timestamp","filter","filter_map","flat_map_ordered","flat_map_unordered","flatten_ordered","flatten_unordered","from","","","into","into_singleton","into_stream","latest","latest_tick","map","persist","sample_eager","sample_every","some","then","timestamped","to_owned","try_from","try_into","type_id","union","unwrap_or","zip","persist_pullup","profiler","properties","persist_pullup","increment_counter","profiling","PropertyDatabase","add_commutative_tag","borrow","borrow_mut","default","from","into","is_tagged_commutative","properties_optimize","try_from","try_into","type_id","RUNTIME_CONTEXT","RuntimeContext","borrow","borrow_mut","clone","clone_into","clone_to_uninit","from","into","to_owned","to_tokens","try_from","try_into","type_id","Location","Out","Singleton","ZipResult","all_ticks","borrow","borrow_mut","clone","clone_into","clone_to_uninit","complete","","","continue_if","continue_unless","create_source","","","defer_tick","","delta","drop_timestamp","filter","filter_map","flat_map_ordered","flat_map_unordered","from","","into","into_stream","latest","latest_tick","make","","","","","map","other_ir_node","","","","","other_location","","","","","persist","sample_eager","sample_every","timestamped","to_owned","try_from","try_into","type_id","zip","Min","MinOrder","NoOrder","Stream","TotalOrder","all_ticks","anti_join","assume_ordering","borrow","","","borrow_mut","","","broadcast_bincode","broadcast_bincode_interleaved","broadcast_bytes","broadcast_bytes_interleaved","chain","clone","clone_into","clone_to_uninit","cloned","complete","","continue_if","continue_unless","count","create_source","","cross_product","cross_singleton","decouple_cluster","decouple_process","defer_tick","","delta","dest_sink","drop_timestamp","enumerate","filter","filter_map","filter_not_in","first","flat_map_ordered","flat_map_unordered","flatten_ordered","flatten_unordered","fold","fold_commutative","fold_keyed","fold_keyed_commutative","for_each","from","","","","inspect","into","","","join","keys","last","map","max","max_by_key","min","persist","reduce","reduce_commutative","reduce_keyed","reduce_keyed_commutative","round_robin_bincode","round_robin_bincode_interleaved","round_robin_bytes","round_robin_bytes_interleaved","sample_every","send_bincode","send_bincode_external","send_bincode_interleaved","send_bytes","send_bytes_external","send_bytes_interleaved","sort","tick_batch","timeout","timestamp_source","timestamped","to_owned","try_from","","","try_into","","","type_id","","","union","","unique"],"q":[[0,"hydroflow_plus"],[31,"hydroflow_plus::boundedness"],[47,"hydroflow_plus::builder"],[84,"hydroflow_plus::builder::built"],[102,"hydroflow_plus::builder::compiled"],[123,"hydroflow_plus::builder::deploy"],[155,"hydroflow_plus::cycle"],[199,"hydroflow_plus::deploy"],[263,"hydroflow_plus::deploy::in_memory_graph"],[315,"hydroflow_plus::deploy::macro_runtime"],[382,"hydroflow_plus::deploy_runtime"],[404,"hydroflow_plus::ir"],[513,"hydroflow_plus::ir::HfPlusLeaf"],[520,"hydroflow_plus::ir::HfPlusNode"],[555,"hydroflow_plus::location"],[607,"hydroflow_plus::location::can_send"],[613,"hydroflow_plus::location::cluster"],[665,"hydroflow_plus::location::cluster::cluster_id"],[690,"hydroflow_plus::location::external_process"],[732,"hydroflow_plus::location::process"],[754,"hydroflow_plus::location::tick"],[796,"hydroflow_plus::optional"],[843,"hydroflow_plus::rewrites"],[846,"hydroflow_plus::rewrites::persist_pullup"],[847,"hydroflow_plus::rewrites::profiler"],[849,"hydroflow_plus::rewrites::properties"],[861,"hydroflow_plus::runtime_context"],[875,"hydroflow_plus::singleton"],[932,"hydroflow_plus::stream"],[1034,"core::result"],[1035,"core::any"],[1036,"alloc::vec"],[1037,"core::ops::function"],[1038,"hydroflow_lang::graph::hydroflow_graph"],[1039,"alloc::collections::btree::map"],[1040,"proc_macro2"],[1041,"core::option"],[1042,"stageleft"],[1043,"futures_sink"],[1044,"alloc::boxed"],[1045,"core::pin"],[1046,"serde::ser"],[1047,"serde::de"],[1048,"futures_core::stream"],[1049,"core::future::future"],[1050,"core::marker"],[1051,"syn::expr"],[1052,"syn::stmt"],[1053,"alloc::string"],[1054,"hydroflow::util::deploy"],[1055,"std::collections::hash::map"],[1056,"hydroflow_lang::graph::flat_graph_builder"],[1057,"core::cell"],[1058,"core::fmt"],[1059,"core::clone"],[1060,"tokio::time::instant"],[1061,"core::time"],[1062,"core::iter::traits::collect"],[1063,"syn::ty"],[1064,"core::hash"],[1065,"bytes::bytes"],[1066,"core::convert"],[1067,"futures_channel::mpsc"],[1068,"core::cmp"],[1069,"stageleft_macro"]],"i":"`````````````````````````````````KjMn101010101010````A@fj10`000`0`0000010100001010100000`Aj0000000000000000``nCn10101101101010101``BhA`1011000011100001010101010111``````FfFj``ElF`EjEn3210Ed2165Fb54325432543254325432BjAf`0`100`100Hb``210`1021`C``222Fl000G`BlBn666676`546666`56666663376765````A@hA@jHjHl32101010103210321032101010323232103210321010```A@l00Hn00010I`210101010222221022102102222102222221110222221021021010`Id00``00``````00000000JdJj111An2``22022Kb3323331```303333333`33003`332K`In2354102350003535`0354102354100235410235000535410235410235410235A@nAA`1AAb110AAdAAfAAhAAjAAlAAnAB`ABbABdABf77ABh:9ABj8765ABl5<;43::0ABn3;0;;``Eh``0````0Fh`1`11``111`11111`0101010`101000000`01111`A@d0000``````AC`lM`Mb210210210210`22102210222222221010210210210`Md00000000000000000000000````DnDbE`Ah3210000032100321000000321032103210`Bf00000000000000000000````MlLl101010100010001010101001000010101010`N`000000000000000000000000000000000000000000000```````O`000000`000``Ob00000000000ACb0``Kl0000000000000000000000000001000001000010000000000000Oh````Lb00OjNh21022222222222222222222222222222222222222221022210222222222222222222222222222222102102102222","f":"`````````````````````````````````{b{{b{c}}}{}}0{{{b{d}}}{{b{dc}}}{}}0{cc{}}0{{}c{}}0{c{{f{e}}}{}{}}0{{}{{f{c}}}{}}0{bh}0````6655`{{{b{j}}}{{l{c}}}{}}{{jb}n}{jn}`{{}j}`{{j{b{d}}}{{A`{c}}}{{Af{}{{Ab{Ad}}}}}}{{{b{dj}}}Ad}{{{b{j}}}{{Ah{c}}}{}}{jAj}{{{b{j}}}{{b{Al}}}}==<<5{{jc}Aj{{Bd{{B`{An}}}{{Bb{{B`{An}}}}}}}}{{{b{j}}}{{Bf{c}}}{}}==<<;;{{j{b{{l{c}}}}g}{{Bh{e}}}{}Bj{{Bl{e}}}}{j{{Bh{c}}}Bj}{{j{b{{Ah{c}}}}g}{{Bh{e}}}{}Bj{{Bn{e}}}}{{j{b{{Bf{c}}}}g}{{Bh{e}}}{}Bj{{C`{e}}}}`{b{{b{c}}}{}}{{{b{d}}}{{b{dc}}}{}}{{Ajb}n}{Ajn}{{Aj{b{d}}}{{A`{c}}}{{Af{}{{Ab{Ad}}}}}}{{{b{dAj}}}Ad}{cc{}}{{}c{}}{{{b{Aj}}}{{b{{B`{An}}}}}}{{Ajc}Aj{{Bd{{B`{An}}}{{Bb{{B`{An}}}}}}}}{c{{f{e}}}{}{}}{{}{{f{c}}}{}}{bh}{{Aj{b{{l{c}}}}g}{{Bh{e}}}{}Bj{{Bl{e}}}}{Aj{{Bh{c}}}Bj}{{Aj{b{{Ah{c}}}}g}{{Bh{e}}}{}Bj{{Bn{e}}}}{{Aj{b{{Bf{c}}}}g}{{Bh{e}}}{}Bj{{C`{e}}}}``{b{{b{c}}}{}}0{{{b{d}}}{{b{dc}}}{}}0<<{{{b{{n{c}}}}}{{b{{Cf{CbCd}}}}}{}}<<{{{n{c}}}{{Cf{CbCd}}}{}}{{{n{Ad}}{b{c}}}{{Cl{{Cj{Ch}}{Cj{Ch}}}}}{}}{{Cn{b{c}}}{{Cl{{Cj{Ch}}{Cj{Ch}}}}}{}}<<;;::{{{n{Cb}}c}Cn{{D`{CbAd}}}}``6655{{{Bh{c}}b}nAf}{{{Bh{c}}}nBj}{{{b{{A`{c}}}}{Db{e}}}{{Dh{{Df{Dd}}}}}Af{DjDl}}{{{b{{A`{c}}}}Dn}{{Dh{{Df{Dd}}}}}Af}{{{b{{A`{c}}}}{E`{e}}}{{Dh{{Df{Eb}}}}}Af{DjDl}}{{{b{{A`{c}}}}Dn}{{Dh{{Df{Eb}}}}}Af}{{{Bh{c}}{b{d}}}{{A`{c}}}{{Af{}{{Ab{Ad}}}}}}{{{b{d{Bh{c}}}}}AdBj}{cc{}}0{{{b{{A`{c}}}}{b{{l{e}}}}}bAf{}}{{{b{{A`{c}}}}{b{{Ah{e}}}}}bAf{}}{{{b{{A`{c}}}}{b{{Bf{e}}}}}bAf{}}{{}c{}}0{{{b{{Bh{c}}}}}{{b{{B`{An}}}}}Bj}{{{b{{A`{c}}}}Dn}{}Af}{c{{f{e}}}{}{}}0{{}{{f{c}}}{}}0{bh}0{{{Bh{c}}{b{{l{e}}}}g}{{Bh{c}}}Bj{}{{Bl{c}}}}{{{Bh{c}}{b{{Ah{e}}}}g}{{Bh{c}}}Bj{}{{Bn{c}}}}{{{Bh{c}}{b{{Bf{e}}}}g}{{Bh{c}}}Bj{}{{C`{c}}}}``````````{b{{b{c}}}{}}000{{{b{d}}}{{b{dc}}}{}}000{{EdEfEh}Ad}{{{Ej{c}}c}Ad{{Ed{El}}}}{{{En{c}}c}Ad{{Ed{F`}}Fb}}{{Efc}{{Ff{}{{Fd{c}}}}}Fh}{{Ef{Fj{}{{Fd{c}}}}c}{{Fj{}{{Fd{c}}}}}Fh}{FbFb}{cc{}}000{{}c{}}000????>>>>====``````````````````````````{{{b{c}}}e{}{}}00{{{b{Fl}}Cb}{{`{{Fn{}{{Bb{{Dh{{Df{Dd}}}}}}}}}}}}{{{b{Fl}}Cb}{{`{{Fn{}{{Bb{{Dh{{Df{Eb}}}}}}}}}}}}10{{G`Cb{b{Gb}}}}{{BlCb{b{Gb}}}}{{BnCb{b{Gb}}}}{{{b{c}}Cb}{{`{{D`{{b{{B`{Gd}}}}Ad}}Gf}}}{}}{{{b{c}}}{{`{{D`{GdAd}}Gf}}}{}}{{{b{c}}{b{e}}{b{g}}{b{e}}}{{Df{Bd}}}{}{}{}}{{{b{c}}{b{e}}{b{g}}{b{i}}{b{g}}}Gh{}{}{}{}}{{}Gj}0`{{{b{{Hb{}{{Gl{c}}{Gn{e}}{H`{g}}}}}}{b{dg}}{b{de}}Cd{B`{Hd}}}Ad{}{}{}}{{{C`{}{{Hf{c}}}}}c{{G`{e}}}{BjHh}}{{{b{c}}{b{e}}{b{c}}{b{e}}}{{Df{Bd}}}{}{}}{{{b{c}}{b{e}}{b{g}}{b{e}}{b{g}}}{{Cl{GhGh}}}{}{}{}}6{{{b{c}}{b{e}}{b{g}}{b{i}}{b{g}}}{{Cl{GhGh}}}{}{}{}{}}`{{{b{{Hb{}{{Gl{c}}{Gn{e}}{H`{g}}}}}}}c{}{}{}}878132{{{b{Fl}}Cb}}{{{b{Fl}}Cb}Ad}{Cbc{}}000{{{b{d{Hb{}{{Gl{c}}{Gn{e}}{H`{g}}}}}}{b{e}}}Ad{}{}{}}````{b{{b{c}}}{}}000{{{b{d}}}{{b{dc}}}{}}000{{{b{Hj}}}Hj}{{{b{Hl}}}Hl}{{b{b{dc}}}Ad{}}0{bAd}0{cc{}}000{{}Gj}0{{{b{Hj}}{b{dc}}{b{de}}Cd{B`{Hd}}}Ad{}{}}{{{b{Hl}}{b{dc}}{b{de}}Cd{B`{Hd}}}Ad{}{}}{{}c{}}000{{{b{Hj}}}Ad}{{{b{Hl}}}Ad}{bc{}}0????{c{{f{e}}}{}{}}000{{}{{f{c}}}{}}000{bh}000{{{b{dHj}}{b{c}}}Ad{}}{{{b{dHl}}{b{c}}}Ad{}}```{{{b{c}}}e{}{}}00{{{b{Hn}}Cb}{{`{{Fn{}{{Bb{{Dh{{Df{Dd}}}}}}}}}}}}{{{b{Hn}}Cb}{{`{{Fn{}{{Bb{{Dh{{Df{Eb}}}}}}}}}}}}10{b{{b{c}}}{}}00{{{b{d}}}{{b{dc}}}{}}00{{{b{Hn}}}Hn}{{{b{I`}}}I`}{{b{b{dc}}}Ad{}}0{bAd}0{{{b{c}}Cb}{{`{{D`{{b{{B`{Gd}}}}Ad}}Gf}}}{}}{{{b{c}}}{{`{{D`{GdAd}}Gf}}}{}}{{{b{c}}{b{e}}{b{g}}{b{e}}}{{Df{Bd}}}{}{}{}}{{{b{c}}{b{e}}{b{g}}{b{i}}{b{g}}}Gh{}{}{}{}}{cc{}}00{{}Gj}0{{{b{Hn}}{b{dc}}{b{de}}Cd{B`{Hd}}}Ad{}{}}{{{b{I`}}{b{dc}}{b{de}}Cd{B`{Hd}}}Ad{}{}}{{}c{}}00{{{b{c}}{b{e}}{b{c}}{b{e}}}{{Df{Bd}}}{}{}}{{{b{c}}{b{e}}{b{g}}{b{e}}{b{g}}}{{Cl{GhGh}}}{}{}{}}8{{{b{c}}{b{e}}{b{g}}{b{i}}{b{g}}}{{Cl{GhGh}}}{}{}{}{}}{{{b{Hn}}}Ib}{{{b{I`}}}Ib};:;243{{{b{Hn}}Cb}}{{{b{Hn}}Cb}Ad}{bc{}}0{Cb}{Cbc{}}01{c{{f{e}}}{}{}}00{{}{{f{c}}}{}}00{bh}00{{{b{dHn}}{b{c}}}Ad{}}{{{b{dI`}}{b{c}}}Ad{}}`{b{{b{c}}}{}}{{{b{d}}}{{b{dc}}}{}}`{{{Ih{{b{{If{Id}}}}}}Cb}{{`{{D`{{b{{B`{Gd}}}}Ad}}Gf}}}}{{{Ih{{b{{If{Id}}}}}}}{{`{{D`{GdAd}}Gf}}}}`{{}Id}{{{Ih{{b{{If{Id}}}}}}{b{Gb}}{b{Gb}}}Gh}{{{Ih{{b{{If{Id}}}}}}{b{Gb}}{b{Gb}}}{{Cl{GhGh}}}}0100{c{{f{Id}}}Ij}{cc{}}{{}c{}}{{{b{Id}}c}fIl}`?>=```````````````````````````````````````````::::::999999{{{b{In}}}In}{{b{b{dc}}}Ad{}}{bAd}{{Anb{b{dJ`}}{b{{Jb{Cb}}}}{b{{Jb{Cb}}}}{b{{Jb{Cb}}}}}An}{{{b{dJd}}b{b{dJ`}}{b{{Jb{Cb}}}}{b{{Jb{Cb}}}}{b{{Jb{Cb}}}}}Ad}{{An{b{dJ`}}}An}{{{b{dJd}}{b{dJ`}}}Ad}{ec{}{{Bd{}{{Bb{c}}}}}}{{{b{In}}}{{b{c}}}{}}{{{b{An}}{b{d{Cf{CbJf}}}}{b{d{Jb{Jh{Cl{EfCb}}}}}}{b{dCb}}}Ad}{{{b{Jd}}{b{d{Cf{CbJf}}}}{b{d{Jb{Jh{Cl{EfCb}}}}}}{b{dCb}}}{{Cl{EfCb}}}}{{{b{Jj}}{b{dJl}}}Jn}{{{b{K`}}{b{dJl}}}Jn}{{{b{In}}{b{dJl}}}Jn}{{{b{Kb}}{b{dJl}}}Jn}{{{b{An}}{b{dJl}}}Jn}{{{b{Jd}}{b{dJl}}}Jn}{cc{}}00{GhIn}111{{}c{}}00000{bKd}{bc{}}{{{b{In}}{b{dCh}}}Ad}{{{b{dJd}}e{b{dJ`}}{b{dc}}}Ad{}{{Kf{{b{dJd}}{b{dc}}}}Gf}}{{Anc{b{dJ`}}}An{{Kf{{b{dJd}}{b{dJ`}}}}}}{{{b{dJd}}c{b{dJ`}}}Ad{{Kf{{b{dJd}}{b{dJ`}}}}}}{c{{f{e}}}{}{}}00000{{}{{f{c}}}{}}00000{bh}00000`````````````````````````````````````````````````````````{b{{b{c}}}{}}{{{b{d}}}{{b{dc}}}{}}`{{{b{c}}{b{c}}}AdFh}{{{b{Eh}}}Eh}{{b{b{dc}}}Ad{}}{bAd}`{{{b{Eh}}{b{Eh}}}Gj}{{b{b{c}}}Gj{}}000`{{{b{{Fh{}{{Kh{c}}}}}}}{{b{Al}}}Fh}{{{b{Eh}}{b{dJl}}}Jn}{{{b{{Fh{}{{Kh{c}}}}}}}{{Cl{{Ej{e}}e}}}Fh{{Ff{El}{{Fd{{Fh{}{{Kh{c}}}}}}}}}}{cc{}}{{{b{{Fh{}{{Kh{c}}}}}}}EhFh}{{}c{}}{{}Gj}`{{{b{Eh}}}Cb}{{{b{{Fh{}{{Kh{c}}}}}}}cFh}{{{b{Eh}}}{{b{Eh}}}}{{{b{{Fh{}{{Kh{c}}}}}}g}{{Kl{e{Fh{}{{Kh{c}}}}Kj}}}FhKn{{D`{e{Fh{}{{Kh{c}}}}}}}}{{{b{{Fh{}{{Kh{c}}}}}}e}{{Lb{L`{Fh{}{{Kh{c}}}}Kj}}}Fh{{D`{Ld{Fh{}{{Kh{c}}}}}}Gf}}{{{b{{Fh{}{{Kh{c}}}}}}eg}{{Lb{L`{Fh{}{{Kh{c}}}}Kj}}}Fh{{D`{Ld{Fh{}{{Kh{c}}}}}}Gf}{{D`{Ld{Fh{}{{Kh{c}}}}}}Gf}}{{{b{{Fh{}{{Kh{c}}}}}}i}{{Lb{e{Fh{}{{Kh{c}}}}Kj}}}Fh{}{{Lh{}{{Lf{e}}}}}{{D`{g{Fh{}{{Kh{c}}}}}}}}{{{b{{Fh{}{{Kh{c}}}}}}i}{{Lb{e{Fh{}{{Kh{c}}}}Kj}}}Fh{}{{Eb{}{{Lf{e}}}}Lj}{{D`{g{Fh{}{{Kh{c}}}}}}}}{{{b{{Fh{}{{Kh{c}}}}}}}{{Lb{Ad{Fh{}{{Kh{c}}}}Kj}}}Fh}`{{{b{{Fh{}{{Kh{c}}}}}}}{{Ll{{Fh{}{{Kh{c}}}}}}}Fh}{bc{}}{c{{f{e}}}{}{}}{{}{{f{c}}}{}}{bh}````>{{}{{Cj{Ln}}}}```````{b{{b{c}}}{}}00{{{b{d}}}{{b{dc}}}{}}00{{{b{{l{c}}}}}{{l{c}}}{}}{{{b{{M`{c}}}}}{{M`{c}}}{}}{{{b{Mb}}}Mb}{{b{b{dc}}}Ad{}}00{bAd}00`{{{b{{l{c}}}}}{{b{Al}}}{}}{cc{}}00{{{b{{l{c}}}}}Eh{}}{{}c{}}00{{}Gj}00{{{b{{l{c}}}}}{{M`{c}}}{}}{{{b{{l{c}}}}}e{}{}}>>{bc{}}00{{{M`{c}}{b{e}}}{{Cl{{Cj{Ch}}{Cj{Ch}}}}}{}{}}{{Mb{b{c}}}{{Cl{{Cj{Ch}}{Cj{Ch}}}}}Fh}{c{{f{e}}}{}{}}00{{}{{f{c}}}{}}00{bh}00`{b{{b{c}}}{}}{{{b{d}}}{{b{dc}}}{}}{{{b{{Md{c}}}}}{{Md{c}}}{}}{{b{b{dc}}}Ad{}}{bAd}{c{{f{{Md{e}}}}}Ij{}}{{{b{{Md{c}}}}{b{{Md{c}}}}}Gj{}}{{b{b{c}}}Gj{}}000{{{b{{Md{c}}}}{b{dJl}}}Jn{}}0{cc{}}{Gd{{Md{c}}}{}}{{{b{{Md{c}}}}{b{de}}}Ad{}Mf}{{}c{}}`{{{b{{Md{c}}}}e}f{}Il}{bc{}}{bIb}{c{{f{e}}}{}{}}{{}{{f{c}}}{}}{bh}````{b{{b{c}}}{}}000{{{b{d}}}{{b{dc}}}{}}000{{{b{{Ah{c}}}}}{{Ah{c}}}{}}{{b{b{dc}}}Ad{}}{bAd}{{{b{{Ah{c}}}}}{{b{Al}}}{}}????{{{b{{Ah{c}}}}}Eh{}}===={{}Gj}{{{b{{Ah{c}}}}}e{}{}}{{{b{{Ah{c}}}}{b{e}}}{{Cl{{Db{g}}{Lb{geKj}}}}}{}{FhMh}{DjDl}}{{{b{{Ah{c}}}}{b{e}}}{{Cl{Dn{Lb{MjeKj}}}}}{}{FhMh}}?====<<<<;;;;`:9{{{b{{Bf{c}}}}}{{Bf{c}}}{}}87{{{b{{Bf{c}}}}}{{b{Al}}}{}}{cc{}}{{{b{{Bf{c}}}}}Eh{}}{{}c{}}8888{{{b{{Bf{c}}}}}e{}{}}{{}{{Cj{Ln}}}}00{bc{}}{c{{f{e}}}{}{}}{{}{{f{c}}}{}}{bh}````{b{{b{c}}}{}}0{{{b{d}}}{{b{dc}}}{}}0{{{b{{Ml{c}}}}}{{Ml{c}}}Kn}{{{b{{Ll{c}}}}}{{Ll{c}}}Kn}{{b{b{dc}}}Ad{}}0{bAd}0{{{b{{Ll{c}}}}}{{Cl{{En{e}}e}}}{MhFh}{{Ff{F`}{{Fd{{Ll{c}}}}}}Fb}}{{{b{{Ll{c}}}}e}{{Cl{{En{e}}e}}}{MhFh}{{Fj{F`}{{Fd{{Ll{c}}}}}}Fb}}{{{b{{Ml{c}}}}}{{b{Al}}}Fh}{{{b{{Ll{c}}}}}{{b{Al}}}Fh}{{{b{{Ll{c}}}}}{{Cl{{Ej{e}}e}}}{MhFh}{{Ff{El}{{Fd{{Ll{c}}}}}}}}{{{b{{Ll{c}}}}}{{Cl{{Ej{e}}e}}}Fh{{Ff{El}{{Fd{{Ml{c}}}}}}}}{cc{}}0{{{b{{Ml{c}}}}}EhFh}{{{b{{Ll{c}}}}}EhFh}{{}c{}}0{{}Gj}0{{{b{{Ll{c}}}}}{{b{c}}}Fh}{{{b{{Ml{c}}}}}eFh{}}{{{b{{Ll{c}}}}}eFh{}}{{{b{{Ll{c}}}}g}{{Kl{e{Ll{c}}Mn}}}{MhFh}Kn{{D`{ec}}}}{{{b{{Ll{c}}}}g}{{N`{e{Ll{c}}Mn}}}{MhFh}Kn{{D`{e{Ll{c}}}}}}{{{b{{Ll{c}}}}e}{{Lb{Ad{Ll{c}}Mn}}}{MhNbFh}{{D`{Cbc}}Gf}}{bc{}}0{c{{f{e}}}{}{}}0{{}{{f{c}}}{}}0{bh}0`{{{N`{c{Ll{e}}Mn}}}{{Lb{c{Ml{e}}Kj}}}{}Fh}{b{{b{c}}}{}}{{{b{d}}}{{b{dc}}}{}}{{{b{{N`{ceg}}}}}{{N`{ceg}}}KnFh{}}{{b{b{dc}}}Ad{}}{bAd}{{{N`{c{Ll{e}}Mn}}EfEh}Ad{}Fh}{{{N`{ceg}}EfEh}Ad{}{FhMh}{}}1{{{N`{ceMn}}{N`{geMn}}}{{N`{ceMn}}}{}Fh{}}0{{Ef{Ll{c}}}{{N`{e{Ll{c}}Mn}}}Fh{}}0{{Efc}{{N`{ecg}}}{FhMh}{}{}}{{{N`{c{Ll{e}}Mn}}}{{N`{c{Ll{e}}Mn}}}{}Fh}00{{{N`{c{Ml{e}}g}}}{{N`{ceg}}}{}{FhMh}{}}{{{N`{ceg}}k}{{N`{ceg}}}{}Fh{}{{Nd{{b{c}}}{{Bb{Gj}}}}}{{Nf{ie}}}}{{{N`{ceg}}m}{{N`{ieg}}}{}Fh{}{}{{Nd{c}{{Bb{{Cj{i}}}}}}}{{Nf{ke}}}}{{{N`{ceg}}o}{{Lb{ieg}}}{}Fh{}{}{{Lh{}{{Lf{i}}}}}{{Nd{c}{{Bb{k}}}}}{{Nf{me}}}}{{{N`{ceg}}o}{{Lb{iegNh}}}{}Fh{}{}{{Lh{}{{Lf{i}}}}}{{Nd{c}{{Bb{k}}}}}{{Nf{me}}}}{{{N`{egi}}}{{Lb{cgi}}}{}{{Lh{}{{Lf{c}}}}}Fh{}}{{{N`{egi}}}{{Lb{cgiNh}}}{}{{Lh{}{{Lf{c}}}}}Fh{}}{{{N`{ceMn}}}{{N`{ceKj}}}{}Fh}{{{Kl{ceg}}}{{N`{ceg}}}{}Fh{}}{cc{}}{{}c{}}{{{N`{ceg}}}{{Kl{{Cj{c}}eg}}}KnFh{}}{{{N`{ceMn}}}{{Lb{ceMn}}}{}Fh}{{{N`{c{Ll{e}}Mn}}}{{N`{c{Ml{e}}Kj}}}{}Fh}{{{N`{c{Ml{e}}g}}}{{N`{c{Ll{e}}Mn}}}{}{FhMh}{}}{{{N`{ceg}}m}{{N`{ieg}}}{}Fh{}{}{{Nd{c}{{Bb{i}}}}}{{Nf{ke}}}}{{{N`{c{Ll{e}}Mn}}}{{Lb{c{Ll{e}}Mn}}}{}Fh}{{{N`{ceg}}}{{Lb{ceKj}}}{}{FhMh}{}}{{{N`{ceg}}i}{{Lb{ceKj}}}{}{NbFhMh}{}{{D`{Lde}}Gf}}:{{{N`{ceMn}}{Kl{geMn}}}{{N`{geMn}}}{}Fh{}}{{{N`{ceg}}{b{{Ll{e}}}}}{{N`{c{Ml{e}}g}}}{}{FhMh}{}}{bc{}}{c{{f{e}}}{}{}}{{}{{f{c}}}{}}{bh}{{{N`{ceg}}{N`{ceg}}}{{N`{ceg}}}{}Fh{}}{{{N`{ceg}}{Kl{ceg}}}{{Kl{ceg}}}{}Fh{}}{{{N`{ceg}}k}{{N`{{Cl{ci}}eg}}}{}Fh{}Kn{{Nj{{N`{ieg}}}}}}```{{{B`{An}}}{{B`{An}}}}{{{b{dNl}}}Ad}{{{B`{An}}{Ih{{b{{Jh{{B`{Nl}}}}}}}}{Ih{{b{{Jh{{Nn{{Cl{CbNl}}}}}}}}}}}{{B`{An}}}}`{{{b{dO`}}k{b{i}}}k{}{}{{Nd{{b{dc}}e}}}{}{{D`{gi}}Kn}}{b{{b{c}}}{}}{{{b{d}}}{{b{dc}}}{}}{{}O`}{cc{}}{{}c{}}{{{b{O`}}{b{Gh}}}Gj}{{{B`{An}}{b{O`}}}{{B`{An}}}}{c{{f{e}}}{}{}}{{}{{f{c}}}{}}{bh}``98{{{b{Ob}}}Ob}{{b{b{dc}}}Ad{}}{bAd}98{bc{}}{{Ob{b{c}}}{{Cl{{Cj{Ch}}{Cj{Ch}}}}}Fh}765````{{{Kl{c{Ll{e}}Mn}}}{{Lb{c{Ml{e}}Kj}}}{}Fh}?>{{{b{{Kl{ceg}}}}}{{Kl{ceg}}}KnFh{}}54{{{Kl{c{Ll{e}}Mn}}EfEh}Ad{}Fh}{{{Kl{ceg}}EfEh}Ad{}{FhMh}{}}1{{{Kl{ceg}}{N`{ieMn}}}{{N`{ceMn}}}{}Fh{}{}}0{{Ef{Ll{c}}}{{Kl{e{Ll{c}}Mn}}}Fh{}}{{Ef{Kl{c{Ll{e}}Mn}}{Ll{e}}}{{Kl{c{Ll{e}}Mn}}}{}Fh}{{Efc}{{Kl{ecg}}}{FhMh}{}{}}{{{Kl{c{Ll{e}}Mn}}}{{Kl{c{Ll{e}}Mn}}}{}Fh}0{{{Kl{c{Ll{e}}Mn}}}{{N`{c{Ll{e}}Mn}}}{}Fh}{{{Kl{c{Ml{e}}g}}}{{N`{ceg}}}{}{FhMh}{}}{{{Kl{ceg}}k}{{N`{ceg}}}{}Fh{}{{Nd{{b{c}}}{{Bb{Gj}}}}}{{Nf{ie}}}}{{{Kl{ceg}}m}{{N`{ieg}}}{}Fh{}{}{{Nd{c}{{Bb{{Cj{i}}}}}}}{{Nf{ke}}}}{{{Kl{ceg}}o}{{Lb{ieg}}}{}Fh{}{}{{Lh{}{{Lf{i}}}}}{{Nd{c}{{Bb{k}}}}}{{Nf{me}}}}0{cc{}}{{{Kl{ceMn}}}{{Kl{ceKj}}}{}Fh}{{}c{}}{{{Kl{c{Ll{e}}Mn}}}{{Lb{c{Ll{e}}Mn}}}{}Fh}{{{Kl{c{Ll{e}}Mn}}}{{Kl{c{Ml{e}}Kj}}}{}Fh}{{{Kl{c{Ml{e}}g}}}{{Kl{c{Ll{e}}Mn}}}{}{FhMh}{}}{{cJd}e{}{}}{{{Ll{c}}Jd}eFh{}}{{{Ml{c}}Jd}eFh{}}01{{{Kl{ceg}}m}{{Kl{ieg}}}{}Fh{}{}{{Nd{c}{{Bb{i}}}}}{{Nf{ke}}}}{cJd{}}{{{N`{c{Ml{e}}g}}}JdKnFh{}}{{{N`{c{Ll{e}}g}}}JdKnFh{}}{{{Kl{c{Ll{e}}g}}}JdKnFh{}}{{{Kl{c{Ml{e}}g}}}JdKnFh{}}{{{b{c}}}e{}{}}{{{b{{N`{c{Ll{e}}g}}}}}{{Ll{e}}}KnFh{}}{{{b{{Kl{c{Ll{e}}g}}}}}{{Ll{e}}}KnFh{}}{{{b{{N`{c{Ml{e}}g}}}}}{{Ml{e}}}KnFh{}}{{{b{{Kl{c{Ml{e}}g}}}}}{{Ml{e}}}KnFh{}}{{{Kl{c{Ll{e}}Mn}}}{{Lb{c{Ll{e}}Mn}}}{}Fh}{{{Kl{ceg}}}{{Lb{ceKj}}}{}{FhMh}{}}{{{Kl{ceg}}i}{{Lb{ceKj}}}{}{NbFhMh}{}{{D`{Lde}}Gf}}{{{Kl{ceg}}{b{{Ll{e}}}}}{{Kl{c{Ml{e}}g}}}{}{FhMh}{}}{bc{}}{c{{f{e}}}{}{}}{{}{{f{c}}}{}}{bh}{{{Kl{ceg}}i}k{}Fh{}{}{}}`````{{{Lb{c{Ll{e}}Mng}}}{{Lb{c{Ml{e}}Kjg}}}{}Fh{}}{{{Lb{{Cl{ce}}gik}}{Lb{cgMnm}}}{{Lb{{Cl{ce}}gik}}}{OdOf}{}Fh{}{}{}}{{{Lb{cegi}}}{{Lb{cegk}}}{}Fh{}{}{}}{b{{b{c}}}{}}00{{{b{d}}}{{b{dc}}}{}}00{{{Lb{cegi}}{b{{l{k}}}}}{{Lb{{l{k}}Kj}}}{KnDjDl}{FhMh}{}Oh{}}{{{Lb{cegi}}{b{{l{k}}}}}{{Lb{c{l{k}}Kj}}}{KnDjDl}{FhMh}{}Oh{}}{{{Lb{cegi}}{b{{l{k}}}}}{{Lb{{l{k}}Kj}}}Kn{FhMh}{}Oh{}}{{{Lb{cegi}}{b{{l{k}}}}}{{Lb{Mj{l{k}}Kj}}}Kn{FhMh}{}Oh{}}{{{Lb{ceMnOj}}{Lb{ceMnOj}}}{{Lb{ceMnOj}}}{}Fh}{{{b{{Lb{cegi}}}}}{{Lb{cegi}}}KnFh{}{}}{{b{b{dc}}}Ad{}}{bAd}{{{Lb{cegi}}}{{Lb{cegi}}}KnFh{}{}}{{{Lb{cegi}}EfEh}Ad{}{FhMh}{}{}}{{{Lb{c{Ll{e}}Mng}}EfEh}Ad{}Fh{}}{{{Lb{cegi}}{N`{keMn}}}{{Lb{cegi}}}{}Fh{}{}{}}0{{{Lb{cegi}}}{{Kl{Cbeg}}}{}Fh{}{{Oh{Nh}{{Ol{Nh}}}}}}{{Ef{Ll{c}}}{{Lb{e{Ll{c}}Mng}}}Fh{}{}}{{Efc}{{Lb{ecgi}}}{FhMh}{}{}{}}{{{Lb{cegi}}{Lb{kegi}}}{{Lb{{Cl{ck}}egi}}}KnFh{}{}Kn}{{{Lb{cegi}}m}{{Lb{{Cl{ck}}egi}}}{}Fh{}{}Kn{{Nj{{N`{keMn}}}}}}{{{Lb{c{l{e}}gi}}{b{{l{k}}}}}{{Lb{c{l{k}}Kji}}}{KnDjDl}{}{}Oh{}}{{{Lb{cegi}}{b{{Bf{k}}}}}{{Lb{c{Bf{k}}Kji}}}{KnDjDl}{FhMh}{}{{Oh{}{{Ol{}}}}}{}}{{{Lb{c{Ll{e}}Mng}}}{{Lb{c{Ll{e}}Mng}}}{}Fh{}}00{{{Lb{cegi}}m}Ad{}{FhMh}{}{}{Lj{Dd{c}}}{{D`{ke}}}}{{{Lb{c{Ml{e}}gi}}}{{Lb{cegi}}}{}{FhMh}{}{}}{{{Lb{cegOj}}}{{Lb{{Cl{Cbc}}egOj}}}{}Fh{}}{{{Lb{cegi}}m}{{Lb{cegi}}}{}Fh{}{}{{Nd{{b{c}}}{{Bb{Gj}}}}}{{Nf{ke}}}}{{{Lb{cegi}}o}{{Lb{kegi}}}{}Fh{}{}{}{{Nd{c}{{Bb{{Cj{k}}}}}}}{{Nf{me}}}}{{{Lb{cegi}}{Lb{ceMnk}}}{{Lb{ceMni}}}{OdOf}Fh{}{}{}}{{{Lb{cegOj}}}{{N`{ceg}}}{}Fh{}}{{{Lb{cegi}}Aa}{{Lb{kegi}}}{}Fh{}{}{}{{Lh{}{{Lf{k}}}}}{{Nd{c}{{Bb{m}}}}}{{Nf{oe}}}}{{{Lb{cegi}}Aa}{{Lb{kegNh}}}{}Fh{}{}{}{{Lh{}{{Lf{k}}}}}{{Nd{c}{{Bb{m}}}}}{{Nf{oe}}}}{{{Lb{egik}}}{{Lb{cgik}}}{}{{Lh{}{{Lf{c}}}}}Fh{}{}}{{{Lb{egik}}}{{Lb{cgiNh}}}{}{{Lh{}{{Lf{c}}}}}Fh{}{}}{{{Lb{cegOj}}mAa}{{Kl{ieg}}}{}Fh{}{}{{Nd{}{{Bb{i}}}}}{{Nf{ke}}}{{Nd{{b{di}}c}}}{{Nf{oe}}}}{{{Lb{cegi}}oAc}{{Kl{keg}}}{}Fh{}{{Oh{Nh}{{Ol{Nh}}}}}{}{{Nd{}{{Bb{k}}}}}{{Nf{me}}}{{Nd{{b{dk}}c}}}{{Nf{Aae}}}}{{{Lb{{Cl{ce}}{Ll{g}}Mn}}mAa}{{Lb{{Cl{ci}}{Ll{g}}Mn}}}{OdOf}{}Fh{}{{Nd{}{{Bb{i}}}}}{{Nf{k{Ll{g}}}}}{{Nd{{b{di}}e}}}{{Nf{o{Ll{g}}}}}}{{{Lb{{Cl{ce}}{Ll{g}}Mni}}oAc}{{Lb{{Cl{ck}}{Ll{g}}Mni}}}{OdOf}{}Fh{}{}{{Nd{}{{Bb{k}}}}}{{Nf{m{Ll{g}}}}}{{Nd{{b{dk}}e}}}{{Nf{Aa{Ll{g}}}}}}{{{Lb{cegi}}m}Ad{}{FhMh}{}{}{{Nd{c}}}{{Nf{ke}}}}{cc{}}0{{{Lb{cegOj}}}{{Lb{cegNh}}}{}Fh{}}1{{{Lb{cegi}}m}{{Lb{cegi}}}{}Fh{}{}{{Nd{{b{c}}}}}{{Nf{ke}}}}{{}c{}}00{{{Lb{{Cl{ce}}gik}}{Lb{{Cl{cm}}gio}}}{{Lb{{Cl{c{Cl{em}}}}giNh}}}{OdOf}{}Fh{}{}{}{}}{{{Lb{{Cl{ce}}{Ll{g}}Mni}}}{{Lb{c{Ll{g}}Mni}}}{OdOf}{}Fh{}}?{{{Lb{cegi}}o}{{Lb{kegi}}}{}Fh{}{}{}{{Nd{c}{{Bb{k}}}}}{{Nf{me}}}}{{{Lb{cegi}}}{{N`{ceg}}}OnFh{}{{Oh{Nh}{{Ol{Nh}}}}}}{{{Lb{cegi}}o}{{N`{ceg}}}{}Fh{}{{Oh{Nh}{{Ol{Nh}}}}}On{{Nd{{b{c}}}{{Bb{k}}}}}{{Nf{me}}Gf}}1{{{Lb{c{Ll{e}}Mng}}}{{Lb{c{Ll{e}}Mng}}}KnFh{}}{{{Lb{cegOj}}k}{{N`{ceg}}}{}Fh{}{{Nd{{b{dc}}c}}}{{Nf{ie}}}}{{{Lb{cegi}}m}{{N`{ceg}}}{}Fh{}{{Oh{Nh}{{Ol{Nh}}}}}{{Nd{{b{dc}}c}}}{{Nf{ke}}}}{{{Lb{{Cl{ce}}{Ll{g}}Mn}}k}{{Lb{{Cl{ce}}{Ll{g}}Mn}}}{OdOf}{}Fh{{Nd{{b{de}}e}}}{{Nf{i{Ll{g}}}}}}{{{Lb{{Cl{ce}}{Ll{g}}Mni}}m}{{Lb{{Cl{ce}}{Ll{g}}Mni}}}{OdOf}{}Fh{}{{Nd{{b{de}}e}}}{{Nf{k{Ll{g}}}}}}{{{Lb{cegOj}}{b{{l{i}}}}}{{Lb{{l{i}}Kj}}}{KnDjDl}{FhMh}{}{}}{{{Lb{cegOj}}{b{{l{i}}}}}{{Lb{c{l{i}}Kj}}}{KnDjDl}{FhMh}{}{}}{{{Lb{cegOj}}{b{{l{i}}}}}{{Lb{{l{i}}Kj}}}Kn{FhMh}{}{}}{{{Lb{cegOj}}{b{{l{i}}}}}{{Lb{Mj{l{i}}Kj}}}Kn{FhMh}{}{}}{{{Lb{cegi}}k}{{Lb{ceKji}}}{}{FhMhNb}{}{}{{D`{Lde}}Gf}}{{{Lb{cegi}}{b{k}}}{{Lb{kKj}}}{}{FhMh}{}OhFh}{{{Lb{cikm}}{b{{Ah{e}}}}}E`{}{}{DjDl}{{A@d{{Ah{e}}}{{A@`{gc}}{A@b{gg}}}}FhMh}{}{}}{{{Lb{cegi}}{b{k}}}{{Lb{mkKj}}}{}{FhMh}{}OhFh{DjDl}}2{{{Lb{cegi}}{b{{Ah{k}}}}}Dn{}{FhMh}{}{}{}}{{{Lb{cegi}}{b{k}}}{{Lb{MjkKj}}}{}{FhMh}{}OhFh}{{{Lb{ceMng}}}{{Lb{ceMnOj}}}OnFh{}}{{{Lb{c{Ml{e}}gi}}}{{Lb{c{Ll{e}}Mni}}}{}{FhMh}{}{}}{{{Lb{cegi}}k}{{N`{AdeKj}}}{}{FhMhNb}{}{{Oh{Nh}{{Ol{Nh}}}}}{{D`{Ld{Ll{e}}}}Gf}}{{{b{{Lb{c{Ml{e}}gi}}}}}{{Ll{e}}}{}{FhMh}{}{}}{{{Lb{cegi}}{b{{Ll{e}}}}}{{Lb{c{Ml{e}}gi}}}{}{FhMhNb}{}{}}{bc{}}{c{{f{e}}}{}{}}00{{}{{f{c}}}{}}00{bh}00{{{Lb{ceKjNh}}{Lb{ceKjNh}}}{{Lb{ceKjNh}}}{}{FhMhNb}}{{{Lb{ceMni}}{Lb{cekg}}}{{Lb{cek}}}{}Fh{}{{Oh{g}}}{}}{{{Lb{cegi}}}{{Lb{cegi}}}{OdOf}Fh{}{}}","D":"Oj","p":[[1,"reference"],[0,"mut"],[6,"Result",1034],[5,"TypeId",1035],[5,"FlowBuilder",47],[5,"Cluster",613],[5,"CompiledFlow",102],[5,"DeployResult",123],[17,"CompileEnv"],[1,"unit"],[10,"Deploy",199],[5,"ExternalProcess",690],[5,"BuiltFlow",84],[8,"FlowState",47],[6,"HfPlusLeaf",404],[5,"Vec",1036],[17,"Output"],[10,"FnOnce",1037],[5,"Process",732],[5,"DeployFlow",123],[10,"LocalDeploy",199],[10,"ClusterSpec",199],[10,"ExternalSpec",199],[10,"IntoProcessSpec",199],[1,"usize"],[5,"HydroflowGraph",1038],[5,"BTreeMap",1039],[5,"TokenStream",1040],[6,"Option",1041],[1,"tuple"],[5,"CompiledFlowWithId",102],[10,"QuotedWithContext",1042],[5,"ExternalBincodeSink",690],[10,"Sink",1043],[5,"Box",1044],[5,"Pin",1045],[10,"Serialize",1046],[10,"DeserializeOwned",1047],[5,"ExternalBytesPort",690],[5,"ExternalBincodeStream",690],[10,"Stream",1048],[10,"CycleComplete",155],[5,"Ident",1040],[6,"LocationId",555],[5,"ForwardRef",155],[6,"ForwardRefMarker",155],[5,"TickCycle",155],[6,"TickCycleMarker",155],[10,"DeferTick",155],[17,"Location"],[10,"CycleCollection",155],[10,"Location",555],[10,"CycleCollectionWithInitial",155],[10,"RegisterPort",199],[10,"Future",1049],[10,"ProcessSpec",199],[1,"str"],[1,"u32"],[10,"Copy",1050],[6,"Expr",1051],[1,"bool"],[17,"Port"],[17,"Meta"],[17,"InstantiateEnv"],[10,"Node",199],[6,"Stmt",1052],[17,"ProcessSpec"],[10,"Sized",1050],[5,"SingleNode",263],[5,"MultiNode",263],[5,"DeployRuntimeNode",315],[5,"DeployRuntimeCluster",315],[5,"String",1053],[5,"HydroflowPlusMeta",382],[5,"DeployPorts",1054],[5,"RuntimeData",1042],[10,"Deserializer",1047],[10,"Serializer",1046],[5,"DebugExpr",404],[8,"SeenTees",404],[5,"HashMap",1055],[6,"HfPlusNode",404],[5,"FlatGraphBuilder",1056],[5,"RefCell",1057],[6,"DebugInstantiate",404],[5,"Formatter",1058],[8,"Result",1058],[5,"TeeNode",404],[6,"HfPlusSource",404],[5,"Span",1040],[10,"FnMut",1037],[17,"Root"],[6,"Unbounded",31],[5,"Singleton",875],[10,"Clone",1059],[5,"Instant",1060],[5,"Stream",932],[5,"Duration",1061],[17,"Item"],[10,"IntoIterator",1062],[10,"Unpin",1050],[5,"Tick",754],[6,"Type",1063],[5,"ClusterIds",613],[5,"ClusterSelfId",613],[5,"ClusterId",665],[10,"Hasher",1064],[10,"NoTick",754],[5,"Bytes",1065],[5,"Timestamped",754],[6,"Bounded",31],[5,"Optional",796],[10,"NoTimestamp",754],[10,"Fn",1037],[10,"IntoQuotedMut",1042],[5,"NoOrder",932],[10,"Into",1066],[1,"u64"],[5,"UnboundedSender",1067],[5,"PropertyDatabase",849],[5,"RuntimeContext",861],[10,"Eq",1068],[10,"Hash",1064],[10,"MinOrder",932],[5,"TotalOrder",932],[17,"Min"],[10,"Ord",1068],[17,"In"],[17,"Out"],[10,"CanSend",607],[5,"FlowStateInner",47],[5,"SingleProcessGraph",263],[5,"MultiGraph",263],[5,"DeployRuntime",315],[15,"ForEach",513],[15,"CycleSink",513],[15,"DestSink",513],[15,"Fold",520],[15,"FoldKeyed",520],[15,"Network",520],[15,"Map",520],[15,"FlatMap",520],[15,"Filter",520],[15,"FilterMap",520],[15,"Inspect",520],[15,"Reduce",520],[15,"ReduceKeyed",520],[15,"CycleSource",520],[15,"Tee",520],[15,"Enumerate",520],[15,"Source",520],[10,"IsCluster",613],[10,"ZipResult",875]],"r":[[0,31],[1,613],[2,613],[3,665],[4,690],[5,47],[6,555],[7,932],[8,796],[9,732],[10,861],[11,875],[12,932],[13,754],[14,754],[15,932],[16,31],[26,1069],[555,607],[556,613],[558,665],[559,690],[563,754],[564,732],[567,754],[569,754],[615,665]],"b":[[644,"impl-CanSend%3C\'a,+Process%3C\'a,+P2%3E%3E-for-Cluster%3C\'a,+C1%3E"],[645,"impl-CanSend%3C\'a,+Cluster%3C\'a,+C2%3E%3E-for-Cluster%3C\'a,+C1%3E"],[649,"impl-CanSend%3C\'a,+Cluster%3C\'a,+C2%3E%3E-for-Cluster%3C\'a,+C1%3E"],[650,"impl-CanSend%3C\'a,+Process%3C\'a,+P2%3E%3E-for-Cluster%3C\'a,+C1%3E"],[677,"impl-Debug-for-ClusterId%3CC%3E"],[678,"impl-Display-for-ClusterId%3CC%3E"],[742,"impl-CanSend%3C\'a,+Cluster%3C\'a,+C2%3E%3E-for-Process%3C\'a,+P1%3E"],[743,"impl-CanSend%3C\'a,+ExternalProcess%3C\'a,+E2%3E%3E-for-Process%3C\'a,+P1%3E"],[744,"impl-CanSend%3C\'a,+Process%3C\'a,+P2%3E%3E-for-Process%3C\'a,+P1%3E"],[747,"impl-CanSend%3C\'a,+Cluster%3C\'a,+C2%3E%3E-for-Process%3C\'a,+P1%3E"],[748,"impl-CanSend%3C\'a,+Process%3C\'a,+P2%3E%3E-for-Process%3C\'a,+P1%3E"],[749,"impl-CanSend%3C\'a,+ExternalProcess%3C\'a,+E2%3E%3E-for-Process%3C\'a,+P1%3E"],[803,"impl-CycleComplete%3C\'a,+ForwardRefMarker%3E-for-Optional%3CT,+Tick%3CL%3E,+Bounded%3E"],[804,"impl-CycleComplete%3C\'a,+ForwardRefMarker%3E-for-Optional%3CT,+L,+B%3E"],[805,"impl-CycleComplete%3C\'a,+TickCycleMarker%3E-for-Optional%3CT,+Tick%3CL%3E,+Bounded%3E"],[808,"impl-CycleCollection%3C\'a,+ForwardRefMarker%3E-for-Optional%3CT,+Tick%3CL%3E,+Bounded%3E"],[809,"impl-CycleCollection%3C\'a,+TickCycleMarker%3E-for-Optional%3CT,+Tick%3CL%3E,+Bounded%3E"],[810,"impl-CycleCollection%3C\'a,+ForwardRefMarker%3E-for-Optional%3CT,+L,+B%3E"],[811,"impl-DeferTick-for-Optional%3CT,+Tick%3CL%3E,+Bounded%3E"],[812,"impl-Optional%3CT,+Tick%3CL%3E,+Bounded%3E"],[821,"impl-From%3COptional%3CT,+L,+Bounded%3E%3E-for-Optional%3CT,+L,+Unbounded%3E"],[822,"impl-From%3CSingleton%3CT,+L,+B%3E%3E-for-Optional%3CT,+L,+B%3E"],[885,"impl-CycleComplete%3C\'a,+TickCycleMarker%3E-for-Singleton%3CT,+Tick%3CL%3E,+Bounded%3E"],[886,"impl-CycleComplete%3C\'a,+ForwardRefMarker%3E-for-Singleton%3CT,+L,+B%3E"],[887,"impl-CycleComplete%3C\'a,+ForwardRefMarker%3E-for-Singleton%3CT,+Tick%3CL%3E,+Bounded%3E"],[890,"impl-CycleCollection%3C\'a,+ForwardRefMarker%3E-for-Singleton%3CT,+Tick%3CL%3E,+Bounded%3E"],[891,"impl-CycleCollectionWithInitial%3C\'a,+TickCycleMarker%3E-for-Singleton%3CT,+Tick%3CL%3E,+Bounded%3E"],[892,"impl-CycleCollection%3C\'a,+ForwardRefMarker%3E-for-Singleton%3CT,+L,+B%3E"],[893,"impl-DeferTick-for-Singleton%3CT,+Tick%3CL%3E,+Bounded%3E"],[894,"impl-Singleton%3CT,+Tick%3CL%3E,+Bounded%3E"],[908,"impl-ZipResult%3C\'a,+Singleton%3CU,+Tick%3CL%3E,+B%3E%3E-for-Singleton%3CT,+Tick%3CL%3E,+B%3E"],[909,"impl-ZipResult%3C\'a,+Optional%3CU,+Timestamped%3CL%3E,+B%3E%3E-for-Singleton%3CT,+Timestamped%3CL%3E,+B%3E"],[910,"impl-ZipResult%3C\'a,+Singleton%3CU,+Timestamped%3CL%3E,+B%3E%3E-for-Singleton%3CT,+Timestamped%3CL%3E,+B%3E"],[911,"impl-ZipResult%3C\'a,+Optional%3CU,+Tick%3CL%3E,+B%3E%3E-for-Singleton%3CT,+Tick%3CL%3E,+B%3E"],[914,"impl-ZipResult%3C\'a,+Optional%3CU,+Timestamped%3CL%3E,+B%3E%3E-for-Singleton%3CT,+Timestamped%3CL%3E,+B%3E"],[915,"impl-ZipResult%3C\'a,+Optional%3CU,+Tick%3CL%3E,+B%3E%3E-for-Singleton%3CT,+Tick%3CL%3E,+B%3E"],[916,"impl-ZipResult%3C\'a,+Singleton%3CU,+Tick%3CL%3E,+B%3E%3E-for-Singleton%3CT,+Tick%3CL%3E,+B%3E"],[917,"impl-ZipResult%3C\'a,+Singleton%3CU,+Timestamped%3CL%3E,+B%3E%3E-for-Singleton%3CT,+Timestamped%3CL%3E,+B%3E"],[919,"impl-ZipResult%3C\'a,+Optional%3CU,+Tick%3CL%3E,+B%3E%3E-for-Singleton%3CT,+Tick%3CL%3E,+B%3E"],[920,"impl-ZipResult%3C\'a,+Singleton%3CU,+Tick%3CL%3E,+B%3E%3E-for-Singleton%3CT,+Tick%3CL%3E,+B%3E"],[921,"impl-ZipResult%3C\'a,+Optional%3CU,+Timestamped%3CL%3E,+B%3E%3E-for-Singleton%3CT,+Timestamped%3CL%3E,+B%3E"],[922,"impl-ZipResult%3C\'a,+Singleton%3CU,+Timestamped%3CL%3E,+B%3E%3E-for-Singleton%3CT,+Timestamped%3CL%3E,+B%3E"],[955,"impl-CycleComplete%3C\'a,+ForwardRefMarker%3E-for-Stream%3CT,+L,+B,+Order%3E"],[956,"impl-CycleComplete%3C\'a,+TickCycleMarker%3E-for-Stream%3CT,+Tick%3CL%3E,+Bounded,+Order%3E"],[960,"impl-CycleCollection%3C\'a,+TickCycleMarker%3E-for-Stream%3CT,+Tick%3CL%3E,+Bounded,+Order%3E"],[961,"impl-CycleCollection%3C\'a,+ForwardRefMarker%3E-for-Stream%3CT,+L,+B,+Order%3E"],[966,"impl-Stream%3CT,+Tick%3CL%3E,+Bounded,+Order%3E"],[967,"impl-DeferTick-for-Stream%3CT,+Tick%3CL%3E,+Bounded,+Order%3E"],[1031,"impl-Stream%3CT,+L,+Unbounded,+NoOrder%3E"],[1032,"impl-Stream%3CT,+L,+Bounded,+Order%3E"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAI0DNwAAABoAHAADACIAAwAqABkASAATAF4ADgBvAAAAcgAXAIwAAgCRAA4AoQASALwAFQDTAEYAHgEDACYBLwBZAQMAYAEtAJABGgCuAS4A4AEAAOoBYQBNAgAATwIFAFcCCwBkAgEAZwIWAIECAACFAiIAqQIBAKwCFgDHAgAAzAIXAOUCAADnAg0A9gIQAAkDAQANAyoAOgMCAD4DAQBCAw4AVAMCAFkDCwBnAx4AhwMAAIkDAQCMAxAAnwMFAKoDAQCtAxAAwAMZANwDAADeAwAA4gMPAPMDBgD8Aw4A"}],["hydroflow_plus_std",{"t":"CCHHH","n":["quorum","request_response","collect_quorum","collect_quorum_with_response","join_responses"],"q":[[0,"hydroflow_plus_std"],[2,"hydroflow_plus_std::quorum"],[4,"hydroflow_plus_std::request_response"],[5,"core::result"],[6,"hydroflow_plus::location::tick"],[7,"hydroflow_plus::boundedness"],[8,"hydroflow_plus::stream"],[9,"core::clone"],[10,"core::cmp"],[11,"core::hash"],[12,"hydroflow_plus::location"]],"i":"`````","f":"``{{{l{{f{c{d{be}}}}{h{g}}ji}}nn}{{f{{l{c{h{g}}ji}}{l{{f{ce}}{h{g}}ji}}}}}{A`AbAd}A`{AfAh}{}}{{{l{{f{c{d{eg}}}}{h{i}}jk}}nn}{{f{{l{{f{ce}}{h{i}}jk}}{l{{f{cg}}{h{i}}jk}}}}}{A`AbAd}A`A`{AfAh}{}}{{{Al{{Aj{c}}}}{l{{f{eg}}{h{c}}jAn}}{l{{f{ei}}{Aj{c}}B`An}}}{{l{{f{e{f{ig}}}}{h{c}}jAn}}}{AfAh}{A`AbAd}A`A`}","D":"b","p":[[1,"unit"],[6,"Result",5],[1,"tuple"],[5,"Timestamped",6],[6,"Unbounded",7],[5,"Stream",8],[1,"usize"],[10,"Clone",9],[10,"Eq",10],[10,"Hash",11],[10,"Location",12],[10,"NoTick",6],[5,"Tick",6],[1,"reference"],[5,"NoOrder",8],[6,"Bounded",7]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OjAAAAEAAAAAAAQAEAAAAAAAAQACAAMABAA="}],["hydroflow_plus_test",{"t":"CCCCCCCCCCFFNNNNHNNNNNNNNNNNNHFFNNNNNNNNHNNNNNNNNFFKFNNNNNNNNNNNNNNNNNNNNNNNNNONHONNNNNNNNNNNNNNFNNNNHNNNNKFKFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONHHONNNNNNNNNNNNNONNNHHHFFFNNNNNNNNNNNNNNNNNNHNNNNNNCFFNNNNHNNNNNNNNNNNN","n":["cluster","distributed","compute_pi","many_to_many","map_reduce","paxos","paxos_bench","paxos_kv","simple_cluster","two_pc","Leader","Worker","borrow","","borrow_mut","","compute_pi","from","","into","","try_from","","try_into","","type_id","","vzip","","many_to_many","Leader","Worker","borrow","","borrow_mut","","from","","into","","map_reduce","try_from","","try_into","","type_id","","vzip","","Acceptor","Ballot","PaxosPayload","Proposer","borrow","","","borrow_mut","","","clone","clone_into","clone_to_uninit","cmp","compare","deserialize","eq","equivalent","","","","fmt","from","","","hash","into","","","num","partial_cmp","paxos_core","proposer_id","serialize","to_owned","try_from","","","try_into","","","type_id","","","vzip","","","Client","borrow","borrow_mut","from","into","paxos_bench","try_from","try_into","type_id","vzip","KvKey","KvPayload","KvValue","Replica","SequencedKv","borrow","","","borrow_mut","","","clone","","clone_into","","clone_to_uninit","","cmp","compare","deserialize","","eq","","equivalent","","","","","","","","fmt","","from","","","into","","","key","kv","partial_cmp","paxos_kv","replica","seq","serialize","","to_owned","","try_from","","","try_into","","","type_id","","","value","vzip","","","decouple_cluster","decouple_process","simple_cluster","Client","Coordinator","Participants","borrow","","","borrow_mut","","","from","","","into","","","try_from","","","try_into","","","two_pc","type_id","","","vzip","","","first_ten","P1","P2","borrow","","borrow_mut","","first_ten_distributed","from","","into","","try_from","","try_into","","type_id","","vzip",""],"q":[[0,"hydroflow_plus_test"],[2,"hydroflow_plus_test::cluster"],[10,"hydroflow_plus_test::cluster::compute_pi"],[29,"hydroflow_plus_test::cluster::many_to_many"],[30,"hydroflow_plus_test::cluster::map_reduce"],[49,"hydroflow_plus_test::cluster::paxos"],[96,"hydroflow_plus_test::cluster::paxos_bench"],[106,"hydroflow_plus_test::cluster::paxos_kv"],[168,"hydroflow_plus_test::cluster::simple_cluster"],[171,"hydroflow_plus_test::cluster::two_pc"],[199,"hydroflow_plus_test::distributed"],[200,"hydroflow_plus_test::distributed::first_ten"],[219,"hydroflow_plus::builder"],[220,"hydroflow_plus::location::cluster"],[221,"hydroflow_plus::location::process"],[222,"core::result"],[223,"core::any"],[224,"core::cmp"],[225,"serde::de"],[226,"core::fmt"],[227,"core::hash"],[228,"core::option"],[229,"hydroflow_plus::location::cluster::cluster_id"],[230,"hydroflow_plus::boundedness"],[231,"hydroflow_plus::stream"],[232,"serde::ser"],[233,"core::clone"],[234,"hydroflow_plus::location::external_process"],[235,"alloc::string"]],"i":"````````````jn10`101010101010```AjAl101010`10101010````BnC`An210000000000000210021000`000210210210210`D`000`0000`````DbDdDh2101010100010101111000010210210100``010102102102101210``````EjEhEl210210210210210`210210```F`Fb10`101010101010","f":"````````````{b{{b{c}}}{}}0{{{b{d}}}{{b{dc}}}{}}0{{{b{f}}h}{{Ab{{l{j}}{A`{n}}}}}}{cc{}}0{{}c{}}0{c{{Ad{e}}}{}{}}0{{}{{Ad{c}}}{}}0{bAf}033{{{b{f}}}{{l{Ah}}}}``88775544{{{b{f}}}{{Ab{{A`{Aj}}{l{Al}}}}}}44332255````999888{{{b{An}}}An}{{b{b{dc}}}Ah{}}{bAh}{{{b{An}}{b{An}}}B`}{{b{b{c}}}B`{}}{c{{Ad{An}}}Bb}{{{b{An}}{b{An}}}Bd}{{b{b{c}}}Bd{}}000{{{b{An}}{b{dBf}}}Bh}???{{{b{An}}{b{dc}}}AhBj}???`{{{b{An}}{b{An}}}{{Bl{B`}}}}{{{b{{l{Bn}}}}{b{{l{C`}}}}{Ch{{Ab{{Cb{c}}h}}{l{C`}}CdCf}}{Ch{e{l{Bn}}Cd}}hCjCjh}{{Ab{{Ch{An{l{Bn}}Cd}}{Ch{{Ab{h{Bl{e}}}}{l{Bn}}CdCf}}}}}{}Cl}`{{{b{An}}c}AdCn}{bc{}}{c{{Ad{e}}}{}{}}00{{}{{Ad{c}}}{}}00{bAf}00{{}c{}}00`{b{{b{c}}}{}}{{{b{d}}}{{b{dc}}}{}}{cc{}}3{{{b{f}}hhhhCjCjh}{{Ab{{l{Bn}}{l{C`}}{l{D`}}{l{Db}}}}}}7654`````333222{{{b{{Dd{ce}}}}}{{Dd{ce}}}DfDf}{{{b{{Dh{ce}}}}}{{Dh{ce}}}DfDf}{{b{b{dc}}}Ah{}}0{bAh}0{{{b{{Dh{ce}}}}{b{{Dh{ce}}}}}B`DjDl}{{b{b{c}}}B`{}}{c{{Ad{{Dd{eg}}}}}BbDnDn}{c{{Ad{{Dh{eg}}}}}BbDnDn}{{{b{{Dd{ce}}}}{b{{Dd{ce}}}}}BdE`E`}{{{b{{Dh{ce}}}}{b{{Dh{ce}}}}}BdE`E`}{{b{b{c}}}Bd{}}0000000{{{b{{Dd{ce}}}}{b{dBf}}}BhEbEb}{{{b{{Dh{ce}}}}{b{dBf}}}BhEbEb}>>>{{}c{}}00``{{{b{{Dh{ce}}}}{b{{Dh{ce}}}}}{{Bl{B`}}}DjDl}{{{b{{l{Bn}}}}{b{{l{C`}}}}{b{{l{Db}}}}{Ch{{Dd{ce}}{l{Bn}}Cd}}hCjCjhh}{{Ab{{Ch{An{l{Bn}}Cd}}{Ch{{Dd{ce}}{l{Db}}Cd}}}}}DjDl}{{{b{{l{Db}}}}{Ch{{Dh{ce}}{l{Db}}CdCf}}h}{{Ab{{Ch{h{l{Db}}Cd}}{Ch{{Dd{ce}}{l{Db}}Cd}}}}}DjDl}`{{{b{{Dd{ce}}}}g}AdEdEdCn}{{{b{{Dh{ce}}}}g}AdEdEdCn}{bc{}}0{c{{Ad{e}}}{}{}}00{{}{{Ad{c}}}{}}00{bAf}00`999{{{b{f}}}{{Ab{{l{Ah}}{l{Ah}}}}}}{{{b{f}}}{{Ab{{A`{Ah}}{A`{Ah}}}}}}{{{b{f}}}{{Ab{{A`{Ah}}{l{Ah}}}}}}```{b{{b{c}}}{}}00{{{b{d}}}{{b{dc}}}{}}00{cc{}}00???888777{{{b{f}}Ef}{{Ab{{A`{Eh}}{l{Ej}}{A`{El}}}}}}777{{}c{}}00```4433{{{b{{En{Ah}}}}{b{{A`{F`}}}}{b{{A`{Fb}}}}}{{Ff{Fd}}}}3311;;::9911","D":"Dd","p":[[1,"reference"],[0,"mut"],[5,"FlowBuilder",219],[1,"usize"],[5,"Worker",10],[5,"Cluster",220],[5,"Leader",10],[5,"Process",221],[1,"tuple"],[6,"Result",222],[5,"TypeId",223],[1,"unit"],[5,"Leader",30],[5,"Worker",30],[5,"Ballot",49],[6,"Ordering",224],[10,"Deserializer",225],[1,"bool"],[5,"Formatter",226],[8,"Result",226],[10,"Hasher",227],[6,"Option",228],[5,"Proposer",49],[5,"Acceptor",49],[5,"ClusterId",229],[6,"Unbounded",230],[5,"NoOrder",231],[5,"Stream",231],[1,"u64"],[10,"PaxosPayload",49],[10,"Serializer",232],[5,"Client",96],[5,"Replica",106],[5,"KvPayload",106],[10,"Clone",233],[5,"SequencedKv",106],[10,"KvKey",106],[10,"KvValue",106],[10,"Deserialize",225],[10,"PartialEq",224],[10,"Debug",226],[10,"Serialize",232],[1,"u32"],[5,"Coordinator",171],[5,"Participants",171],[5,"Client",171],[5,"ExternalProcess",234],[5,"P1",200],[5,"P2",200],[5,"String",235],[5,"ExternalBincodeSink",234]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAALkACwAAABEAFgAOACkAHgBLAAAATwABAFIAEQBmACUAkgACAJYAHgC7ABQA1AAHAA=="}],["hydroflow_plus_test_local",{"t":"CCCCCCCCQHQQHHQQQQQ","n":["local","chat_app","compute_pi","count_elems","first_ten","graph_reachability","negation","teed_join","chat_app","compute_pi","compute_pi_runtime","count_elems","count_elems_generic","first_ten","first_ten_runtime","graph_reachability","test_anti_join","test_difference","teed_join"],"q":[[0,"hydroflow_plus_test_local"],[1,"hydroflow_plus_test_local::local"],[8,"hydroflow_plus_test_local::local::chat_app"],[9,"hydroflow_plus_test_local::local::compute_pi"],[11,"hydroflow_plus_test_local::local::count_elems"],[13,"hydroflow_plus_test_local::local::first_ten"],[15,"hydroflow_plus_test_local::local::graph_reachability"],[16,"hydroflow_plus_test_local::local::negation"],[18,"hydroflow_plus_test_local::local::teed_join"],[19,"hydroflow_plus::builder"],[20,"stageleft"],[21,"hydroflow_plus::location::process"],[22,"tokio_stream::wrappers::mpsc_unbounded"],[23,"tokio::sync::mpsc::unbounded"],[24,"hydroflow::scheduled::graph"]],"i":"```````````````````","f":"`````````{{{d{b}}{h{f}}}{{l{j}}}}``{{b{h{{n{c}}}}{h{{d{{Ab{A`}}}}}}}{{`{{Af{Ad}}}}}{}}{{{d{b}}}j}`````","D":"`","p":[[5,"FlowBuilder",19],[1,"reference"],[1,"usize"],[5,"RuntimeData",20],[1,"unit"],[5,"Process",21],[5,"UnboundedReceiverStream",22],[1,"u32"],[5,"UnboundedSender",23],[5,"Hydroflow",24],[10,"Quoted",20]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAABMAAQAAABMA"}],["hydroflow_plus_test_local_macro",{"t":"QQQQQQQQ","n":["macro_0317123C21A365AAC8F7C904D715749D52C4408A36766C2EA4952E8548FDF2CF","macro_1C0FE8523A30CEE48113F7CA958EDC55F81545A0CB32FC13A73E2E0B86C69967","macro_88FF4FF66B42C3C3EA6A3A776AD3BBB5A0E778C545379CD74D8134F1BDE2467B","macro_B8B04B5C82DD37E36A884DD155638B3BB603ECEE77232C187CB7749C8C3633D4","macro_DBD6835F761FB7B759E0367E64D404553FF74D0CDA5EC33E48C8D94A09338A20","macro_E29C1936765CFB0AEE40C7D85645A072229E6DD9B20D78BFFDFDF0B90F8550E2","macro_F32B896FDC4E575B912C55F307713AE1C491601401B080576A445697B5F5D872","macro_F395CBD2498F0C0291586D539B1C53802F7DE61514FE27DB041B53B7578FA011"],"q":[[0,"hydroflow_plus_test_local_macro"]],"i":"````````","f":"````````","D":"`","p":[],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAAgAAQAAAAgA"}],["latency_measure",{"t":"HCFFPPPFFGNNNNNNNNNNONNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOONNNNNONNNNNNNNNNNNNNNNNNNNONNNNN","n":["main","protocol","OperationPayload","Payload","","Ping","Pong","QueryResponse","Timestamped","TopolotreeMessage","borrow","","","","","borrow_mut","","","","","change","clone","","","","","clone_into","","","","","clone_to_uninit","","","","","contents","data","deserialize","","","","","eq","","","","","equivalent","","","","","","","","","","fmt","","","","","from","","","","","hash","","","","into","","","","","key","","","serialize","","","","","timestamp","to_owned","","","","","try_from","","","","","try_into","","","","","type_id","","","","","value","vzip","","","",""],"q":[[0,"latency_measure"],[2,"latency_measure::protocol"],[112,"core::clone"],[113,"core::fmt"],[114,"core::result"],[115,"serde::de"],[116,"core::cmp"],[117,"core::hash"],[118,"serde::ser"],[119,"core::any"]],"i":"````n00```h1A`AbAd3421013421034210342102334210342103344221100342103421034203421021034210334210342103421034210034210","f":"{{}b}`````````{d{{d{c}}}{}}0000{{{d{f}}}{{d{fc}}}{}}0000`{{{d{{h{c}}}}}{{h{c}}}{jl}}{{{d{n}}}n}{{{d{{A`{c}}}}}{{A`{c}}}{jl}}{{{d{Ab}}}Ab}{{{d{Ad}}}Ad}{{d{d{fc}}}b{}}0000{db}0000``{c{{Af{{h{e}}}}}Ah{Ajl}}{c{{Af{n}}}Ah}{c{{Af{{A`{e}}}}}Ah{Ajl}}{c{{Af{Ab}}}Ah}{c{{Af{Ad}}}Ah}{{{d{{h{c}}}}{d{{h{c}}}}}Al{Anl}}{{{d{n}}{d{n}}}Al}{{{d{{A`{c}}}}{d{{A`{c}}}}}Al{Anl}}{{{d{Ab}}{d{Ab}}}Al}{{{d{Ad}}{d{Ad}}}Al}{{d{d{c}}}Al{}}000000000{{{d{{h{c}}}}{d{fB`}}}Bb{ll}}{{{d{n}}{d{fB`}}}Bb}{{{d{{A`{c}}}}{d{fB`}}}Bb{ll}}{{{d{Ab}}{d{fB`}}}Bb}{{{d{Ad}}{d{fB`}}}Bb}{cc{}}0000{{{d{{h{c}}}}{d{fe}}}b{Bdl}Bf}{{{d{n}}{d{fc}}}bBf}{{{d{{A`{c}}}}{d{fe}}}b{Bdl}Bf}{{{d{Ad}}{d{fc}}}bBf}{{}c{}}0000```{{{d{{h{c}}}}e}Af{Bhl}Bj}{{{d{n}}c}AfBj}{{{d{{A`{c}}}}e}Af{Bhl}Bj}{{{d{Ab}}c}AfBj}{{{d{Ad}}c}AfBj}`{dc{}}0000{c{{Af{e}}}{}{}}0000{{}{{Af{c}}}{}}0000{dBl}0000`99999","D":"Ad","p":[[1,"unit"],[1,"reference"],[0,"mut"],[5,"Timestamped",2],[10,"Clone",112],[10,"Debug",113],[6,"TopolotreeMessage",2],[5,"Payload",2],[5,"OperationPayload",2],[5,"QueryResponse",2],[6,"Result",114],[10,"Deserializer",115],[10,"Deserialize",115],[1,"bool"],[10,"PartialEq",116],[5,"Formatter",113],[8,"Result",113],[10,"Hash",117],[10,"Hasher",117],[10,"Serialize",118],[10,"Serializer",118],[5,"TypeId",119]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAGYAAwAAAD8ARQADAE4AIgA="}],["lattices",{"t":"KRRKQFKFQQKYKYKYKKYKKYFKYFKKKRRFFFRKFFFKOMNCNNNNNNNNNNNNNNNNMNNONNNNNNNNNNNNNNNNNNNNMMNENNNNNNNNNNNNNNNNNNNNNNNNNNNHHNNCMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOMNNNNNNNNNCCMNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNMNNNNNNNNNCNNNNNNNNNCCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCOEMHHHHHHHHHHHHHHHHHHHHHHHHFFFFKRFFFFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOKRKFFKTRRRRRRRNNNNNNNNNNCMNNNNNMNNNNNNNMNNNNNNNNNNNNNMNNMNNNMNNNNNMNNNNNNNMNNMNNCCNNMNNNMNNNNNMNNNMNNNCNNNNNNNNKKKRRRRRRMMMMMKRFFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFIIIIIINNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNIFIINNNNNNNNNNNNNNNNNNNNNNNNNNNNFFFPFPFGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFIIIIIINNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFIIIIIIINNNNNNNNNNNNNNNNNNNNNNNNNNHHHHHHHHHHHFIIIIIINNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["Addition","Atom","AtomIter","Atomize","ColtType","Conflict","DeepReveal","DomPair","GhtType","GhtTypeWithSchema","IsBot","","IsTop","","Lattice","","LatticeBimorphism","LatticeFrom","","LatticeMorphism","LatticeOrd","","Max","Merge","","Min","Multiplication","NaiveLatticeOrd","One","Output","","Pair","PairBimorphism","Point","Revealed","Semiring","VecUnion","WithBot","WithTop","Zero","a","add","add_owned","algebra","as_reveal_mut","","","","","","","","as_reveal_ref","","","","","","","","atomize","","","b","borrow","","","","","","","","","","borrow_mut","","","","","","","","","","call","","","cc_traits","clone","","","","","","","","","clone_into","","","","","","","","","clone_to_uninit","","","","","","","","","closure_to_bimorphism","closure_to_morphism","cmp","","collections","deep_reveal","","","","","","","","","","default","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","deserialize","","","","","","","","","eq","","","","","","","","","equivalent","","","","","","","","","","","","","","","","","","fmt","","","","","","","","","from","","","","","","","","","","","ght","into","","","","","","","","","","into_reveal","","","","","","","","is_bot","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","is_top","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","key","lattice_from","","","","","","","","","","map_union","map_union_with_tombstones","merge","","","","","","","","","","merge_owned","mul","mul_owned","naive_cmp","new","","","","","","","","","new_from","","","","","","","","one","partial_cmp","","","","","","","","","semiring_application","serialize","","","","","","","","","set_union","set_union_with_tombstones","test","to_owned","","","","","","","","","try_from","","","","","","","","","","try_into","","","","","","","","","","type_id","","","","","","","","","","union_find","val","variadics","zero","abelian_group","absorbing_element","associativity","bilinearity","commutative_monoid","commutative_ring","commutativity","distributive","field","get_single_function_properties","group","idempotency","identity","integral_domain","inverse","left_distributes","linearity","monoid","no_nonzero_zero_divisors","nonzero_inverse","right_distributes","ring","semigroup","semiring","ArrayMap","ArraySet","EmptyMap","EmptySet","MapMapValues","MapValue","OptionMap","OptionSet","SingletonMap","SingletonSet","VecMap","VecSet","borrow","","","","","","","","","","borrow_mut","","","","","","","","","","clone","","","","","","","","","","clone_into","","","","","","","","","","clone_to_uninit","","","","","","","","","","cmp","","","","","","","","","","default","","","","deserialize","","","","","","","","eq","","","","","","","","","","equivalent","","","","","","","","","","","","","","","","","","","","fmt","","","","","","","","from","","","","","","","","","","","","","","","","","","","get","","","","","","","","","","get_key_value","","","","","get_key_value_mut","","","","","get_mut","","","","","","","","","hash","","","","","","","","","","into","","","","","","","","","","into_iter","","","","","","","","","","into_ref","","","","","","","","","","","","","","","is_empty","","iter","","","","","","","","","","","","","","iter_mut","","","","","","","","keys","","len","","","","","","","","","","map_values","","","","","new","partial_cmp","","","","","","","","","","serialize","","","","","","","","to_owned","","","","","","","","","","try_from","","","","","","","","","","try_into","","","","","","","","","","type_id","","","","","","","","","","upcast_item_mut","","","","","","","","","upcast_item_ref","","","","","","","","","","upcast_key_ref","","","","","vals","","GeneralizedHashTrieNode","Get","GhtGet","GhtInner","GhtLeaf","GhtPrefixIter","HEIGHT","Head","Item","KeyType","Schema","Storage","SuffixSchema","ValType","borrow","","borrow_mut","","clone","","clone_into","","clone_to_uninit","","colt","contains","","","","default","","drain","","","","eq","","equivalent","","find_containing_leaf","","","","fmt","","force","","force_drain","","from","","from_iter","","get","","","get_mut","","","height","insert","","","","into","","into_iter","","","","is_bot","","is_top","","iter","","","iter_tuples","","","lattice","macros","merge","","merge_node","","","","new_from","","","","partial_cmp","","prefix_iter","","","","recursive_iter","","","","test","to_owned","","try_from","","try_into","","type_id","","ColtForestNode","ColtGet","ColtGetTail","Force","Get","Head","Schema","Storage","SuffixSchema","force","force_drain","get","iter","merge","DeepJoinLatticeBimorphism","","GhtBimorphism","GhtCartesianProductBimorphism","GhtNodeKeyedBimorphism","GhtValTypeProductBimorphism","borrow","","","","borrow_mut","","","","call","","","","default","","","","from","","","","into","","","","new","","try_from","","","","try_into","","","","type_id","","","","KeyedBimorphism","MapUnion","MapUnionArrayMap","MapUnionBTreeMap","MapUnionHashMap","MapUnionOptionMap","MapUnionSingletonMap","MapUnionVec","as_reveal_mut","as_reveal_ref","atomize","borrow","","borrow_mut","","call","clone","clone_into","clone_to_uninit","deep_reveal","default","deserialize","eq","equivalent","","fmt","from","","into","","into_reveal","is_bot","is_top","lattice_from","merge","new","","new_from","partial_cmp","serialize","to_owned","try_from","","try_into","","type_id","","MapUnionHashMapWithTombstoneHashSet","MapUnionWithTombstones","MapUnionWithTombstonesSingletonMapOnly","MapUnionWithTombstonesTombstoneSingletonSetOnly","as_reveal_mut","as_reveal_ref","borrow","borrow_mut","clone","clone_into","clone_to_uninit","default","deserialize","eq","equivalent","","fmt","from","into","into_reveal","is_bot","is_top","lattice_from","merge","new","new_from","partial_cmp","serialize","to_owned","try_from","try_into","type_id","BinaryTrust","ConfidenceScore","Cost","Finite","FuzzyLogic","Infinity","Multiplicity","U32WithInfinity","add","","","","","borrow","","","","","","borrow_mut","","","","","","clone","clone_into","clone_to_uninit","default","eq","","equivalent","","fmt","","from","","","","","","into","","","","","","mul","","","","","new","","","","","one","","","","","to_owned","try_from","","","","","","try_into","","","","","","type_id","","","","","","zero","","","","","CartesianProductBimorphism","SetUnion","SetUnionArray","SetUnionBTreeSet","SetUnionHashSet","SetUnionOptionSet","SetUnionSingletonSet","SetUnionVec","as_reveal_mut","as_reveal_ref","atomize","borrow","","borrow_mut","","call","clone","clone_into","clone_to_uninit","deep_reveal","default","","deserialize","eq","equivalent","","fmt","from","","into","","into_reveal","is_bot","is_top","lattice_from","merge","new","new_from","partial_cmp","serialize","to_owned","try_from","","try_into","","type_id","","SetUnionWithTombstones","SetUnionWithTombstonesArray","SetUnionWithTombstonesBTreeSet","SetUnionWithTombstonesHashSet","SetUnionWithTombstonesOptionSet","SetUnionWithTombstonesSingletonSet","SetUnionWithTombstonesTombstoneOnlySet","SetUnionWithTombstonesVec","as_reveal_mut","as_reveal_ref","borrow","borrow_mut","clone","clone_into","clone_to_uninit","default","eq","equivalent","","fmt","from","into","into_reveal","is_bot","is_top","lattice_from","merge","new","new_from","partial_cmp","to_owned","try_from","try_into","type_id","cartesian_power","check_all","check_atomize_each","check_lattice_bimorphism","check_lattice_default_is_bot","check_lattice_is_bot","check_lattice_is_top","check_lattice_morphism","check_lattice_ord","check_lattice_properties","check_partial_ord_properties","UnionFind","UnionFindArrayMap","UnionFindBTreeMap","UnionFindHashMap","UnionFindOptionMap","UnionFindSingletonMap","UnionFindVec","as_reveal_mut","as_reveal_ref","atomize","borrow","borrow_mut","clone","clone_into","clone_to_uninit","deep_reveal","default","deserialize","eq","equivalent","","fmt","from","into","into_reveal","is_bot","is_top","lattice_from","merge","new","new_from","partial_cmp","same","serialize","to_owned","try_from","try_into","type_id","union"],"q":[[0,"lattices"],[426,"lattices::algebra"],[450,"lattices::collections"],[791,"lattices::ght"],[902,"lattices::ght::colt"],[916,"lattices::ght::lattice"],[960,"lattices::map_union"],[1007,"lattices::map_union_with_tombstones"],[1039,"lattices::semiring_application"],[1125,"lattices::set_union"],[1172,"lattices::set_union_with_tombstones"],[1206,"lattices::test"],[1217,"lattices::union_find"],[1256,"lattices::conflict"],[1257,"core::option"],[1258,"lattices::dom_pair"],[1259,"lattices::ord"],[1260,"lattices::pair"],[1261,"lattices::vec_union"],[1262,"alloc::vec"],[1263,"lattices::with_bot"],[1264,"lattices::with_top"],[1265,"core::iter::traits::iterator"],[1266,"core::clone"],[1267,"lattices::point"],[1268,"core::ops::function"],[1269,"core::cmp"],[1270,"core::default"],[1271,"core::result"],[1272,"serde::de"],[1273,"core::fmt"],[1274,"core::convert"],[1275,"serde::ser"],[1276,"core::any"],[1277,"alloc::string"],[1278,"cc_traits"],[1279,"core::marker"],[1280,"core::borrow"],[1281,"core::hash"],[1282,"variadics::variadic_collections"],[1283,"variadics"],[1284,"core::iter::traits::collect"],[1285,"cc_traits::non_alias"],[1286,"core::iter::traits::exact_size"],[1287,"core::cell"],[1288,"lattices_macro"]],"i":"`Bd0``````````````````````````C`Cb```Db`````Afd0`jnAbAd5AhAlAn65438210<10865438CdCh4328765:10432=<1`8765:04328765:04328765:0432``65`;8765:043276666666666666655555555555555:104328765:04328765:043288776655::004433228765:043287665:10432`8765:104328765:432Bf98777777777777777666666666666666;1543Gb:9888888888888888777777777777777<26549Bl;:98=3765``Gd<;:9>48760Gh0Gj>=<;Af7;:9?><07;:9GljnAbAd5>>>>=====`{{{b{{Af{c}}}}}{{Af{c}}}{AhAj}}{{{b{Al}}}Al}{{{b{{An{c}}}}}{{An{c}}}{AhAj}}{{{b{B`}}}B`}{{{b{Bb}}}Bb}{{b{b{dc}}}h{}}0000{bh}0000``{c{{j{{Af{e}}}}}l{BdAj}}{c{{j{Al}}}l}{c{{j{{An{e}}}}}l{BdAj}}{c{{j{B`}}}l}{c{{j{Bb}}}l}{{{b{{Af{c}}}}{b{{Af{c}}}}}Bf{BhAj}}{{{b{Al}}{b{Al}}}Bf}{{{b{{An{c}}}}{b{{An{c}}}}}Bf{BhAj}}{{{b{B`}}{b{B`}}}Bf}{{{b{Bb}}{b{Bb}}}Bf}{{b{b{c}}}Bf{}}000000000{{{b{{Af{c}}}}{b{dn}}}A`{AjAj}}{{{b{Al}}{b{dn}}}A`}{{{b{{An{c}}}}{b{dn}}}A`{AjAj}}{{{b{B`}}{b{dn}}}A`}{{{b{Bb}}{b{dn}}}A`}{cc{}}0000{{{b{{Af{c}}}}{b{de}}}h{BjAj}Bl}{{{b{Al}}{b{dc}}}hBl}{{{b{{An{c}}}}{b{de}}}h{BjAj}Bl}{{{b{Bb}}{b{dc}}}hBl}{{}c{}}0000```{{{b{{Af{c}}}}e}j{BnAj}Ab}{{{b{Al}}c}jAb}{{{b{{An{c}}}}e}j{BnAj}Ab}{{{b{B`}}c}jAb}{{{b{Bb}}c}jAb}`{bc{}}0000{c{{j{e}}}{}{}}0000{{}{{j{c}}}{}}0000{bAd}0000`","D":"Ah","p":[[1,"reference"],[0,"mut"],[6,"GossipOrIncrement",0],[1,"unit"],[6,"Result",125],[10,"Deserializer",126],[5,"Formatter",127],[8,"Result",127],[10,"Serializer",128],[5,"TypeId",129],[5,"Timestamped",20],[10,"Clone",130],[10,"Debug",127],[6,"TopolotreeMessage",20],[5,"Payload",20],[5,"OperationPayload",20],[5,"QueryResponse",20],[10,"Deserialize",126],[1,"bool"],[10,"PartialEq",131],[10,"Hash",132],[10,"Hasher",132],[10,"Serialize",128]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAHEABAAAAAsADgBDAFcAAwBgAB0A"}],["pn_delta",{"t":"PGPINNNNNNNNNHCNNNNNFFPPPFFGNNNNNNNNNNONNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOONNNNNONNNNNNNNNNNNNNNNNNNNO","n":["Gossip","GossipOrIncrement","Increment","NextStateType","borrow","borrow_mut","clone","clone_into","clone_to_uninit","deserialize","fmt","from","into","main","protocol","serialize","to_owned","try_from","try_into","type_id","OperationPayload","Payload","","Ping","Pong","QueryResponse","Timestamped","TopolotreeMessage","borrow","","","","","borrow_mut","","","","","change","clone","","","","","clone_into","","","","","clone_to_uninit","","","","","contents","data","deserialize","","","","","eq","","","","","equivalent","","","","","","","","","","fmt","","","","","from","","","","","hash","","","","into","","","","","key","","","serialize","","","","","timestamp","to_owned","","","","","try_from","","","","","try_into","","","","","type_id","","","","","value"],"q":[[0,"pn_delta"],[20,"pn_delta::protocol"],[125,"core::result"],[126,"serde::de"],[127,"core::fmt"],[128,"serde::ser"],[129,"core::any"],[130,"core::clone"],[131,"core::cmp"],[132,"core::hash"]],"i":"f`0`000000000``00000``Al00```Af1AnB`Bb34210134210342103421023342103421033442211003421034210342034210210342103342103421034210342100","f":"````{b{{b{c}}}{}}{{{b{d}}}{{b{dc}}}{}}{{{b{f}}}f}{{b{b{dc}}}h{}}{bh}{c{{j{f}}}l}{{{b{f}}{b{dn}}}A`}{cc{}}{{}c{}}{{}h}`{{{b{f}}c}jAb}{bc{}}{c{{j{e}}}{}{}}{{}{{j{c}}}{}}{bAd}````````>>>>>=====`{{{b{{Af{c}}}}}{{Af{c}}}{AhAj}}{{{b{Al}}}Al}{{{b{{An{c}}}}}{{An{c}}}{AhAj}}{{{b{B`}}}B`}{{{b{Bb}}}Bb}{{b{b{dc}}}h{}}0000{bh}0000``{c{{j{{Af{e}}}}}l{BdAj}}{c{{j{Al}}}l}{c{{j{{An{e}}}}}l{BdAj}}{c{{j{B`}}}l}{c{{j{Bb}}}l}{{{b{{Af{c}}}}{b{{Af{c}}}}}Bf{BhAj}}{{{b{Al}}{b{Al}}}Bf}{{{b{{An{c}}}}{b{{An{c}}}}}Bf{BhAj}}{{{b{B`}}{b{B`}}}Bf}{{{b{Bb}}{b{Bb}}}Bf}{{b{b{c}}}Bf{}}000000000{{{b{{Af{c}}}}{b{dn}}}A`{AjAj}}{{{b{Al}}{b{dn}}}A`}{{{b{{An{c}}}}{b{dn}}}A`{AjAj}}{{{b{B`}}{b{dn}}}A`}{{{b{Bb}}{b{dn}}}A`}{cc{}}0000{{{b{{Af{c}}}}{b{de}}}h{BjAj}Bl}{{{b{Al}}{b{dc}}}hBl}{{{b{{An{c}}}}{b{de}}}h{BjAj}Bl}{{{b{Bb}}{b{dc}}}hBl}{{}c{}}0000```{{{b{{Af{c}}}}e}j{BnAj}Ab}{{{b{Al}}c}jAb}{{{b{{An{c}}}}e}j{BnAj}Ab}{{{b{B`}}c}jAb}{{{b{Bb}}c}jAb}`{bc{}}0000{c{{j{e}}}{}{}}0000{{}{{j{c}}}{}}0000{bAd}0000`","D":"Ah","p":[[1,"reference"],[0,"mut"],[6,"GossipOrIncrement",0],[1,"unit"],[6,"Result",125],[10,"Deserializer",126],[5,"Formatter",127],[8,"Result",127],[10,"Serializer",128],[5,"TypeId",129],[5,"Timestamped",20],[10,"Clone",130],[10,"Debug",127],[6,"TopolotreeMessage",20],[5,"Payload",20],[5,"OperationPayload",20],[5,"QueryResponse",20],[10,"Deserialize",126],[1,"bool"],[10,"PartialEq",131],[10,"Hash",132],[10,"Hasher",132],[10,"Serialize",128]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAHEABAAAAAsADgBDAFcAAwBgAB0A"}],["pusherator",{"t":"FRRKRKKNNNCNCNCCCNNMCNNCNNCCCNMNCNCNNNNCNFNNNNNNNNNFFNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNFNNNNNNNNNFFNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNN","n":["InputBuild","Item","ItemOut","IteratorToPusherator","Output","Pusherator","PusheratorBuild","borrow","borrow_mut","default","demux","","filter","","filter_map","flatten","for_each","","from","give","inspect","","into","map","","new","null","partition","pivot","pull_to_push","push_to","","switch","","tee","","try_from","try_into","type_id","unzip","","Demux","borrow","borrow_mut","from","give","into","new","try_from","try_into","type_id","Filter","FilterBuild","borrow","","borrow_mut","","from","","give","into","","new","","push_to","try_from","","try_into","","type_id","","FilterMap","FilterMapBuild","borrow","","borrow_mut","","from","","give","into","","new","","push_to","try_from","","try_into","","type_id","","Flatten","FlattenBuild","borrow","","borrow_mut","","from","","give","into","","new","","push_to","try_from","","try_into","","type_id","","ForEach","borrow","borrow_mut","from","give","into","new","try_from","try_into","type_id","Inspect","InspectBuild","borrow","","borrow_mut","","from","","give","into","","new","","push_to","try_from","","try_into","","type_id","","Map","MapBuild","borrow","","borrow_mut","","from","","give","into","","new","","push_to","try_from","","try_into","","type_id","","Null","borrow","borrow_mut","clone","clone_into","clone_to_uninit","default","from","give","into","new","to_owned","try_from","try_into","type_id","Partition","PartitionBuild","borrow","","borrow_mut","","from","","give","into","","new","","push_to","try_from","","try_into","","type_id","","Pivot","PivotBuild","borrow","","borrow_mut","","from","","into","","new","","push_to","run","step","try_from","","try_into","","type_id","","Switch","SwitchBuild","borrow","","borrow_mut","","from","","give","into","","new","","push_to","try_from","","try_into","","type_id","","Tee","TeeBuild","borrow","","borrow_mut","","from","","give","into","","new","","push_to","try_from","","try_into","","type_id","","Unzip","UnzipBuild","borrow","","borrow_mut","","from","","give","into","","new","","push_to","try_from","","try_into","","type_id",""],"q":[[0,"pusherator"],[41,"pusherator::demux"],[51,"pusherator::filter"],[71,"pusherator::filter_map"],[91,"pusherator::flatten"],[111,"pusherator::for_each"],[121,"pusherator::inspect"],[141,"pusherator::map"],[161,"pusherator::null"],[176,"pusherator::partition"],[196,"pusherator::pivot"],[217,"pusherator::switch"],[237,"pusherator::tee"],[257,"pusherator::unzip"],[277,"core::ops::function"],[278,"core::result"],[279,"core::any"],[280,"core::option"],[281,"core::iter::traits::collect"],[282,"core::clone"],[283,"core::iter::traits::iterator"],[284,"either"]],"i":"`Afl`0``f00`1`1```102`10`10```An21`2`2111`2`Bl00000000``BnA`1010110100101010``C`Cd1010110100101010``CfCj1010110100101010`Cl00000000``CnAj1010110100101010``D`Al1010110100101010`Db0000000000000``DfDh1010110100101010``DjB`10101010011101010``DnBb1010110100101010``EbBd1010110100101010``EdBj1010110100101010","f":"```````{b{{b{c}}}{}}{{{b{d}}}{{b{dc}}}{}}{{}{{f{c}}}{}}`{{{l{}{{h{c}}{j{e}}}}ig}e{}{}{}{{n{c{b{dg}}}}}}`{{{l{}{{h{c}}{j{e}}}}g}{{A`{{l{}{{h{c}}{j{e}}}}g}}}{}{}{{n{{b{c}}}{{j{Ab}}}}}}```{{{l{}{{h{c}}{j{e}}}}g}e{}{}{{n{c}}}}{cc{}}{{{b{d{Af{}{{Ad{c}}}}}}c}Ah{}}`{{{l{}{{h{c}}{j{e}}}}g}{{Aj{{l{}{{h{c}}{j{e}}}}g}}}{}{}{{n{{b{c}}}}}}{{}c{}}`{{{l{}{{h{c}}{j{e}}}}i}{{Al{{l{}{{h{c}}{j{e}}}}i}}}{}{}{}{{n{c}{{j{g}}}}}}8```{An{{B`{An}}}}{{{l{}{{h{c}}{j{e}}}}g}e{}{}{{Af{}{{Ad{c}}}}}}{{{f{c}}g}i{}{}{{Af{}{{Ad{e}}}}}{}}`{{{l{}{{h{c}}{j{e}}}}g}{{Bb{{l{}{{h{c}}{j{e}}}}g}}}{}{}Af}`{{{l{}{{h{c}}{j{e}}}}g}{{Bd{{l{}{{h{c}}{j{e}}}}g}}}{}{}{{Af{}{{Ad{c}}}}}}{c{{Bf{e}}}{}{}}{{}{{Bf{c}}}{}}{bBh}`{{{l{}{{h{c}}{j{e}}}}g}{{Bj{{l{}{{h{c}}{j{e}}}}g}}}{}{}Af}`{b{{b{c}}}{}}{{{b{d}}}{{b{dc}}}{}}?{{{b{d{Bl{gec}}}}i}Ah{}{}{{n{c{b{de}}}}}{}}={{ge}{{Bl{gec}}}{}{}{{n{c{b{de}}}}}}765``3322{cc{}}0{{{b{d{Bn{ce}}}}g}AhAf{{n{b}{{j{Ab}}}}}{}}{{}c{}}0{{ce}{{Bn{ec}}}{{n{b}{{j{Ab}}}}}Af}{{ce}{{A`{ce}}}l{{n{b}{{j{Ab}}}}}}{{{A`{ce}}i}kl{{n{b}{{j{Ab}}}}}{}{{Af{}{{Ad{g}}}}}{}}==<<;;``998855{{{b{d{C`{cge}}}}i}AhAf{}{{n{e}{{j{Cb}}}}}{}}44{{eg}{{C`{gec}}}{}{{n{c}{{j{Cb}}}}}Af}{{cg}{{Cd{cg}}}l{}{{n{}{{j{{Cb{e}}}}}}}}{{{Cd{cg}}k}ml{}{{n{}{{j{{Cb{e}}}}}}}{}{{Af{}{{Ad{i}}}}}{}}{c{{Bf{e}}}{}{}}0{{}{{Bf{c}}}{}}0{bBh}0``{b{{b{c}}}{}}0{{{b{d}}}{{b{dc}}}{}}0>>{{{b{d{Cf{ce}}}}g}Ah{{Af{}{{Ad{}}}}}Ch{}}=={c{{Cf{ce}}}{{Af{}{{Ad{}}}}}Ch}{c{{Cj{c}}}l}{{{Cj{c}}g}il{}{{Af{}{{Ad{e}}}}}{}}887766`54{cc{}}{{{b{d{Cl{ec}}}}g}Ah{}{{n{c}}}{}}{{}c{}}{e{{Cl{ec}}}{}{{n{c}}}}<;:``998833{{{b{d{Cn{ce}}}}g}AhAf{{n{b}}}{}}22{{ce}{{Cn{ec}}}{{n{b}}}Af}{{ce}{{Aj{ce}}}l{{n{b}}}}{{{Aj{ce}}i}kl{{n{b}}}{}{{Af{}{{Ad{g}}}}}{}}{c{{Bf{e}}}{}{}}0{{}{{Bf{c}}}{}}0{bBh}0``{b{{b{c}}}{}}0{{{b{d}}}{{b{dc}}}{}}0<<{{{b{d{D`{cge}}}}i}AhAf{}{{n{e}{{j{}}}}}{}};;{{eg}{{D`{gec}}}{}{{n{c}{{j{}}}}}Af}{{cg}{{Al{cg}}}l{}{{n{}{{j{e}}}}}}{{{Al{cg}}k}ml{}{{n{}{{j{e}}}}}{}{{Af{}{{Ad{i}}}}}{}}887766`54{{{b{{Db{c}}}}}{{Db{c}}}Dd}{{b{b{dc}}}Ah{}}{bAh}{{}{{Db{c}}}{}}{cc{}}{{{b{d{Db{c}}}}e}Ah{}{}}{{}c{}}3{bc{}}{c{{Bf{e}}}{}{}}{{}{{Bf{c}}}{}}{bBh}``{b{{b{c}}}{}}0{{{b{d}}}{{b{dc}}}{}}088{{{b{d{Df{ceg}}}}i}AhAf{{Af{}{{Ad{}}}}}{{n{b}{{j{Ab}}}}}{}}77{{ceg}{{Df{egc}}}{{n{b}{{j{Ab}}}}}Af{{Af{}{{Ad{}}}}}}{{ceg}{{Dh{ceg}}}l{{Af{}{{Ad{}}}}}{{n{b}{{j{Ab}}}}}}{{{Dh{ceg}}k}ml{{Af{}{{Ad{}}}}}{{n{b}{{j{Ab}}}}}{}{{Af{}{{Ad{i}}}}}{}}887766``5544<<::{{ce}{{Dj{ce}}}Dl{{Af{}{{Ad{}}}}}}{c{{B`{c}}}Dl}{{{B`{c}}g}iDl{}{{Af{}{{Ad{e}}}}}{}}{{{Dj{ce}}}AhDl{{Af{}{{Ad{}}}}}}{{{b{d{Dj{ce}}}}}AbDl{{Af{}{{Ad{}}}}}}==<<;;``::99{cc{}}0{{{b{d{Dn{ce}}}}g}AhAfAf{}}{{}c{}}0{{ce}{{Dn{ce}}}AfAf}{{eg}{{Bb{eg}}}{}{{l{}{{h{{E`{c}}}}}}}Af}{{{Bb{eg}}k}m{}{{l{}{{h{{E`{c}}}}}}}Af{}{{Af{}{{Ad{i}}}}}{}}{c{{Bf{e}}}{}{}}0{{}{{Bf{c}}}{}}0{bBh}0``{b{{b{c}}}{}}0{{{b{d}}}{{b{dc}}}{}}0::{{{b{d{Eb{ce}}}}g}AhAf{{Af{}{{Ad{}}}}}{}}99{{ce}{{Eb{ce}}}Af{{Af{}{{Ad{}}}}}}{{ce}{{Bd{ce}}}l{{Af{}{{Ad{}}}}}}{{{Bd{ce}}i}kl{{Af{}{{Ad{}}}}}{}{{Af{}{{Ad{g}}}}}{}}887766``5544>>{{{b{d{Ed{ce}}}}g}AhAfAf{}}=={{ce}{{Ed{ce}}}AfAf}{{eg}{{Bj{eg}}}{}{{l{}{{h{{Ef{c}}}}}}}Af}{{{Bj{eg}}k}m{}{{l{}{{h{{Ef{c}}}}}}}Af{}{{Af{}{{Ad{i}}}}}{}}<<;;::","D":"Fb","p":[[1,"reference"],[0,"mut"],[5,"InputBuild",0],[17,"ItemOut"],[17,"Output"],[10,"PusheratorBuild",0],[10,"FnMut",277],[5,"FilterBuild",51],[1,"bool"],[17,"Item"],[10,"Pusherator",0],[1,"unit"],[5,"InspectBuild",121],[5,"MapBuild",141],[10,"IteratorToPusherator",0],[5,"PivotBuild",196],[5,"SwitchBuild",217],[5,"TeeBuild",237],[6,"Result",278],[5,"TypeId",279],[5,"UnzipBuild",257],[5,"Demux",41],[5,"Filter",51],[5,"FilterMap",71],[6,"Option",280],[5,"FilterMapBuild",71],[5,"Flatten",91],[10,"IntoIterator",281],[5,"FlattenBuild",91],[5,"ForEach",111],[5,"Inspect",121],[5,"Map",141],[5,"Null",161],[10,"Clone",282],[5,"Partition",176],[5,"PartitionBuild",176],[5,"Pivot",196],[10,"Iterator",283],[5,"Switch",217],[6,"Either",284],[5,"Tee",237],[5,"Unzip",257],[1,"tuple"]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAOQAHAABABEAFAACABgAFAAuAAAAMAAJADwAAAA/AA4AUAAAAFMADgBkAAAAZwALAHQAAAB2AAkAggAAAIUADgCWAAAAmQAPAKoAAACsAAoAuQAAALwADgDPABAA4gAAAOUADgD2AAAA+QAOAAoBAAANAQgA"}],["relalg",{"t":"PPGPPPPGPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["Bool","ColRef","Datum","Eq","Int","Literal","Plus","ScalarExpr","String","borrow","","borrow_mut","","clone","","clone_into","","clone_to_uninit","","eq","","equivalent","","","","eval","fmt","","from","","hash","","into","","is_true","span","to_owned","","to_tokens","try_from","","try_into","","type_id",""],"q":[[0,"relalg"],[45,"core::fmt"],[46,"core::hash"],[47,"proc_macro2"],[48,"core::result"],[49,"core::any"]],"i":"fh`0100`1101010101010110001010101010100101010","f":"`````````{b{{b{c}}}{}}0{{{b{d}}}{{b{dc}}}{}}0{{{b{f}}}f}{{{b{h}}}h}{{b{b{dc}}}j{}}0{bj}0{{{b{f}}{b{f}}}l}{{{b{h}}{b{h}}}l}{{b{b{c}}}l{}}000{{{b{h}}{b{{n{f}}}}}f}{{{b{f}}{b{dA`}}}Ab}{{{b{h}}{b{dA`}}}Ab}{cc{}}0{{{b{f}}{b{dc}}}jAd}{{{b{h}}{b{dc}}}jAd}{{}c{}}0{{{b{f}}}l}{bAf}{bc{}}0{{{b{h}}{b{dAh}}}j}{c{{Aj{e}}}{}{}}0{{}{{Aj{c}}}{}}0{bAl}0","D":"h","p":[[1,"reference"],[0,"mut"],[6,"Datum",0],[6,"ScalarExpr",0],[1,"unit"],[1,"bool"],[1,"slice"],[5,"Formatter",45],[8,"Result",45],[10,"Hasher",46],[5,"Span",47],[5,"TokenStream",47],[6,"Result",48],[5,"TypeId",49]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAACkAAwAAABwAHwABACMACgA="}],["stageleft",{"t":"FKKQKKKFNNNNNNNNMNXNNCNNNQHQXCNNNNNNNNNNNNQQNNXNNNNNNIFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNEEQNNNNNENNNNNNNNNNNKKFRKNNNNNHHHHHNHNMHNMNNNNHNNN","n":["BorrowBounds","IntoQuotedMut","IntoQuotedOnce","PATH_SEPARATOR","Quoted","QuotedContext","QuotedWithContext","RuntimeData","borrow","","borrow_mut","","boxed","clone","clone_into","clone_to_uninit","create","","entry","from","","internal","into","","new","q","quote_type","quse_fn","runtime","runtime_support","splice_fn0","splice_fn0_ctx","splice_fn1","splice_fn1_borrow","splice_fn1_borrow_ctx","splice_fn1_ctx","splice_fn2_borrow_mut","splice_fn2_borrow_mut_ctx","splice_typed","splice_typed_ctx","splice_untyped","splice_untyped_ctx","stageleft_crate","stageleft_no_entry_crate","to_owned","to_tokens","top_level_mod","try_from","","try_into","","type_id","","CaptureVec","Span","TokenStream","append","append_all","append_separated","append_terminated","borrow","","borrow_mut","","byte_range","call_site","clone","","clone_into","","clone_to_uninit","","default","end","extend","","fmt","","","from","","","","","from_iter","","from_str","into","","into_iter","into_token_stream","is_empty","join","located_at","mixed_site","new","parse","proc_macro2","proc_macro_crate","quote","resolved_at","source_text","span","","start","syn","to_owned","","to_string","to_tokens","try_from","","try_into","","type_id","","unwrap","FreeVariable","FreeVariableWithContext","Import","O","ParseFromLiteral","borrow","borrow_mut","clone","clone_into","clone_to_uninit","create_import","fn0_type_hint","fn1_borrow_type_hint","fn1_type_hint","fn2_borrow_mut_type_hint","from","get_final_crate_name","into","parse_from_literal","set_macro_to_crate","to_owned","to_tokens","","","try_from","try_into","type_hint","type_id","uninitialized",""],"q":[[0,"stageleft"],[53,"stageleft::internal"],[117,"stageleft::runtime_support"],[147,"alloc::boxed"],[148,"core::marker"],[149,"syn::ty"],[150,"syn::expr"],[151,"proc_macro2"],[152,"core::option"],[153,"core::result"],[154,"core::any"],[155,"core::convert"],[156,"core::iter::traits::collect"],[157,"quote::to_tokens"],[158,"core::ops::range"],[159,"proc_macro2::location"],[160,"core::fmt"],[161,"proc_macro"],[162,"proc_macro2::token_stream"],[163,"syn::parse"],[164,"syn::error"],[165,"alloc::string"],[166,"core::ops::function"],[167,"stageleft_macro"],[168,"stageleft::type_name"],[169,"quote"]],"i":"````````Abj10f111A`3`32`322`````Ah00000000000``33`434343```Al0000Bn10001010101011110111001111011100011```00100`10111010100```Ef`Dl0000`````0`0Eb`12Eh222`230","f":"````````{b{{b{c}}}{}}0{{{b{d}}}{{b{dc}}}{}}0{f{{h{f}}}}{{{b{{j{c}}}}}{{j{c}}}l}{{b{b{dc}}}n{}}{bn}{{}A`}{{}Ab}`{cc{}}0`{{}c{}}0{{{b{Ad}}}{{j{c}}}{}}`{{}Af}```{AhAj}{{Ah{b{c}}}Aj{}}1100101010``{bc{}}{{{j{c}}{b{e}}}{{B`{{An{Al}}{An{Al}}}}}{}{}}`{c{{Bb{e}}}{}{}}0{{}{{Bb{c}}}{}}0{bBd}0```{{{b{dAl}}c}n{{Bh{Bf}}}}{{{b{dAl}}c}nBj}{{{b{dAl}}ce}nBjBl}0{b{{b{c}}}{}}0{{{b{d}}}{{b{dc}}}{}}0{{{b{Bn}}}{{Cb{C`}}}}{{}Bn}{{{b{Al}}}Al}{{{b{Bn}}}Bn}{{b{b{dc}}}n{}}0{bn}0{{}Al}{{{b{Bn}}}Cd}{{{b{dAl}}c}n{{Bj{}{{Cf{Al}}}}}}{{{b{dAl}}c}n{{Bj{}{{Cf{Bf}}}}}}{{{b{Al}}{b{dCh}}}{{Bb{nCj}}}}0{{{b{Bn}}{b{dCh}}}{{Bb{nCj}}}}{BfAl}{ClAl}{cc{}}0{CnBn}{cAl{{Bj{}{{Cf{Al}}}}}}{cAl{{Bj{}{{Cf{Bf}}}}}}{{{b{Ad}}}{{Bb{AlD`}}}}{{}c{}}0{AlDb}{AlAl}{{{b{Al}}}Dd}{{{b{Bn}}Bn}{{An{Bn}}}}{{{b{Bn}}Bn}Bn}{{}Bn}{{}Al}{{{b{Df}}}{{Bb{AlDh}}}}```3{{{b{Bn}}}{{An{Dj}}}}{bBn}0{{{b{Bn}}}Cd}`{bc{}}0{bDj}{{{b{Al}}{b{dAl}}}n}{c{{Bb{e}}}{}{}}0{{}{{Bb{c}}}{}}0{bBd}0{BnCn}`````{b{{b{c}}}{}}{{{b{d}}}{{b{dc}}}{}}{{{b{{Dl{c}}}}}{{Dl{c}}}{}}{{b{b{dc}}}n{}}{bn}{{{b{Ad}}{b{Ad}}{b{Ad}}{b{Ad}}c}{{Dl{c}}}{}}{e{{`{{E`{}{{Dn{c}}}}}}}{}{{E`{}{{Dn{c}}}}}}{g{{`{{E`{{b{c}}}{{Dn{e}}}}}}}{}{}{{E`{{b{c}}}{{Dn{e}}}}}}{g{{`{{E`{c}{{Dn{e}}}}}}}{}{}{{E`{c}{{Dn{e}}}}}}{i{{`{{E`{{b{dc}}e}{{Dn{g}}}}}}}{}{}{}{{E`{{b{dc}}e}{{Dn{g}}}}}}{cc{}}{{{b{Ad}}}Al}{{}c{}}{{{b{Aj}}}Eb}{{{b{Ad}}{b{Ad}}}n}{bc{}}{{{Ef{}{{Ed{c}}}}{b{e}}}{{B`{{An{Al}}{An{Al}}}}}{}{}}{Eh{{B`{{An{Al}}{An{Al}}}}}}{{{Dl{c}}{b{e}}}{{B`{{An{Al}}{An{Al}}}}}{}{}}{c{{Bb{e}}}{}{}}{{}{{Bb{c}}}{}}:{bBd}{{{b{{Ef{}{{Ed{c}}}}}}{b{e}}}c{}{}}{{{b{Eh}}}c{}}","D":"Cn","p":[[1,"reference"],[0,"mut"],[10,"IntoQuotedOnce",0],[5,"Box",147],[5,"RuntimeData",0],[10,"Copy",148],[1,"unit"],[10,"QuotedContext",0],[5,"BorrowBounds",0],[1,"str"],[6,"Type",149],[10,"QuotedWithContext",0],[6,"Expr",150],[5,"TokenStream",53,151],[6,"Option",152],[1,"tuple"],[6,"Result",153],[5,"TypeId",154],[6,"TokenTree",151],[10,"Into",155],[10,"IntoIterator",156],[10,"ToTokens",157],[5,"Span",53,151],[1,"usize"],[5,"Range",158],[5,"LineColumn",159],[17,"Item"],[5,"Formatter",160],[5,"Error",160],[5,"TokenStream",161],[5,"Span",161],[5,"LexError",151],[5,"IntoIter",162],[1,"bool"],[5,"ParseBuffer",163],[5,"Error",164],[5,"String",165],[5,"Import",117],[17,"Output"],[10,"Fn",166],[10,"ParseFromLiteral",117],[17,"O"],[10,"FreeVariableWithContext",117],[10,"FreeVariable",117]],"r":[[18,167],[25,167],[26,168],[27,167],[28,167],[46,167],[54,151],[55,151],[99,169]],"b":[[74,"impl-Extend%3CTokenStream%3E-for-TokenStream"],[75,"impl-Extend%3CTokenTree%3E-for-TokenStream"],[76,"impl-Display-for-TokenStream"],[77,"impl-Debug-for-TokenStream"],[79,"impl-From%3CTokenTree%3E-for-TokenStream"],[80,"impl-From%3CTokenStream%3E-for-TokenStream"],[84,"impl-FromIterator%3CTokenStream%3E-for-TokenStream"],[85,"impl-FromIterator%3CTokenTree%3E-for-TokenStream"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAHQAEgAAAAcACQAJABYAAAAZAAAAHAAAAB4AEAAwAAYAOQAHAEMABgBLAAYAVAADAFoAAQBhAAIAZwABAGoACgB2AA4AhgAAAIgACwA="}],["stageleft_macro",{"t":"XQQXX","n":["entry","q","quse_fn","runtime","top_level_mod"],"q":[[0,"stageleft_macro"]],"i":"`````","f":"`````","D":"h","p":[],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OjAAAAEAAAAAAAEAEAAAAAAAAwA="}],["stageleft_test",{"t":"","n":[],"q":[],"i":"","f":"","D":"`","p":[],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OjAAAAEAAAAAAAAAEAAAAAAA"}],["stageleft_test_macro",{"t":"QQQQQ","n":["macro_1D9EA688BDAD0220DDA345911DFF2BB6E8E5BC4E77EB90CFF313F1173FBAAC76","macro_38E565FEA38AC41C54ADE66EC4DE63627AE67920289C47F17E15FA5CAA51AA09","macro_6FDA8B564870A142D5552754F23D11EF7BE0CAEA91248C97E1841A1AD9B21FDC","macro_7FF6C2F30B0514D172E87E4B147CF7B9E2B5E5229D8E85C40921FBDF8FC88ED4","macro_F4D078123B8339975043C45164DA8B763897C4A8742B7DFFC5D753F1FE929448"],"q":[[0,"stageleft_test_macro"]],"i":"`````","f":"`````","D":"`","p":[],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAAUAAQAAAAUA"}],["stageleft_tool",{"t":"QHHH","n":["gen_final","gen_final_helper","gen_macro","gen_staged_trybuild"],"q":[[0,"stageleft_tool"],[4,"std::path"],[5,"alloc::string"],[6,"syn::file"]],"i":"````","f":"`{{}b}{{{f{d}}{f{h}}}b}{{{f{d}}jl}n}","D":"`","p":[[1,"unit"],[5,"Path",4],[1,"reference"],[1,"str"],[5,"String",5],[1,"bool"],[5,"File",6]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OjAAAAEAAAAAAAQAEAAAAAAAAQACAAMABAA="}],["topolotree",{"t":"IFINNNNNNNNNNNNNHCHNNNNNFFPPPFFGNNNNNNNNNNONNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOONNNNNONNNNNNNNNNNNNNNNNNNNO","n":["ContributionAgg","NodeId","PostNeighborJoin","borrow","borrow_mut","clone","clone_into","clone_to_uninit","eq","equivalent","","fmt","","from","hash","into","main","protocol","run_topolotree","to_owned","to_string","try_from","try_into","type_id","OperationPayload","Payload","","Ping","Pong","QueryResponse","Timestamped","TopolotreeMessage","borrow","","","","","borrow_mut","","","","","change","clone","","","","","clone_into","","","","","clone_to_uninit","","","","","contents","data","deserialize","","","","","eq","","","","","equivalent","","","","","","","","","","fmt","","","","","from","","","","","hash","","","","into","","","","","key","","","serialize","","","","","timestamp","to_owned","","","","","try_from","","","","","try_into","","","","","type_id","","","","","value"],"q":[[0,"topolotree"],[24,"topolotree::protocol"],[129,"core::fmt"],[130,"core::hash"],[131,"alloc::vec"],[132,"bytes::bytes"],[133,"tokio::sync::mpsc::unbounded"],[134,"hydroflow::scheduled::graph"],[135,"bytes::bytes_mut"],[136,"std::io::error"],[137,"core::result"],[138,"futures_core::stream"],[139,"core::marker"],[140,"alloc::string"],[141,"core::any"],[142,"core::clone"],[143,"serde::de"],[144,"core::cmp"],[145,"serde::ser"]],"i":"```f000000000000```00000``Cd00```Bn1CfChCj34210134210342103421023342103421033442211003421034210342034210210342103342103421034210342100","f":"```{b{{b{c}}}{}}{{{b{d}}}{{b{dc}}}{}}{{{b{f}}}f}{{b{b{dc}}}h{}}{bh}{{{b{f}}{b{f}}}j}{{b{b{c}}}j{}}0{{{b{f}}{b{dl}}}n}0{cc{}}{{{b{f}}{b{dc}}}hA`}{{}c{}}{{}h}`{{{Ad{Ab}}ce{Aj{{Ah{AbAf}}}}{Aj{Af}}}Al{{Bf{}{{An{{Bd{{Ah{AbB`}}Bb}}}}}}Bh}{{Bf{}{{An{{Bd{B`Bb}}}}}}Bh}}{bc{}}{bBj}{c{{Bd{e}}}{}{}}{{}{{Bd{c}}}{}}{bBl}````````{b{{b{c}}}{}}0000{{{b{d}}}{{b{dc}}}{}}0000`{{{b{{Bn{c}}}}}{{Bn{c}}}{C`Cb}}{{{b{Cd}}}Cd}{{{b{{Cf{c}}}}}{{Cf{c}}}{C`Cb}}{{{b{Ch}}}Ch}{{{b{Cj}}}Cj}{{b{b{dc}}}h{}}0000{bh}0000``{c{{Bd{{Bn{e}}}}}Cl{CnCb}}{c{{Bd{Cd}}}Cl}{c{{Bd{{Cf{e}}}}}Cl{CnCb}}{c{{Bd{Ch}}}Cl}{c{{Bd{Cj}}}Cl}{{{b{{Bn{c}}}}{b{{Bn{c}}}}}j{D`Cb}}{{{b{Cd}}{b{Cd}}}j}{{{b{{Cf{c}}}}{b{{Cf{c}}}}}j{D`Cb}}{{{b{Ch}}{b{Ch}}}j}{{{b{Cj}}{b{Cj}}}j}{{b{b{c}}}j{}}000000000{{{b{{Bn{c}}}}{b{dl}}}n{CbCb}}{{{b{Cd}}{b{dl}}}n}{{{b{{Cf{c}}}}{b{dl}}}n{CbCb}}{{{b{Ch}}{b{dl}}}n}{{{b{Cj}}{b{dl}}}n}{cc{}}0000{{{b{{Bn{c}}}}{b{de}}}h{DbCb}A`}{{{b{Cd}}{b{dc}}}hA`}{{{b{{Cf{c}}}}{b{de}}}h{DbCb}A`}{{{b{Cj}}{b{dc}}}hA`}{{}c{}}0000```{{{b{{Bn{c}}}}e}Bd{DdCb}Df}{{{b{Cd}}c}BdDf}{{{b{{Cf{c}}}}e}Bd{DdCb}Df}{{{b{Ch}}c}BdDf}{{{b{Cj}}c}BdDf}`{bc{}}0000{c{{Bd{e}}}{}{}}0000{{}{{Bd{c}}}{}}0000{bBl}0000`","D":"Ah","p":[[1,"reference"],[0,"mut"],[5,"NodeId",0],[1,"unit"],[1,"bool"],[5,"Formatter",129],[8,"Result",129],[10,"Hasher",130],[1,"u32"],[5,"Vec",131],[5,"Bytes",132],[1,"tuple"],[5,"UnboundedSender",133],[5,"Hydroflow",134],[17,"Item"],[5,"BytesMut",135],[5,"Error",136],[6,"Result",137],[10,"Stream",138],[10,"Unpin",139],[5,"String",140],[5,"TypeId",141],[5,"Timestamped",24],[10,"Clone",142],[10,"Debug",129],[6,"TopolotreeMessage",24],[5,"Payload",24],[5,"OperationPayload",24],[5,"QueryResponse",24],[10,"Deserializer",143],[10,"Deserialize",143],[10,"PartialEq",144],[10,"Hash",130],[10,"Serialize",145],[10,"Serializer",145]],"r":[],"b":[[11,"impl-Display-for-NodeId"],[12,"impl-Debug-for-NodeId"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAHUABQAAAA0ADwAAABEARABbAAMAZAAdAA=="}],["variadics",{"t":"RRKKRKRKRRRRRRTRKKRRKRKKRRRKKKMMMMMMMMMMMMMMMNMMNMMMMMMMMMQQQCQMFRKFFFKKNNNNNNNNNNNNNNNNNNNNMNNNNNNMNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNMNNNMNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["AsMutVar","AsRefVar","CloneVariadic","CopyRefVariadic","Drain","EitherRefVariadic","Extend","HomogenousVariadic","IntoIter","IntoOption","IntoVec","IntoZip","IterAnyMut","IterAnyRef","LEN","MutVar","MutVariadic","PartialEqVariadic","Prefix","RefVar","RefVariadic","Reverse","Split","SplitBySuffix","Suffix","UnRefVar","UnVec","Variadic","VariadicExt","VecVariadic","as_mut_var","as_ref_var","clone_ref_var","copy_var","drain","eq","eq_ref","extend","get","","get_mut","into_iter","into_option","into_singleton_vec","into_zip","is_empty","iter_any_mut","iter_any_ref","len","mut_to_ref","push","reverse","reverse_ref","split","split_by_suffix","split_by_suffix_ref","split_ref","unref_ref","var_args","var_expr","var_type","variadic_collections","variadic_trait","zip_vecs","DuplicateCounted","Schema","VariadicCollection","VariadicColumnMultiset","VariadicCountedHashSet","VariadicHashSet","VariadicMultiset","VariadicSet","borrow","","","","borrow_mut","","","","clone","","","","clone_into","","","","clone_to_uninit","","","","contains","","","","default","","","drain","","","","eq","","extend","","","fmt","","","from","","","","from_iter","","get","","insert","","","","into","","","","into_iter","","","","is_empty","","","","iter","","","","len","","","","new","","","next","to_owned","","","","try_from","","","","try_into","","","","type_id","","","","with_capacity_and_hasher","","with_hasher",""],"q":[[0,"variadics"],[64,"variadics::variadic_collections"],[167,"core::iter::traits::iterator"],[168,"core::default"],[169,"core::ops::range"],[170,"core::clone"],[171,"core::option"],[172,"core::cmp"],[173,"core::hash"],[174,"core::iter::traits::collect"],[175,"core::fmt"],[176,"core::result"],[177,"core::any"]],"i":"Ad0``Bh`1`D`221222Dd``E`1`4``Dj24```55BlBn6Cj0867668878888578834435`````7`F```````EbEdEfEh3210321032103210432032043203232032032103232432032103210432043204320320132103210321032103232","f":"``````````````````````````````{{{Af{b{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}}iAdAd{{An{}{{Ah{}}{Aj{}}{Al{}}}}}{{B`{}{{Ah{}}{Aj{}}{Al{}}}}}{{Bd{}{{Bb{}}}}}{{Bd{}{{Bb{}}}}}{}{{Bh{}{{Bf{}}}}Bj}}{{{Af{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}}gAdAd{{An{}{{Ah{}}{Aj{}}{Al{}}}}}{{B`{}{{Ah{}}{Aj{}}{Al{}}}}}{{Bd{}{{Bb{}}}}}{{Bd{}{{Bb{}}}}}{}{{Bh{}{{Bf{}}}}Bj}}{cBl{}}{{{Af{Bn}}}c{}}{{{Af{b{Bh{}{{Bf{c}}{C`{e}}{Cb{g}}}}}}i}g{{Ad{}{{Ab{}}}}}{{Bd{}{{Bb{}}}}}{{Bd{}{{Bb{}}}}}{{Cf{Cd}}Ch}}{{{Af{Cj}}{Af{Cj}}}Cl}{{cc}Cl{}}{{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}Ac}cAdAd{{An{}{{Ah{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}{Aj{g}}{Al{i}}}}}{{B`{}{{Ah{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}{Aj{g}}{Al{i}}}}}{{Bd{}{{Bb{Af}}}}}{{Bd{}{{Bb{{Af{b}}}}}}}{}{{Bh{}{{Bf{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}}}Bj}Ad}{{{Af{{D`{}{{Cn{c}}}}}}Cd}{{Db{{Af{e}}}}}{{Bd{}{{Bb{e}}}}}{}}{{{Af{b{Bh{}{{Bf{c}}{C`{e}}{Cb{g}}}}}}Cd}Db{{Ad{}{{Ab{}}}}}{{Bd{}{{Bb{}}}}}{{Bd{}{{Bb{}}}}}}{{{Af{b{D`{}{{Cn{c}}}}}}Cd}{{Db{{Af{be}}}}}{{Bd{}{{Bb{e}}}}}{}}{{{D`{}{{Cn{c}}}}}c{{Bd{}{{Bb{e}}}}}{}}{{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}oAdAd{{An{}{{Ah{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}{Aj{g}}{Al{i}}}}}{{B`{}{{Ah{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}{Aj{g}}{Al{i}}}}}{{Bd{}{{Bb{Af}}}}}{{Bd{}{{Bb{{Af{b}}}}}}}{}{{Bh{}{{Bf{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}}}Bj}}{{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}AaAdAd{{An{}{{Ah{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}{Aj{g}}{Al{i}}}}}{{B`{}{{Ah{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}{Aj{g}}{Al{i}}}}}{{Bd{}{{Bb{Af}}}}}{{Bd{}{{Bb{{Af{b}}}}}}}{}{{Bh{}{{Bf{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}}}Bj}}{{{Bh{}{{Bf{c}}{C`{e}}{Cb{g}}}}}e{{Ad{}{{Ab{{Bh{}{{Bf{c}}{C`{e}}{Cb{g}}}}}}}}}{{Bd{}{{Bb{c}}}}}{{Bd{}{{Bb{c}}}}}}{{{Af{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}}ClAdAd{{An{}{{Ah{}}{Aj{}}{Al{}}}}}{{B`{}{{Ah{}}{Aj{}}{Al{}}}}}{{Bd{}{{Bb{}}}}}{{Bd{}{{Bb{}}}}}{}{{Bh{}{{Bf{}}}}Bj}}{{{Af{b{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}}mAdAd{{An{}{{Ah{}}{Aj{}}{Al{}}}}}{{B`{}{{Ah{}}{Aj{}}{Al{}}}}}{{Bd{}{{Bb{}}}}}{{Bd{}{{Bb{}}}}}{}{{Bh{}{{Bf{}}}}Bj}}{{{Af{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}}kAdAd{{An{}{{Ah{}}{Aj{}}{Al{}}}}}{{B`{}{{Ah{}}{Aj{}}{Al{}}}}}{{Bd{}{{Bb{}}}}}{{Bd{}{{Bb{}}}}}{}{{Bh{}{{Bf{}}}}Bj}}{{{Af{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}}CdAdAd{{An{}{{Ah{}}{Aj{}}{Al{}}}}}{{B`{}{{Ah{}}{Aj{}}{Al{}}}}}{{Bd{}{{Bb{}}}}}{{Bd{}{{Bb{}}}}}{}{{Bh{}{{Bf{}}}}Bj}}{{{Dd{}{{Ah{c}}{Aj{e}}{Al{g}}}}}eAd{{An{}{{Ah{c}}{Aj{e}}}}}{{B`{}{{Ah{c}}{Al{g}}}}}}{{{Af{b{Bh{}{{Bf{c}}{C`{e}}{Cb{g}}}}}}c}Df{{Ad{}{{Ab{}}}}}{{Bd{}{{Bb{}}}}}{{Bd{}{{Bb{}}}}}}{{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}eAdAd{{An{}{{Ah{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}{Aj{g}}{Al{i}}}}}{{B`{}{{Ah{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}{Aj{g}}{Al{i}}}}}{{Bd{}{{Bb{Af}}}}}{{Bd{}{{Bb{{Af{b}}}}}}}{}{{Bh{}{{Bf{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}}}Bj}}{c{}{}}{{{Dj{}{{Dh{c}}}}}{{Dl{ec}}}AdAd}{{{E`{}{{Dn{c}}}}}{{Dl{ce}}}AdAd}{cDl{}}0{{{Af{{Dd{}{{Ah{c}}{Aj{e}}{Al{g}}}}}}}{}Ad{{An{}{{Ah{c}}{Aj{e}}}}}{{B`{}{{Ah{c}}{Al{g}}}}}}`````{{{Af{{Bh{}{{Bf{c}}{C`{e}}{Cb{g}}}}}}}{{`{{Bd{}{{Bb{}}}}}}}{{Ad{}{{Ab{}}}}}{{Bd{}{{Bb{}}}}}{{Bd{}{{Bb{}}}}}}````````{Af{{Af{c}}}{}}000{{{Af{b}}}{{Af{bc}}}{}}000{{{Af{{Eb{ce}}}}}{{Eb{ce}}}ChCh}{{{Af{{Ed{ce}}}}}{{Ed{ce}}}{AdCh}Ch}{{{Af{{Ef{ce}}}}}{{Ef{ce}}}ChCh}{{{Af{{Eh{c}}}}}{{Eh{c}}}{AdEjElCh}}{{Af{Af{bc}}}Df{}}000{AfDf}000{{{Af{{F`{}{{En{c}}}}}}}ClCj}{{{Af{{Eb{ce}}}}}Cl{AdCjEjEl}Fb}{{{Af{{Ed{ce}}}}}Cl{AdCjEjElCh}Fb}{{{Af{{Eh{c}}}}}Cl{CjEjEl}}{{}{{Eb{c}}}{}}{{}{{Ed{c}}}Ad}{{}{{Eh{c}}}{AdEjEl}}{{{Af{b{F`{}{{En{c}}}}}}}{{`{{Bd{}{{Bb{c}}}}}}}Cj}{{{Af{b{Eb{ce}}}}}{{`{{Bd{}{{Bb{g}}}}}}}{AdCjEjEl}Fb{}}{{{Af{b{Ed{ce}}}}}{{`{{Bd{}{{Bb{g}}}}}}}{AdCjEjElCh}Fb{}}{{{Af{b{Eh{c}}}}}{{`{{Bd{}{{Bb{e}}}}}}}{CjEjEl}{}}{{{Af{{Eb{ce}}}}{Af{{Eb{ce}}}}}Cl{EjElCj}Fb}{{{Af{{Ed{ce}}}}{Af{{Ed{ce}}}}}Cl{EjElCjCh}Fb}{{{Af{b{Eb{ce}}}}g}Df{EjElCj}Fb{{Fd{}{{Bb{c}}}}}}{{{Af{b{Ed{ce}}}}g}Df{EjElCjCh}Fb{{Fd{}{{Bb{c}}}}}}{{{Af{b{Eh{c}}}}e}Df{EjElCj}{{Fd{}{{Bb{c}}}}}}{{{Af{{Eb{c}}}}{Af{bFf}}}Fh{FjAdCjEjEl}}{{{Af{{Ed{c}}}}{Af{bFf}}}Fh{FjAdCj}}{{{Af{{Eh{c}}}}{Af{bFf}}}Fh{FjAdCjEjEl}}{cc{}}000{e{{Eb{cg}}}{EjElCj}{{Fd{}{{Bb{c}}}}}{FbBj}}{e{{Ed{cg}}}{EjElCjCh}{{Fd{}{{Bb{c}}}}}{FbBj}}{{{Af{{Eb{ce}}}}}{{Db{{Af{c}}}}}CjFb}{{{Af{{Ed{ce}}}}}{{Db{{Af{{Dl{cCd}}}}}}}CjFb}{{{Af{b{F`{}{{En{c}}}}}}c}ClCj}{{{Af{b{Eb{ce}}}}c}Cl{AdCjEjEl}Fb}{{{Af{b{Ed{ce}}}}c}Cl{AdCjEjElCh}Fb}{{{Af{b{Eh{c}}}}c}Cl{CjEjEl}}{{}c{}}000{{{Eb{ce}}}g{AdCj}{}{}}{{{Ed{c}}}e{AdCjCh}{}}2{{{Eh{c}}}e{CjEjEl}{}}{{{Af{{F`{}{{En{c}}}}}}}ClCj}{{{Af{{Eb{ce}}}}}Cl{AdCjEjEl}Fb}{{{Af{{Ed{ce}}}}}Cl{AdCjEjElCh}Fb}{{{Af{{Eh{c}}}}}Cl{CjEjEl}}{{{Af{{F`{}{{En{c}}}}}}}{{`{{Bd{}{{Bb{}}}}}}}Cj}{{{Af{{Eb{ce}}}}}{{`{{Bd{}{{Bb{}}}}}}}{AdCjEjEl}Fb}{{{Af{{Ed{ce}}}}}{{`{{Bd{}{{Bb{}}}}}}}{AdCjEjElCh}Fb}{{{Af{{Eh{c}}}}}{{`{{Bd{}{{Bb{}}}}}}}{CjEjEl}}{{{Af{{F`{}{{En{c}}}}}}}CdCj}{{{Af{{Eb{ce}}}}}Cd{AdCjEjEl}Fb}{{{Af{{Ed{ce}}}}}Cd{AdCjEjElCh}Fb}{{{Af{{Eh{c}}}}}Cd{CjEjEl}}{{}{{Eb{c}}}{}}{{}{{Ed{c}}}Ad}{{}{{Eh{c}}}{AdEjEl}}{{{Af{b{Ef{ec}}}}}{{Db{g}}}Ch{{Bd{}{{Bb{{Dl{cCd}}}}}}}{}}{Afc{}}000{c{{Fl{e}}}{}{}}000{{}{{Fl{c}}}{}}000{AfFn}000{{Cdc}{{Eb{ec}}}{}{}}{{Cdc}{{Ed{ec}}}{}Ad}{c{{Eb{ec}}}{}{}}{c{{Ed{ec}}}{}Ad}","D":"L`","p":[[0,"mut"],[17,"Extend"],[17,"Reverse"],[17,"AsRefVar"],[17,"AsMutVar"],[17,"IterAnyRef"],[17,"IterAnyMut"],[17,"IntoOption"],[17,"IntoVec"],[10,"VariadicExt",0],[1,"reference"],[17,"UnRefVar"],[17,"RefVar"],[17,"MutVar"],[10,"RefVariadic",0],[10,"MutVariadic",0],[17,"Item"],[10,"Iterator",167],[17,"UnVec"],[10,"VecVariadic",0],[10,"Default",168],[10,"CloneVariadic",0],[10,"CopyRefVariadic",0],[17,"IntoZip"],[17,"Drain"],[1,"usize"],[10,"RangeBounds",169],[10,"Clone",170],[10,"PartialEqVariadic",0],[1,"bool"],[17,"IntoIter"],[10,"HomogenousVariadic",0],[6,"Option",171],[10,"EitherRefVariadic",0],[1,"unit"],[17,"Suffix"],[10,"Split",0],[1,"tuple"],[17,"Prefix"],[10,"SplitBySuffix",0],[5,"VariadicHashSet",64],[5,"VariadicCountedHashSet",64],[5,"DuplicateCounted",64],[5,"VariadicColumnMultiset",64],[10,"Eq",172],[10,"Hash",173],[17,"Schema"],[10,"VariadicCollection",64],[10,"BuildHasher",173],[10,"IntoIterator",174],[5,"Formatter",175],[8,"Result",175],[10,"Debug",175],[6,"Result",176],[5,"TypeId",177]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAEcACgBJABMAXgAFAGUACgB0AAEAeQACAIAAAwCFAAIAiQACAI0AAgCTABAA"}],["variadics_macro",{"t":"Q","n":["tuple"],"q":[[0,"variadics_macro"]],"i":"`","f":"`","D":"b","p":[],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OjAAAAEAAAAAAAAAEAAAAAEA"}],["website_playground",{"t":"FFFFFNNNNNNNNNNOHHONNNNNOONNNNNNNNHHNNNNNOOOOOHNNNNNOONNNNNNNNNNNNNNN","n":["HydroflowOutput","HydroflowResult","JsDiagnostic","JsLineColumn","JsSpan","borrow","","","","","borrow_mut","","","","","column","compile_datalog","compile_hydroflow","compiled","deserialize","","","","","diagnostics","end","from","","","","","","","","init","init_datalog_boolean_demo","into","","","","","is_error","line","mermaid","message","output","send_datalog_boolean_demo","serialize","","","","","span","start","try_from","","","","","try_into","","","","","type_id","","","",""],"q":[[0,"website_playground"],[69,"alloc::string"],[70,"wasm_bindgen"],[71,"core::result"],[72,"serde::de"],[73,"proc_macro2::location"],[74,"proc_macro2"],[75,"hydroflow_lang::diagnostic"],[76,"core::option"],[77,"serde::ser"],[78,"core::any"]],"i":"`````lAbAdAfAh432104``0432101344332210``4321024021`4321023432104321043210","f":"`````{b{{b{c}}}{}}0000{{{b{d}}}{{b{dc}}}{}}0000`{{fhhhhhh}j}0`{c{{n{l}}}A`}{c{{n{Ab}}}A`}{c{{n{Ad}}}A`}{c{{n{Af}}}A`}{c{{n{Ah}}}A`}``{cc{}}{Ajl}1{AlAb}2{AnAd}33{{}B`}{{{b{Bb}}}B`}{{}c{}}0000`````{{{b{Bb}}Bd}{{Bf{Bd}}}}{{{b{l}}c}nBh}{{{b{Ab}}c}nBh}{{{b{Ad}}c}nBh}{{{b{Af}}c}nBh}{{{b{Ah}}c}nBh}``{c{{n{e}}}{}{}}0000{{}{{n{c}}}{}}0000{bBj}0000","D":"Ad","p":[[1,"reference"],[0,"mut"],[5,"String",69],[1,"bool"],[5,"JsValue",70],[5,"JsLineColumn",0],[6,"Result",71],[10,"Deserializer",72],[5,"JsSpan",0],[5,"JsDiagnostic",0],[5,"HydroflowResult",0],[5,"HydroflowOutput",0],[5,"LineColumn",73],[5,"Span",74],[5,"Diagnostic",75],[1,"unit"],[1,"str"],[1,"i32"],[6,"Option",76],[10,"Serializer",77],[5,"TypeId",78]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAADsABgAAABoAHAAAAB4AAAAgAAAAIwABACoAGwA="}]]')); +var searchIndex = new Map(JSON.parse('[["gossip_cli",{"t":"PPPFGFPNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNHHHONNNNNNNNNNNNNNNNNNOOOO","n":["Delete","Exit","Get","InteractiveApp","InteractiveCommands","Opts","Set","augment_args","","augment_args_for_update","","augment_subcommands","augment_subcommands_for_update","borrow","","","borrow_mut","","","command","","command_for_update","","commands","demux_enum","fmt","","","from","","","from_arg_matches","","","from_arg_matches_mut","","","group_id","","has_subcommand","into","","","main","parse_command","parse_key","server_address","try_from","","","try_into","","","type_id","","","update_from_arg_matches","","","update_from_arg_matches_mut","","","vzip","","","key","","","value"],"q":[[0,"gossip_cli"],[65,"gossip_cli::InteractiveCommands"],[69,"clap_builder::builder::command"],[70,"gossip_kv"],[71,"pusherator"],[72,"alloc::string"],[73,"core::fmt"],[74,"clap_builder::parser::matches::arg_matches"],[75,"clap_builder"],[76,"core::result"],[77,"clap_builder::util::id"],[78,"core::option"],[79,"core::any"]],"i":"h00```0AfAl1022102102101002102102102102102102```1102102102102102102BnC`Cb1","f":"```````{bb}00000{d{{d{c}}}{}}00{{{d{f}}}{{d{fc}}}{}}00{{}b}000`{{h{d{f{j{cegi}}}}}l{{Ab{}{{n{{j{A`}}}}}}}{{Ab{}{{n{l}}}}}{{Ab{}{{n{{j{A`}}}}}}}{{Ab{}{{n{{j{A`Ad}}}}}}}}{{{d{Af}}{d{fAh}}}Aj}{{{d{Al}}{d{fAh}}}Aj}{{{d{h}}{d{fAh}}}Aj}{cc{}}00{{{d{An}}}{{Bb{AfB`}}}}{{{d{An}}}{{Bb{AlB`}}}}{{{d{An}}}{{Bb{hB`}}}}{{{d{fAn}}}{{Bb{AfB`}}}}{{{d{fAn}}}{{Bb{AlB`}}}}{{{d{fAn}}}{{Bb{hB`}}}}{{}{{Bf{Bd}}}}0{{{d{Bh}}}Bj}{{}c{}}00{{}l}{Ad{{Bf{h}}}}{{{d{Bh}}}{{Bb{A`Ad}}}}`{c{{Bb{e}}}{}{}}00{{}{{Bb{c}}}{}}00{dBl}00{{{d{fAf}}{d{An}}}{{Bb{lB`}}}}{{{d{fAl}}{d{An}}}{{Bb{lB`}}}}{{{d{fh}}{d{An}}}{{Bb{lB`}}}}{{{d{fAf}}{d{fAn}}}{{Bb{lB`}}}}{{{d{fAl}}{d{fAn}}}{{Bb{lB`}}}}{{{d{fh}}{d{fAn}}}{{Bb{lB`}}}}<<<````","D":"Al","p":[[5,"Command",69],[1,"reference"],[0,"mut"],[6,"InteractiveCommands",0],[1,"tuple"],[1,"unit"],[17,"Item"],[5,"Key",70],[10,"Pusherator",71],[5,"String",72],[5,"Opts",0],[5,"Formatter",73],[8,"Result",73],[5,"InteractiveApp",0],[5,"ArgMatches",74],[8,"Error",75],[6,"Result",76],[5,"Id",77],[6,"Option",78],[1,"str"],[1,"bool"],[5,"TypeId",79],[15,"Get",65],[15,"Set",65],[15,"Delete",65]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAADcABgAAAAAABQAAAAgAFAAgAAgALAAAAC8AFgA="}],["gossip_kv",{"t":"PGGPPPPPGPPFGPGIPPPIPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCCCOONNNNNCONNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNOOOOOOOOOOOOOOOFNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFIFNNNNNNNNNNNNNNNNONNNNNNNNNNNONNNONNONNNNNNNNNNNNNNNNIIIIIIIIHOHKFIFFONNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNHNNNNNNNNNNNNNNPGPPPGPPNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOO","n":["Ack","ClientRequest","ClientResponse","Delete","","Get","","Gossip","GossipMessage","InvalidFormat","InvalidNamespace","Key","KeyParseError","Nack","Namespace","RowKey","Set","","System","TableName","User","borrow","","","","","","borrow_mut","","","","","","clone","","","","","","clone_into","","","","","","clone_to_uninit","","","","","","deserialize","","","","","eq","","","","","","equivalent","","","","","","","","","","","","fmt","","","","","","","from","","","","","","from_str","","hash","","into","","","","","","lattices","membership","model","namespace","row_key","serialize","","","","","server","table","to_owned","","","","","","to_string","try_from","","","","","","try_into","","","","","","type_id","","","","","","util","vzip","","","","","","key","","","value","key","success","","value","member_id","","","message_id","","","writes","BoundedSetLattice","borrow","borrow_mut","clone","clone_into","clone_to_uninit","default","deserialize","eq","equivalent","","fmt","from","","into","is_bot","is_top","lattice_from","merge","","new","new_from","partial_cmp","serialize","to_owned","try_from","try_into","type_id","vzip","MemberData","MemberDataBuilder","MemberId","Protocol","add_protocol","borrow","","","borrow_mut","","","build","clone","","clone_into","","clone_to_uninit","","deserialize","","endpoint","eq","","equivalent","","","","fmt","","from","","","id","into","","","name","new","","protocols","serialize","","to_owned","","try_from","","","try_into","","","type_id","","","vzip","","","Clock","NamespaceMap","Namespaces","RowKey","RowValue","Table","TableMap","TableName","delete_row","key","upsert_row","Address","InfectingWrite","MessageId","SETS_COUNTER","SeedNode","address","borrow","","","borrow_mut","","","clone","","clone_into","","clone_to_uninit","","deref","deserialize","","eq","","equivalent","","fmt","","from","","","hash","id","into","","","is_bot","is_top","lattice_from","merge","partial_cmp","serialize","","server","to_owned","","try_from","","","try_into","","","type_id","","","vzip","","","Ack","ClientRequestWithAddress","Delete","Get","Gossip","GossipRequestWithAddress","Nack","Set","borrow","","borrow_mut","","demux_enum","","fmt","","from","","from_request_and_address","","into","","try_from","","try_into","","type_id","","vzip","","addr","","","key","","","value","addr","","","member_id","","","message_id","","","writes"],"q":[[0,"gossip_kv"],[141,"gossip_kv::ClientRequest"],[145,"gossip_kv::ClientResponse"],[149,"gossip_kv::GossipMessage"],[156,"gossip_kv::lattices"],[185,"gossip_kv::membership"],[241,"gossip_kv::model"],[252,"gossip_kv::server"],[309,"gossip_kv::util"],[339,"gossip_kv::util::ClientRequestWithAddress"],[346,"gossip_kv::util::GossipRequestWithAddress"],[356,"core::result"],[357,"serde::de"],[358,"core::fmt"],[359,"core::hash"],[360,"serde::ser"],[361,"alloc::string"],[362,"core::any"],[363,"core::cmp"],[364,"core::clone"],[365,"core::iter::traits::collect"],[366,"core::option"],[367,"prometheus::counter"],[368,"alloc::vec"],[369,"hydroflow::scheduled::graph"],[370,"futures_core::stream"],[371,"core::marker"],[372,"futures_sink"],[373,"pusherator"]],"i":"A```ln102`h0``3``21f`001j4351204351204351204351204351043512043511220044335512204351204351010120435```0010435`01204352120435120435120435`120435G`GbGd1GfGhGj2GlGnH`2102`Bh000000000000000000000000000````Cn0DbD`210210101010010110010210121002011010210210210210`````````Hb``````Dn0EbEd210212121021212221210222101111121`21210210210210Fl`Fh01`100101010101010101010101HdHfHh2101HjHlHn2102102","f":"`````````````````````{b{{b{c}}}{}}00000{{{b{d}}}{{b{dc}}}{}}00000{{{b{f}}}f}{{{b{h}}}h}{{{b{j}}}j}{{{b{l}}}l}{{{b{n}}}n}{{{b{A`}}}A`}{{b{b{dc}}}Ab{}}00000{bAb}00000{c{{Ad{f}}}Af}{c{{Ad{j}}}Af}{c{{Ad{l}}}Af}{c{{Ad{n}}}Af}{c{{Ad{A`}}}Af}{{{b{f}}{b{f}}}Ah}{{{b{h}}{b{h}}}Ah}{{{b{j}}{b{j}}}Ah}{{{b{l}}{b{l}}}Ah}{{{b{n}}{b{n}}}Ah}{{{b{A`}}{b{A`}}}Ah}{{b{b{c}}}Ah{}}00000000000{{{b{f}}{b{dAj}}}Al}{{{b{h}}{b{dAj}}}Al}0{{{b{j}}{b{dAj}}}Al}{{{b{l}}{b{dAj}}}Al}{{{b{n}}{b{dAj}}}Al}{{{b{A`}}{b{dAj}}}Al}{cc{}}00000{{{b{An}}}{{Ad{fc}}}{}}{{{b{An}}}{{Ad{jc}}}{}}{{{b{f}}{b{dc}}}AbB`}{{{b{j}}{b{dc}}}AbB`}{{}c{}}00000`````{{{b{f}}c}AdBb}{{{b{j}}c}AdBb}{{{b{l}}c}AdBb}{{{b{n}}c}AdBb}{{{b{A`}}c}AdBb}``{bc{}}00000{bBd}{c{{Ad{e}}}{}{}}00000{{}{{Ad{c}}}{}}00000{bBf}00000`::::::````````````````{b{{b{c}}}{}}{{{b{d}}}{{b{dc}}}{}}{{{b{{Bh{c}}}}}{{Bh{c}}}{BjBlBn}}{{b{b{dc}}}Ab{}}{bAb}{{}{{Bh{c}}}{BjBl}}{c{{Ad{{Bh{e}}}}}Af{BjBlC`}}{{{b{{Bh{c}}}}{b{{Bh{c}}}}}Ah{BjBl}}{{b{b{c}}}Ah{}}0{{{b{{Bh{c}}}}{b{dAj}}}Al{BjBlCb}}{Ab{{Bh{c}}}{BjBl}}{cc{}}{{}c{}}{{{b{{Bh{c}}}}}Ah{BjBl}}0{{{Bh{c}}}{{Bh{c}}}{BjBl}}{{{b{d{Bh{c}}}}{Bh{c}}}Ah{BjBl}}{{{b{d{Bh{c}}}}e}Ah{BjBl}{{Cf{}{{Cd{c}}}}}};{e{{Bh{c}}}{BjBl}{{Cf{}{{Cd{c}}}}}}{{{b{{Bh{c}}}}{b{{Bh{c}}}}}{{Cj{Ch}}}{BjBl}}{{{b{{Bh{c}}}}e}Ad{BjBlCl}Bb}{bc{}}{c{{Ad{e}}}{}{}}{{}{{Ad{c}}}{}}{bBf};````{{{Cn{c}}{D`{c}}}{{Cn{c}}}{CbBnBjBlCl}}{b{{b{c}}}{}}00{{{b{d}}}{{b{dc}}}{}}00{{{Cn{c}}}{{Db{c}}}{CbBnBjBlCl}}{{{b{{Db{c}}}}}{{Db{c}}}{CbBnBjBlClBn}}{{{b{{D`{c}}}}}{{D`{c}}}Bn}{{b{b{dc}}}Ab{}}0{bAb}0{c{{Ad{{Db{e}}}}}Af{CbBnBjBlClC`}}{c{{Ad{{D`{e}}}}}AfC`}`{{{b{{Db{c}}}}{b{{Db{c}}}}}Ah{CbBnBjBlClDd}}{{{b{{D`{c}}}}{b{{D`{c}}}}}AhDd}{{b{b{c}}}Ah{}}000{{{b{{Db{c}}}}{b{dAj}}}Al{CbBnBjBlClCb}}{{{b{{D`{c}}}}{b{dAj}}}AlCb}{cc{}}00`{{}c{}}00`{Df{{Cn{c}}}{CbBnBjBlCl}}{{Bdc}{{D`{c}}}{}}`{{{b{{Db{c}}}}e}Ad{CbBnBjBlClCl}Bb}{{{b{{D`{c}}}}e}AdClBb}{bc{}}0{c{{Ad{e}}}{}{}}00{{}{{Ad{c}}}{}}00{bBf}00888````````{{cfDhDj}{{Dl{c}}}{}}`{{cfDhDjBd}{{Dl{c}}}{}}``````{b{{b{c}}}{}}00{{{b{d}}}{{b{dc}}}{}}00{{{b{{Dn{c}}}}}{{Dn{c}}}{E`Bn}}{{{b{Eb}}}Eb}{{b{b{dc}}}Ab{}}0{bAb}0{{{b{Ed}}}{{b{Ef}}}}{c{{Ad{{Dn{e}}}}}Af{E`C`}}{c{{Ad{Eb}}}Af}{{{b{{Dn{c}}}}{b{{Dn{c}}}}}Ah{E`Dd}}{{{b{Eb}}{b{Eb}}}Ah}{{b{b{c}}}Ah{}}0{{{b{{Dn{c}}}}{b{dAj}}}Al{E`Cb}}{{{b{Eb}}{b{dAj}}}Al}{cc{}}00{{{b{{Dn{c}}}}{b{de}}}Ab{E`Bl}B`}`{{}c{}}00{{{b{Eb}}}Ah}0{EbEb}{{{b{dEb}}Eb}Ah}{{{b{Eb}}{b{Eb}}}{{Cj{Ch}}}}{{{b{{Dn{c}}}}e}Ad{E`Cl}Bb}{{{b{Eb}}c}AdBb}{{eikoAa{Db{c}}{Eh{{Dn{c}}}}Ac}Ej{E`El}{{F`{}{{Cd{{En{lc}}}}}}Fb}Cb{{Ff{{En{nc}}}{{Fd{g}}}}Fb}{{F`{}{{Cd{{En{A`c}}}}}}Fb}Cb{{Ff{{En{A`c}}}{{Fd{m}}}}Fb}{{F`{}{{Cd{Ab}}}}Fb}{{F`{}{{Cd{{Eh{{Dn{c}}}}}}}}Fb}}{bc{}}0{c{{Ad{e}}}{}{}}00{{}{{Ad{c}}}{}}00{bBf}00;;;````````{b{{b{c}}}{}}0{{{b{d}}}{{b{dc}}}{}}0{{{Fh{c}}{b{d{En{egi}}}}}Ab{}{{Fj{}{{Cd{{En{jc}}}}}}}{{Fj{}{{Cd{{En{jc}}}}}}}{{Fj{}{{Cd{{En{jBdc}}}}}}}}{{{Fl{c}}{b{d{En{egi}}}}}Ab{}{{Fj{}{{Cd{{En{BdBdc}}}}}}}{{Fj{}{{Cd{{En{BdBd{Dl{Fn}}c}}}}}}}{{Fj{}{{Cd{{En{BdBdc}}}}}}}}{{{b{{Fh{c}}}}{b{dAj}}}AlCb}{{{b{{Fl{c}}}}{b{dAj}}}AlCb}{cc{}}0{{lc}{{Fh{c}}}{}}{{A`c}{{Fl{c}}}{}}{{}c{}}0<<;;::00`````````````````","D":"Jj","p":[[1,"reference"],[0,"mut"],[6,"Namespace",0],[6,"KeyParseError",0],[5,"Key",0],[6,"ClientRequest",0],[6,"ClientResponse",0],[6,"GossipMessage",0],[1,"unit"],[6,"Result",356],[10,"Deserializer",357],[1,"bool"],[5,"Formatter",358],[8,"Result",358],[1,"str"],[10,"Hasher",359],[10,"Serializer",360],[5,"String",361],[5,"TypeId",362],[5,"BoundedSetLattice",156],[10,"Eq",363],[10,"Hash",359],[10,"Clone",364],[10,"Deserialize",357],[10,"Debug",358],[17,"Item"],[10,"IntoIterator",365],[6,"Ordering",363],[6,"Option",366],[10,"Serialize",360],[5,"MemberDataBuilder",185],[5,"Protocol",185],[5,"MemberData",185],[10,"PartialEq",363],[8,"MemberId",185],[8,"TableName",241],[8,"RowKey",241],[8,"Namespaces",241],[5,"SeedNode",252],[10,"Address",252],[5,"InfectingWrite",252],[5,"SETS_COUNTER",252],[8,"IntCounter",367],[5,"Vec",368],[5,"Hydroflow",369],[10,"DeserializeOwned",357],[1,"tuple"],[10,"Stream",370],[10,"Unpin",371],[17,"Error"],[10,"Sink",372],[6,"ClientRequestWithAddress",309],[10,"Pusherator",373],[6,"GossipRequestWithAddress",309],[8,"Clock",241],[15,"Get",141],[15,"Set",141],[15,"Delete",141],[15,"Get",145],[15,"Set",145],[15,"Delete",145],[15,"Gossip",149],[15,"Ack",149],[15,"Nack",149],[8,"RowValue",241],[15,"Get",339],[15,"Set",339],[15,"Delete",339],[15,"Gossip",346],[15,"Ack",346],[15,"Nack",346]],"r":[],"b":[[75,"impl-Debug-for-KeyParseError"],[76,"impl-Display-for-KeyParseError"],[174,"impl-Merge%3CBoundedSetLattice%3CT,+N%3E%3E-for-BoundedSetLattice%3CT,+N%3E"],[175,"impl-Merge%3CU%3E-for-BoundedSetLattice%3CT,+N%3E"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAA8BFgAAAAAAAwAAAAkAAAAWADsAWAADAGIAAgBnAAUAbgAuAJ4ACwCsAA0AvAAAAL8ABQDGAAcAzwAHAOIADwDzAAEA/gAZABsBAQAgAQYAKAENAD4BBwBMARgA"}],["gossip_server",{"t":"FNNNNHONNNNNCNNNNNNNNNNOONNNHHOCHHHNNNNNNNSSSFFFONNNNNNNNNNNHNNNNNNNNNNNNNONNNNNONNHHNNNNNNNONNNNNNFNNNNHNNNNN","n":["Opts","augment_args","augment_args_for_update","borrow","borrow_mut","clap_duration_from_secs","client_port","clone","clone_into","clone_to_uninit","command","command_for_update","config","eq","equivalent","","","","","fmt","from","from_arg_matches","from_arg_matches_mut","gossip_frequency","gossip_port","group_id","hash","into","main","make_seed_node","member_suffix_len","membership","metrics_handler","setup_inbound_deserialization","setup_outbound_serialization","to_owned","try_from","try_into","type_id","update_from_arg_matches","update_from_arg_matches_mut","vzip","CONFIG_ROOT","DYNAMIC_CONFIG_PATH","STATIC_CONFIG_PATH","SeedNodeSettings","ServerSettings","UnboundedSenderEventHandler","address","borrow","","","borrow_mut","","","clone","clone_into","clone_to_uninit","deserialize","","dynamic_config_path","eq","equivalent","","","","","fmt","","from","","","handle_event","hash","id","into","","","new","","seed_nodes","serialize","","setup_settings_watch","static_config_path","to_owned","try_from","","","try_into","","","tx","type_id","","","vzip","","","LowercaseAlphanumeric","borrow","borrow_mut","from","into","member_name","sample","try_from","try_into","type_id","vzip"],"q":[[0,"gossip_server"],[42,"gossip_server::config"],[99,"gossip_server::membership"],[110,"clap_builder::builder::command"],[111,"core::time"],[112,"core::num::dec2flt"],[113,"core::result"],[114,"core::fmt"],[115,"clap_builder::parser::matches::arg_matches"],[116,"clap_builder"],[117,"clap_builder::util::id"],[118,"core::option"],[119,"core::hash"],[120,"core::net::socket_addr"],[121,"gossip_kv::server"],[122,"warp::reply"],[123,"core::convert"],[124,"futures_core::stream"],[125,"bytes::bytes_mut"],[126,"std::io::error"],[127,"serde::de"],[128,"core::marker"],[129,"futures_sink"],[130,"bytes::bytes"],[131,"serde::ser"],[132,"core::any"],[133,"std::path"],[134,"notify::event"],[135,"notify::error"],[136,"tokio::sync::mpsc::unbounded"],[137,"config::error"],[138,"notify"],[139,"gossip_kv::membership"],[140,"rand::rng"]],"i":"`A`000`000000`000000000000000``0````0000000``````BdDnDh210222202`2222220210212210210002``21021021102102`F`000`00000","f":"`{bb}0{d{{d{c}}}{}}{{{d{f}}}{{d{fc}}}{}}{{{d{h}}}{{n{jl}}}}`{{{d{A`}}}A`}{{d{d{fc}}}Ab{}}{dAb}{{}b}0`{{{d{A`}}{d{A`}}}Ad}{{d{d{c}}}Ad{}}0000{{{d{A`}}{d{fAf}}}Ah}{cc{}}{{{d{Aj}}}{{n{A`Al}}}}{{{d{fAj}}}{{n{A`Al}}}}``{{}{{B`{An}}}}{{{d{A`}}{d{fc}}}AbBb}{{}c{}}{{}Ab}{{{d{Bd}}}{{Bh{Bf}}}}``{{}{{n{{`{Bj}}Bl}}}}{c{{`{{Cb{}{{Bn{{C`{eBf}}}}}}}}}{{Cb{}{{Bn{{n{{C`{CdBf}}Cf}}}}}}}{ChCjCl}}{c{{`{{D`{{C`{eBf}}}{{Cn{Cf}}}}}}}{{D`{{C`{DbBf}}}{{Cn{Cf}}}}}{DdCjCl}}{dc{}}{c{{n{e}}}{}{}}{{}{{n{c}}}{}}{dDf}{{{d{fA`}}{d{Aj}}}{{n{AbAl}}}}{{{d{fA`}}{d{fAj}}}{{n{AbAl}}}};```````{d{{d{c}}}{}}00{{{d{f}}}{{d{fc}}}{}}00{{{d{Bd}}}Bd}{{d{d{fc}}}Ab{}}{dAb}{c{{n{Dh}}}Dj}{c{{n{Bd}}}Dj}{{{d{h}}}Dl}{{{d{Bd}}{d{Bd}}}Ad}{{d{d{c}}}Ad{}}0000{{{d{Dh}}{d{fAf}}}Ah}{{{d{Bd}}{d{fAf}}}Ah}{cc{}}00{{{d{fDn}}{Eb{E`}}}Ab}{{{d{Bd}}{d{fc}}}AbBb}`{{}c{}}00{{{Ed{{Eb{E`}}}}}Dn}{{}{{n{DhEf}}}}`{{{d{Dh}}c}nEh}{{{d{Bd}}c}nEh}{{}{{C`{EjDh{`{{Cb{}{{Bn{Dh}}}}}}}}}}={dc{}}{c{{n{e}}}{}{}}00{{}{{n{c}}}{}}00`{dDf}00999`{d{{d{c}}}{}}{{{d{f}}}{{d{fc}}}{}}>;{El{{d{En}}}}{{{d{F`}}{d{fc}}}Fb{FdFf}}654=","D":"Ch","p":[[5,"Command",110],[1,"reference"],[0,"mut"],[1,"str"],[5,"Duration",111],[5,"ParseFloatError",112],[6,"Result",113],[5,"Opts",0],[1,"unit"],[1,"bool"],[5,"Formatter",114],[8,"Result",114],[5,"ArgMatches",115],[8,"Error",116],[5,"Id",117],[6,"Option",118],[10,"Hasher",119],[5,"SeedNodeSettings",42],[6,"SocketAddr",120],[5,"SeedNode",121],[10,"Reply",122],[6,"Infallible",123],[17,"Item"],[1,"tuple"],[10,"Stream",124],[5,"BytesMut",125],[5,"Error",126],[10,"Deserialize",127],[10,"Debug",114],[10,"Send",128],[17,"Error"],[10,"Sink",129],[5,"Bytes",130],[10,"Serialize",131],[5,"TypeId",132],[5,"ServerSettings",42],[10,"Deserializer",127],[5,"PathBuf",133],[5,"UnboundedSenderEventHandler",42],[5,"Event",134],[8,"Result",135],[5,"UnboundedSender",136],[6,"ConfigError",137],[10,"Serializer",131],[8,"RecommendedWatcher",138],[1,"usize"],[8,"MemberId",139],[5,"LowercaseAlphanumeric",99],[1,"char"],[10,"Rng",140],[10,"Sized",128]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAFIADgAAAAUACAAMABYAAQAaAAEAHQAAAB8AAQAkAAkAMgATAEkAAQBPAAAAUgABAFUADgBlAAEAagAEAA=="}],["hydro_cli",{"t":"FFFFFNHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNN","n":["AnyhowError","AnyhowWrapper","Deployment","Host","Service","__clone_box","_core","arguments","","","","as_ptr","as_ref","borrow","","","","","borrow_mut","","","","","clone","clone_into","clone_to_uninit","deref","doc","","","","extract","","","","","","","","","","fmt","","from","","","","","from_borrowed_ptr_or_opt","from_owned_ptr_or_opt","into","","","","","into_py","","","","","items_iter","","","","lazy_type_object","","","","new_err","source","to_object","to_owned","to_string","try_from","","","","","","try_from_exact","try_from_unchecked","try_into","","","","","type_id","","","","","type_object_raw","","","","","underlying","vzip","","","",""],"q":[[0,"hydro_cli"],[102,"dyn_clone::sealed"],[103,"pyo3::marker"],[104,"pyo3::types::module"],[105,"pyo3::err"],[106,"pyo3::types::any"],[107,"pyo3::instance"],[108,"pyo3_ffi::object"],[109,"core::ffi::c_str"],[110,"core::result"],[111,"core::fmt"],[112,"core::option"],[113,"pyo3::impl_::pyclass"],[114,"pyo3::impl_::pyclass::lazy_type_object"],[115,"pyo3::err::err_state"],[116,"core::marker"],[117,"core::error"],[118,"alloc::string"],[119,"core::convert"],[120,"core::any"]],"i":"`````Ah`0B`BbBdAb004321043214440432104443322110004321000432104321432143210004000432100043210432104321404321","f":"`````{{bd}f}{{h{b{j}}}{{l{f}}}}{h{{A`{n}}}}000{{{b{Ab}}}Ad}{{{b{Ab}}}{{b{n}}}}{b{{b{c}}}{}}0000{{{b{Af}}}{{b{Afc}}}{}}0000{{{b{Ah}}}Ah}{{b{b{Afc}}}f{}}{bf}5{h{{l{{b{Aj}}}}}}000{{{b{n}}}{{l{{b{Ab}}}}}}{{{b{n}}}{{An{cAl}}}{}}{{{b{n}}{b{Afc}}}{{l{{b{AfAh}}}}}{}}{{{b{n}}{b{Afc}}}{{l{{b{Ah}}}}}{}}{{{b{n}}{b{Afc}}}{{l{{b{B`}}}}}{}}{{{b{n}}{b{Afc}}}{{l{{b{AfB`}}}}}{}}{{{b{n}}{b{Afc}}}{{l{{b{Bb}}}}}{}}{{{b{n}}{b{Afc}}}{{l{{b{AfBb}}}}}{}}{{{b{n}}{b{Afc}}}{{l{{b{AfBd}}}}}{}}{{{b{n}}{b{Afc}}}{{l{{b{Bd}}}}}{}}{{{b{Ab}}{b{AfBf}}}{{An{fBh}}}}0{cc{}}0000{{hAd}{{Bj{{b{c}}}}}{}}0{{}c{}}0000{{{b{Ab}}h}{{A`{Ab}}}}{{Ahh}Bl}{{B`h}Bl}{{Bbh}Bl}{{Bdh}Bl}{{}Bn}000{{}{{b{{C`{Ah}}}}}}{{}{{b{{C`{B`}}}}}}{{}{{b{{C`{Bb}}}}}}{{}{{b{{C`{Bd}}}}}}{cAl{CbCdCf}}{{{b{Ab}}}{{Bj{{b{Ch}}}}}}{{{b{Ab}}h}Bl}{bc{}}{bCj}{c{{An{e}}}{}{}}{c{{An{{b{e}}Cl}}}{{Cn{{b{n}}}}}{}}11110{c{{b{e}}}{{Cn{{b{n}}}}}{}}{{}{{An{c}}}{}}0000{bD`}0000{hDb}0000`{{}c{}}0000","D":"Ah","p":[[1,"reference"],[5,"Private",102],[1,"unit"],[5,"Python",103],[5,"PyModule",104],[8,"PyResult",105],[5,"PyAny",106],[5,"Py",107],[5,"AnyhowError",0],[5,"PyObject",108],[0,"mut"],[5,"AnyhowWrapper",0],[5,"CStr",109],[5,"PyErr",105],[6,"Result",110],[5,"Deployment",0],[5,"Host",0],[5,"Service",0],[5,"Formatter",111],[5,"Error",111],[6,"Option",112],[8,"PyObject",107],[5,"PyClassItemsIter",113],[5,"LazyTypeObject",114],[10,"PyErrArguments",115],[10,"Send",116],[10,"Sync",116],[10,"Error",117],[5,"String",118],[5,"PyDowncastError",105],[10,"Into",119],[5,"TypeId",120],[5,"PyTypeObject",108]],"r":[],"b":[[33,"impl-PyFunctionArgument%3C\'a,+\'py%3E-for-%26mut+AnyhowWrapper"],[34,"impl-PyFunctionArgument%3C\'a,+\'py%3E-for-%26AnyhowWrapper"],[35,"impl-PyFunctionArgument%3C\'a,+\'py%3E-for-%26Deployment"],[36,"impl-PyFunctionArgument%3C\'a,+\'py%3E-for-%26mut+Deployment"],[37,"impl-PyFunctionArgument%3C\'a,+\'py%3E-for-%26Host"],[38,"impl-PyFunctionArgument%3C\'a,+\'py%3E-for-%26mut+Host"],[39,"impl-PyFunctionArgument%3C\'a,+\'py%3E-for-%26mut+Service"],[40,"impl-PyFunctionArgument%3C\'a,+\'py%3E-for-%26Service"],[41,"impl-Display-for-AnyhowError"],[42,"impl-Debug-for-AnyhowError"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAFoABQAAAAsADQAeADEAAQA4AAwARgAgAA=="}],["hydro_deploy",{"t":"EGEPEPPEKIGEPPKKPPEPPFFFGKRKPPPNMCNNNNNNNNNNNNMMNNNMMMCNMMCNNNNNMNNMNNNNNNCNCMNNNNNNMMCCMMMMMCMMMMMMMMCOOONNNNNNNNNNNNNNNNNNNCNNNNNNMFFNNNNNNNNONNNNNNNONNNNONNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNIINNFNNNNNNNNNNNONNONNONNNNNNNNFFFNNNNNNNNNNOONNNNNNNNNONNNNNONNONNNNNNNNNNNNNNNNNNNNPGPPFNNNNNNNNNNNNNNNNNNNNNNNNNCNNCNNNNCNNNNNNNNPPFPPPFKKKPPPPFIGGPPFPNNMNNNNNNNNNNNNNNNNNNNNNONNNNNNNMNMNNNMNNNMNNNNNNNNNMNNNOOMNNNMNNNNMNNNOOOOMNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNNNNNNNNIFNNNNNNNOOOOOOONNONNNNNFNNNNNNNNNONNCNNNNNNNNNNFNNNNNNNNNNNNNNNNNGPPPPGFPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKMMMNMNNMJFFFFFFFNNNNNNNNNNNNNNONNONNNNNNNNNNNNNNNNNNNNNNNOOONOONNNNNOONNNNNNNNNNNNNNNNNNNNNOONNNNNNNHH","n":["AzureHost","ClientStrategy","CustomService","Demux","Deployment","ExternalTcpPort","ForwardedTcpPort","GcpComputeEngineHost","Host","HostStrategyGetter","HostTargetType","HydroflowCrate","InternalTcpPort","","LaunchedBinary","LaunchedHost","Linux","Local","LocalhostHost","Merge","Null","ResourceBatch","ResourcePool","ResourceResult","ServerStrategy","Service","","ServiceBuilder","Tagged","UnixSocket","","__clone_box","as_any","azure","borrow","","","","","","borrow_mut","","","","","","build","can_connect_to","clone","clone_into","clone_to_uninit","collect_resources","","copy_binary","custom_service","default","deploy","deploy_stdout","deployment","eq","equivalent","","","","exit_code","fmt","","forward_port","from","","","","","","gcp","hash","hydroflow_crate","id","into","","","","","","launch_binary","launched","localhost","progress","provision","ready","request_custom_binary","request_port","server_config","ssh","start","stderr","stdin","stdout","stop","","strategy_as_server","target_type","terraform","","","","to_owned","try_from","","","","","","try_into","","","","","","type_id","","","","","","util","vzip","","","","","","wait","AzureHost","LaunchedVirtualMachine","as_any","borrow","","borrow_mut","","can_connect_to","collect_resources","copy_binary","external_ip","forward_port","from","","get_cloud_provider","get_external_ip","get_internal_ip","id","internal_ip","into","","launch_binary","launched","","new","provision","request_custom_binary","request_port","resource_result","server_config","ssh_user","strategy_as_server","target_type","try_from","","try_into","","type_id","","vzip","","CustomClientPort","CustomService","as_any","borrow","","borrow_mut","","collect_resources","connect","declare_client","deploy","from","","host","instantiate","instantiate_reverse","into","","new","","on","ready","record_server_config","record_server_strategy","server","server_port","source_path","start","stop","try_from","","try_into","","type_id","","vzip","","AddAzureHostDeploymentBuilder","AddGcpComputeEngineHostDeploymentBuilder","AzureHost","CustomService","Deployment","GcpComputeEngineHost","Localhost","add_azure_host","add_gcp_compute_engine_host","add_host","add_service","borrow","borrow_mut","default","deploy","from","hosts","into","new","resource_pool","run_ctrl_c","run_until","services","start","start_ctrl_c","start_until","stop","try_from","try_into","type_id","vzip","GcpComputeEngineHost","GcpNetwork","LaunchedComputeEngine","as_any","borrow","","","borrow_mut","","","can_connect_to","collect_resources","copy_binary","existing_vpc","external_ip","fmt","forward_port","from","","","get_cloud_provider","get_external_ip","get_internal_ip","id","internal_ip","into","","","launch_binary","launched","","new","","project","provision","request_custom_binary","request_port","resource_result","server_config","ssh_user","strategy_as_server","target_type","try_from","","","try_into","","","type_id","","","vzip","","","Bin","CrateTarget","Default","Example","HydroflowCrate","__clone_box","","args","bin","borrow","","borrow_mut","","build","clone","","clone_into","","clone_to_uninit","","display_name","eq","example","features","from","","into","","new","no_default_features","ports","profile","rustflags","service","target_dir","to_owned","","tracing","tracing_options","try_from","","try_into","","type_id","","vzip","","Demux","DemuxSelect","DemuxSink","Direct","","Forwarded","HydroflowPortConfig","HydroflowServer","HydroflowSink","HydroflowSource","Merge","MergeSelect","Null","","NullSourceSink","ReverseSinkInstantiator","ServerConfig","SourcePath","Tagged","","TaggedSource","TaggedUnwrap","__clone_box","","as_any","","","","borrow","","","","","","borrow_mut","","","","","","clone","","clone_into","","clone_to_uninit","","demux","from","","","","","","from_strategy","get_port","","host","","","","instantiate","","","","instantiate_reverse","","","","into","","","","","","launched_host","","load_instantiated","merge","","port","record_server_config","","","","record_server_strategy","","","","send_to","server","","","","service","service_host","service_server_defns","source","source_path","","","","tag","to_owned","","try_from","","","","","","try_into","","","","","","type_id","","","","","","vzip","","","","","","wrap_reverse_server_config","","HydroflowCrateService","add_connection","borrow","borrow_mut","collect_resources","deploy","exit_code","from","get_port","into","new","ready","start","stderr","stdout","stop","try_from","try_into","type_id","update_meta","vzip","NewTracingOptionsBuilder","TracingOptions","__clone_box","borrow","borrow_mut","builder","clone","clone_into","clone_to_uninit","dtrace_outfile","flamegraph_options","flamegraph_outfile","fold_dtrace_options","fold_outfile","fold_perf_options","frequency","from","into","perf_raw_outfile","to_owned","try_from","try_into","type_id","vzip","LocalhostHost","as_any","borrow","borrow_mut","can_connect_to","client_only","collect_resources","fmt","from","id","","into","launched","launched_binary","new","provision","request_custom_binary","request_port","strategy_as_server","target_type","try_from","try_into","type_id","vzip","LaunchedLocalhostBinary","borrow","borrow_mut","deploy_stdout","drop","exit_code","from","into","new","stderr","stdin","stdout","stop","try_from","try_into","type_id","vzip","wait","BarTree","Finished","","Group","Leaf","LeafStatus","ProgressTracker","Root","Started","__clone_box","borrow","","","borrow_mut","","","clone","clone_into","clone_to_uninit","end_task","eq","equivalent","","","","fmt","","from","","","into","","","leaf","println","progress_leaf","rich_leaf","start_task","to_owned","try_from","","","try_into","","","type_id","","","vzip","","","with_group","LaunchedSshHost","get_cloud_provider","get_external_ip","get_internal_ip","open_ssh_session","resource_result","server_config","ssh_key_path","ssh_user","TERRAFORM_ALPHABET","TerraformBatch","TerraformConfig","TerraformOutput","TerraformPool","TerraformProvider","TerraformResult","TerraformResultOutput","borrow","","","","","","","borrow_mut","","","","","","","data","default","","deployment_folder","deserialize","","","","","drop","","fmt","","from","","","","","","","into","","","","","","","output","outputs","provider","provision","required_providers","resource","serialize","","","","","source","terraform","try_from","","","","","","","try_into","","","","","","","type_id","","","","","","","value","version","vzip","","","","","","","async_retry","prioritized_broadcast"],"q":[[0,"hydro_deploy"],[133,"hydro_deploy::azure"],[174,"hydro_deploy::custom_service"],[211,"hydro_deploy::deployment"],[242,"hydro_deploy::gcp"],[296,"hydro_deploy::hydroflow_crate"],[343,"hydro_deploy::hydroflow_crate::ports"],[473,"hydro_deploy::hydroflow_crate::service"],[494,"hydro_deploy::hydroflow_crate::tracing_options"],[518,"hydro_deploy::localhost"],[542,"hydro_deploy::localhost::launched_binary"],[560,"hydro_deploy::progress"],[612,"hydro_deploy::ssh"],[621,"hydro_deploy::terraform"],[713,"hydro_deploy::util"],[715,"dyn_clone::sealed"],[716,"core::any"],[717,"core::future::future"],[718,"alloc::boxed"],[719,"core::pin"],[720,"alloc::sync"],[721,"alloc::string"],[722,"tokio::sync::oneshot"],[723,"core::option"],[724,"core::fmt"],[725,"core::net::socket_addr"],[726,"core::hash"],[727,"hydroflow_deploy_integration"],[728,"tokio::sync::mpsc::unbounded"],[729,"anyhow"],[730,"core::result"],[731,"std::collections::hash::map"],[732,"tokio::sync::rwlock"],[733,"core::ops::function"],[734,"alloc::vec"],[735,"core::convert"],[736,"core::iter::traits::collect"],[737,"std::path"],[738,"serde::ser"],[739,"async_process"],[740,"indicatif::progress_bar"],[741,"serde::de"],[742,"core::time"],[743,"std::sync::mutex"],[744,"std::io::error"],[745,"futures_core::stream"],[746,"core::marker"]],"i":"```Db`0Af`````10``Aj0`22`````A``3321h`Al54BfBh5276105435553AdAn`31Bl`8888803815:9438`8`65:943816``62661`20000266`54385:94385:94385:9438`5:94380``EdEf1011100001000100101111110001101010101``ElEn101010001111010110111110001010101``Gh0`00000000000000000000000000```HbHf1H`12022101011201112112012220022211122120120120120I``00`0Hj00101001010100100101000`00`0100`10101010Gd0`Fd11````1101````01`1Ij2IdIfIh3In2154602154646464610215466Fh5Il2465436543624376816866602460246002466662024626824376824376824376824376802`J`0000000000000000000``D`000000000000000000000`Gn00000000000`0000000000`Jf0000000000000000`JjJn00``011Jl21021222022222210210210000020210210210210`Kd0000000````````KfKhKlKnL`LdLb65432105651543206121654321065432105155455432035654321065432106543210236543210``","f":"```````````````````````````````{{bd}f}{{{b{h}}}{{b{j}}}}`{b{{b{c}}}{}}00000{{{b{l}}}{{b{lc}}}{}}00000{{{A`{}{{n{c}}}}Ab}cAd}{{{b{h}}Af}Ah}{{{b{Aj}}}Aj}{{b{b{lc}}}f{}}{bf}{{{b{h}}{b{lAl}}}f}{{{b{Ad}}{b{lAl}}}f}{{{b{An}}{b{`}}}{{Bd{{Bb{B`}}}}}}`{{}Bf}{{{b{lAd}}{b{{Bj{Bh}}}}}{{Bd{{Bb{B`}}}}}}{{{b{Bl}}}{{C`{Bn}}}}`{{{b{Aj}}{b{Aj}}}Ah}{{b{b{c}}}Ah{}}000{{{b{Bl}}}{{Cd{Cb}}}}{{{b{Bh}}{b{lCf}}}Ch}{{{b{Aj}}{b{lCf}}}Ch}{{{b{An}}{b{Cj}}}{{Bd{{Bb{B`}}}}}}{cc{}}00000`{{{b{Aj}}{b{lc}}}fCl}`{{{b{h}}}Ab}{{}c{}}00000{{{b{An}}Bn{b{`}}{b{{Cn{Bn}}}}{Cd{D`}}}{{Bd{{Bb{B`}}}}}}{{{b{h}}}{{Cd{{Bj{An}}}}}}``{{{b{h}}{b{{Bj{Bh}}}}}{{Bj{An}}}}{{{b{lAd}}}{{Bd{{Bb{B`}}}}}}{{{b{h}}}f}{{{b{h}}{b{Db}}}f}{{{b{An}}{b{Db}}}Dd}`3{{{b{Bl}}}{{Df{Bn}}}}{{{b{Bl}}}{{Dh{Bn}}}}1{{{b{lBl}}}{{Bd{{Bb{B`}}}}}}6{{{b{h}}{b{h}}}{{Dn{{Dl{AfDj}}}}}}{{{b{h}}}Aj}````{bc{}}{c{{E`{e}}}{}{}}00000{{}{{E`{c}}}{}}00000{bEb}00000`{{}c{}}000007``{{{b{Ed}}}{{b{j}}}}{b{{b{c}}}{}}0{{{b{l}}}{{b{lc}}}{}}0{{{b{Ed}}Af}Ah}{{{b{Ed}}{b{lAl}}}f}{{b{b{`}}}{{Bd{{Bb{B`}}}}}}`{{b{b{Cj}}}{{Bd{{Bb{B`}}}}}}{cc{}}0{{{b{Ef}}}Bn}{{{b{Ef}}}{{Cd{Bn}}}}1{{{b{Ed}}}Ab}`;;{{bBn{b{`}}{b{{Cn{Bn}}}}{Cd{D`}}}{{Bd{{Bb{B`}}}}}}{{{b{Ed}}}{{Cd{{Bj{An}}}}}}`{{AbBnBnBn{Cd{{Eh{BnBn}}}}Bn{Cd{Bn}}}Ed}{{{b{Ed}}{b{{Bj{Bh}}}}}{{Bj{An}}}}{{{b{Ed}}}f}{{{b{Ed}}{b{Db}}}f}{{{b{Ef}}}{{b{{Bj{Bh}}}}}}{{b{b{Db}}}Dd}{{{b{Ef}}}{{b{Ej}}}}{{{b{Ed}}{b{h}}}{{Dn{{Dl{AfDj}}}}}}{{{b{Ed}}}Aj}{c{{E`{e}}}{}{}}0{{}{{E`{c}}}{}}0{bEb}0{{}c{}}0``{{{b{El}}}{{b{j}}}}{b{{b{c}}}{}}0{{{b{l}}}{{b{lc}}}{}}0{{{b{En}}{b{lAl}}}f}{{{b{El}}}F`}{{{b{En}}{b{{Bj{{Fb{En}}}}}}}El}{{{b{lEn}}{b{{Bj{Bh}}}}}{{Bd{{Bb{B`}}}}}}{cc{}}0{{{b{El}}}{{Bj{h}}}}{{{b{El}}{b{Fd}}}{{Dn{{Bb{Ff}}}}}}{{{b{El}}{b{{Bj{h}}}}{Bj{Fh}}{b{Fj}}}{{Dn{Fl}}}};;{{Ab{Bj{h}}{G`{Fn}}}En}{{{Gb{{Fb{En}}}}}El}`{{{b{lEn}}}{{Bd{{Bb{B`}}}}}}{{{b{El}}Gd}f}{{{b{El}}Db}f}{{{b{El}}}{{Bj{Fh}}}}{{{b{El}}}Gf}{{{b{El}}}Fd}55{c{{E`{e}}}{}{}}0{{}{{E`{c}}}{}}0{bEb}0{{}c{}}0``{{{b{lGh}}}Gj}{{{b{lGh}}{Bj{h}}{G`{Fn}}}{{Bj{{Fb{En}}}}}}`{{{b{lGh}}}Gl}{{{b{Gh}}}{{Bj{Gn}}}}{{{b{lGh}}BnBnBn{Cd{{Eh{BnBn}}}}Bn{Cd{Bn}}}{{Bj{Ed}}}}{{{b{lGh}}BnBnBnBn{Bj{{Fb{H`}}}}{Cd{Bn}}{Cd{Bn}}}{{Bj{Hb}}}}{{{b{lGh}}e}{{Bj{c}}}h{{Ff{Ab}{{Hd{c}}}}}}{{{b{lGh}}e}{{Bj{{Fb{c}}}}}Ad{{A`{}{{n{c}}}}}}{b{{b{c}}}{}}{{{b{l}}}{{b{lc}}}{}}{{}Gh}{{{b{lGh}}}{{Dn{f}}}}{cc{}}`=2`1{{{b{lGh}}c}{{Dn{f}}}{{B`{}{{Hd{f}}}}}}`2202{c{{E`{e}}}{}{}}{{}{{E`{c}}}{}}{bEb}{{}c{}}```{{{b{Hb}}}{{b{j}}}}:::999{{{b{Hb}}Af}Ah}{{{b{Hb}}{b{lAl}}}f}{{b{b{`}}}{{Bd{{Bb{B`}}}}}}``{{{b{H`}}{b{lCf}}}Ch}{{b{b{Cj}}}{{Bd{{Bb{B`}}}}}};;;{{{b{Hf}}}Bn}{{{b{Hf}}}{{Cd{Bn}}}}1{{{b{Hb}}}Ab}`999{{bBn{b{`}}{b{{Cn{Bn}}}}{Cd{D`}}}{{Bd{{Bb{B`}}}}}}{{{b{Hb}}}{{Cd{{Bj{An}}}}}}`{{Abcegi{Bj{{Fb{H`}}}}{Cd{Bn}}{Cd{Bn}}}Hb{{Hh{Bn}}}{{Hh{Bn}}}{{Hh{Bn}}}{{Hh{Bn}}}}{{c{Cd{Bn}}}H`{{Hh{Bn}}}}`{{{b{Hb}}{b{{Bj{Bh}}}}}{{Bj{An}}}}{{{b{Hb}}}f}{{{b{Hb}}{b{Db}}}f}{{{b{Hf}}}{{b{{Bj{Bh}}}}}}{{b{b{Db}}}Dd}{{{b{Hf}}}{{b{Ej}}}}{{{b{Hb}}{b{h}}}{{Dn{{Dl{AfDj}}}}}}{{{b{Hb}}}Aj}{c{{E`{e}}}{}{}}00{{}{{E`{c}}}{}}00{bEb}00{{}c{}}00`````{{bd}f}0{{Hje}Hj{{Hh{Bn}}}{{Hn{}{{Hl{c}}}}}}{{Hjc}Hj{{Hh{Bn}}}}{b{{b{c}}}{}}0{{{b{l}}}{{b{lc}}}{}}0{{HjAb}c{}}{{{b{I`}}}I`}{{{b{Hj}}}Hj}{{b{b{lc}}}f{}}0{bf}07{{{b{I`}}{b{I`}}}Ah}89{cc{}}0<<{{c{Bj{h}}}Hj{{Hh{Ib}}}}{HjHj}`;;`{{Hjc}Hj{{Hh{Ib}}}}{bc{}}0{{Hjc}Hj{{Hh{D`}}}}`{c{{E`{e}}}{}{}}0{{}{{E`{c}}}{}}0{bEb}0{{}c{}}0``````````````````````{{bd}f}0{{{b{Id}}}{{b{j}}}}{{{b{If}}}{{b{j}}}}{{{b{Ih}}}{{b{j}}}}{{{b{Ij}}}{{b{j}}}}{b{{b{c}}}{}}00000{{{b{l}}}{{b{lc}}}{}}00000{{{b{Ij}}}Ij}{{{b{Gd}}}Gd}{{b{b{lc}}}f{}}0{bf}0`{cc{}}00000{{{b{Af}}{Bj{Fh}}}Gd}{{{b{Fh}}}Gf}{{{b{Ij}}}Gf}{{{b{Il}}}{{Bj{h}}}}{{{b{In}}}{{Bj{h}}}}{{{b{If}}}{{Bj{h}}}}{{{b{Ij}}}{{Bj{h}}}}{{{b{Id}}{b{Fd}}}{{Dn{{Bb{Ff}}}}}}{{{b{If}}{b{Fd}}}{{Dn{{Bb{Ff}}}}}}{{{b{Ih}}{b{Fd}}}{{Dn{{Bb{Ff}}}}}}{{{b{Ij}}{b{Fd}}}{{Dn{{Bb{Ff}}}}}}{{{b{Id}}{b{{Bj{h}}}}{Bj{Fh}}{b{Fj}}}{{Dn{Fl}}}}{{{b{If}}{b{{Bj{h}}}}{Bj{Fh}}{b{Fj}}}{{Dn{Fl}}}}{{{b{Ih}}{b{{Bj{h}}}}{Bj{Fh}}{b{Fj}}}{{Dn{Fl}}}}{{{b{Ij}}{b{{Bj{h}}}}{Bj{Fh}}{b{Fj}}}{{Dn{Fl}}}}{{}c{}}00000{{{b{Fh}}}{{Bj{An}}}}{{{b{Ij}}}{{Bj{An}}}}{{{b{Gd}}{b{Fj}}}{{Bd{{Bb{B`}}}}}}{{{b{Ij}}}Ij}``{{{b{Il}}Gd}f}{{{b{In}}Gd}f}{{{b{If}}Gd}f}{{{b{Ij}}Gd}f}{{{b{Il}}Db}f}{{{b{In}}Db}f}{{{b{If}}Db}f}{{{b{Ij}}Db}f}{{{b{Il}}{b{Id}}}f}{{{b{Il}}}{{Bj{Fh}}}}{{{b{In}}}{{Bj{Fh}}}}{{{b{If}}}{{Bj{Fh}}}}{{{b{Ij}}}{{Bj{Fh}}}}````{{{b{Il}}}Fd}{{{b{In}}}Fd}{{{b{If}}}Fd}{{{b{Ij}}}Fd}`{bc{}}0{c{{E`{e}}}{}{}}00000{{}{{E`{c}}}{}}00000{bEb}00000{{}c{}}00000{{{b{Il}}Gd}Gd}{{{b{In}}Gd}Gd}`{{{b{lJ`}}{b{{Bj{{Fb{J`}}}}}}Bn{b{Id}}}{{Dn{f}}}}{b{{b{c}}}{}}{{{b{l}}}{{b{lc}}}{}}{{{b{J`}}{b{lAl}}}f}{{{b{lJ`}}{b{{Bj{Bh}}}}}{{Bd{{Bb{B`}}}}}}{{{b{J`}}}{{Cd{Cb}}}}{cc{}}{{{b{J`}}Bn{b{{Bj{{Fb{J`}}}}}}}Ij}:{{AbIb{Bj{h}}{Cd{Bn}}{Cd{Bn}}{Cd{Bn}}{Cd{Bn}}{Cd{Ib}}Ah{Cd{D`}}{Cd{{G`{Bn}}}}{Cd{{G`{Bn}}}}{Cd{Bn}}{G`{Fn}}}J`}{{{b{lJ`}}}{{Bd{{Bb{B`}}}}}}0{{{b{J`}}}{{Df{Bn}}}}01{c{{E`{e}}}{}{}}{{}{{E`{c}}}{}}{bEb}{{{b{lJ`}}c}fJb}{{}c{}}``{{bd}f}?>{{}Jd}{{{b{D`}}}D`}{{b{b{lc}}}f{}}{bf}```````>5`{bc{}}:986`{{{b{Gn}}}{{b{j}}}}{b{{b{c}}}{}}{{{b{l}}}{{b{lc}}}{}}{{{b{Gn}}Af}Ah}{{{b{Gn}}}Gn}{{{b{Gn}}{b{lAl}}}f}{{{b{Gn}}{b{lCf}}}Ch}{cc{}}{{{b{Gn}}}Ab}`?{{{b{Gn}}}{{Cd{{Bj{An}}}}}}`{AbGn}{{{b{Gn}}{b{{Bj{Bh}}}}}{{Bj{An}}}}{{{b{Gn}}}f}{{{b{Gn}}{b{Db}}}f}{{{b{Gn}}{b{h}}}{{Dn{{Dl{AfDj}}}}}}{{{b{Gn}}}Aj}{c{{E`{e}}}{}{}}{{}{{E`{c}}}{}}{bEb}{{}c{}}`{b{{b{c}}}{}}{{{b{l}}}{{b{lc}}}{}}{{{b{Jf}}}{{C`{Bn}}}}{{{b{lJf}}}f}{{{b{Jf}}}{{Cd{Cb}}}}{cc{}}6{{JhBn{Cd{D`}}}Jf}{{{b{Jf}}}{{Df{Bn}}}}{{{b{Jf}}}{{Dh{Bn}}}}1{{{b{lJf}}}{{Bd{{Bb{B`}}}}}}=<;:0`````````{{bd}f}:::999{{{b{Jj}}}Jj}{{b{b{lc}}}f{}}{bf}{{{b{lJl}}{G`{Ab}}}f}{{{b{Jj}}{b{Jj}}}Ah}{{b{b{c}}}Ah{}}000{{{b{Jj}}{b{lCf}}}Ch}{{{b{Jn}}{b{lCf}}}Ch}==={{}c{}}00{{cg}{{`{{B`{}{{Hd{e}}}}}}}{{Hh{Bn}}}{}{{B`{}{{Hd{e}}}}}}{cf{{K`{Ej}}}}{{ci}{{`{{B`{}{{Hd{e}}}}}}}{{Hh{Bn}}}{}{{B`{}{{Hd{e}}}}}{{Ff{{Bb{Fj}}{Bb{Fj}}}{{Hd{g}}}}}}{{ci}{{`{{B`{}{{Hd{e}}}}}}}{{Hh{Bn}}}{}{{B`{}{{Hd{e}}}}}{{Ff{{Bb{Fj}}}{{Hd{g}}}}}}{{{b{lJl}}{G`{Ab}}BnAh{Cd{Ab}}Ah}{{Dl{Ab{Bj{Kb}}}}}}{bc{}}{c{{E`{e}}}{}{}}00{{}{{E`{c}}}{}}00{bEb}00999{{c{Cd{Ab}}i}{{`{{B`{}{{Hd{e}}}}}}}{{Hh{Bn}}}{}{{B`{}{{Hd{e}}}}}{{Ff{}{{Hd{g}}}}}}`{{{b{Kd}}}Bn}{{{b{Kd}}}{{Cd{Bn}}}}1{{{b{Kd}}}{{Bd{{Bb{B`}}}}}}{{{b{Kd}}}{{b{{Bj{Bh}}}}}}{{{b{Kd}}{b{Db}}}Dd}{{{b{Kd}}}Ib}{{{b{Kd}}}{{b{Ej}}}}````````{b{{b{c}}}{}}000000{{{b{l}}}{{b{lc}}}{}}000000`{{}Kf}{{}Kh}`{c{{E`{Kh}}}Kj}{c{{E`{Kl}}}Kj}{c{{E`{Kn}}}Kj}{c{{E`{L`}}}Kj}{c{{E`{Lb}}}Kj}{{{b{lKf}}}f}{{{b{lLd}}}f}{{{b{L`}}{b{lCf}}}Ch}{{{b{Ld}}{b{lCf}}}Ch}{cc{}}000000{{}c{}}000000```{{Kh{b{lKf}}}{{Dn{Ld}}}}``{{{b{Kh}}c}E`Lf}{{{b{Kl}}c}E`Lf}{{{b{Kn}}c}E`Lf}{{{b{L`}}c}E`Lf}{{{b{Lb}}c}E`Lf}``{c{{E`{e}}}{}{}}000000{{}{{E`{c}}}{}}000000{bEb}000000``9999999{{gAbLh}{{Dn{c}}}{}{{B`{}{{Hd{{Dn{c}}}}}}}{{Lj{}{{Hd{e}}}}}}{{ce}{{Dl{{Bj{{Ln{{Cd{{Ll{Bn}}}}}}}}{Bj{{Ln{{G`{{Dh{Bn}}}}}}}}}}}{{Mb{}{{Hl{{M`{Bn}}}}}}MdMf}{{Fj{Bn}}Md}}","D":"Nn","p":[[1,"reference"],[5,"Private",715],[1,"unit"],[10,"Host",0],[10,"Any",716],[0,"mut"],[17,"Service"],[10,"ServiceBuilder",0],[1,"usize"],[10,"Service",0],[6,"ClientStrategy",0],[1,"bool"],[6,"HostTargetType",0],[5,"ResourceBatch",0],[10,"LaunchedHost",0],[10,"Future",717],[5,"Box",718],[5,"Pin",719],[5,"ResourcePool",0],[5,"ResourceResult",0],[5,"Arc",720],[10,"LaunchedBinary",0],[5,"String",721],[5,"Receiver",722],[1,"i32"],[6,"Option",723],[5,"Formatter",724],[8,"Result",724],[6,"SocketAddr",725],[10,"Hasher",726],[1,"slice"],[5,"TracingOptions",494],[6,"ServerStrategy",0],[6,"ServerBindConfig",727],[5,"UnboundedReceiver",728],[5,"UnboundedSender",728],[8,"HostStrategyGetter",0],[1,"tuple"],[8,"Result",729],[6,"Result",730],[5,"TypeId",716],[5,"AzureHost",133],[5,"LaunchedVirtualMachine",133],[5,"HashMap",731],[1,"str"],[5,"CustomClientPort",174],[5,"CustomService",174],[5,"ConnectedDirect",727],[5,"RwLock",732],[6,"SourcePath",343],[10,"FnOnce",733],[10,"HydroflowServer",343],[10,"Fn",733],[8,"ReverseSinkInstantiator",343],[1,"u16"],[5,"Vec",734],[5,"Weak",720],[6,"ServerConfig",343],[6,"ServerPort",727],[5,"Deployment",211],[8,"AddAzureHostDeploymentBuilder",211],[8,"AddGcpComputeEngineHostDeploymentBuilder",211],[5,"LocalhostHost",518],[5,"GcpNetwork",242],[5,"GcpComputeEngineHost",242],[17,"Output"],[5,"LaunchedComputeEngine",242],[10,"Into",735],[5,"HydroflowCrate",296],[17,"Item"],[10,"IntoIterator",736],[6,"CrateTarget",296],[5,"PathBuf",737],[10,"HydroflowSink",343],[5,"NullSourceSink",343],[5,"DemuxSink",343],[5,"HydroflowPortConfig",343],[10,"HydroflowSource",343],[5,"TaggedSource",343],[5,"HydroflowCrateService",473],[10,"Serialize",738],[8,"NewTracingOptionsBuilder",494],[5,"LaunchedLocalhostBinary",542],[5,"Child",739],[6,"LeafStatus",560],[5,"ProgressTracker",560],[6,"BarTree",560],[10,"AsRef",735],[5,"ProgressBar",740],[10,"LaunchedSshHost",612],[5,"TerraformPool",621],[5,"TerraformBatch",621],[10,"Deserializer",741],[5,"TerraformConfig",621],[5,"TerraformProvider",621],[5,"TerraformOutput",621],[5,"TerraformResultOutput",621],[5,"TerraformResult",621],[10,"Serializer",738],[5,"Duration",742],[10,"FnMut",733],[5,"Sender",722],[5,"Mutex",743],[8,"Result",744],[10,"Stream",745],[10,"Send",746],[10,"Unpin",746]],"r":[[0,133],[2,174],[4,211],[7,242],[11,296],[18,518]],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAFQCNQAAAAEAAwAVABoABgAiAA0AMQACADYAAgA7AAkASwACAFUAAwBcAAAAXgAAAGAAAgBmAB4AhgALAJQABACbABQAsQAIALwAAgDBABIA1gAMAOQAAADmAAEA6gABAO4AFQAHAQQADwEdAC4BAQAyAQoAPgEAAEABAABGAQEASQEOAFoBBwBkASIAjQEGAJUBAgCZAQIAogE+AOIBAADkAQoA8AEDAPUBAgD5AQAA+wEAAP0BAAACAgwAEAIBABMCEQAnAiQAUgIfAHMCEwCIAggAnwIsAA=="}],["hydro_lang",{"t":"EEEEEEEEEEEEEEEEECCCCCECCCQCCCCGGNNNNNNNNNNNNNNSFIFNNNNCNNNCNCNNNNNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKKKKFGRRFGNNNNNNNNMNNMMMNNNNNNNNNNNNNNNNNNNNRRKRKRRRKRRRRKKRRRKRRRRKRKMMMMMMMMMMMMMMNNCMMMMMMCMMMMMMMMMNNNNMFFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFNNOHHONHHHHHHNNNNONNNPPPPPPPFGPPPPPPPPPPPPPGGGPPPPPPPPPIPPPPPFPPNNNNNNNNNNNNNNNNNNNHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOEEPEEPKGEEPREPENNCHNNNCNNNNNCMNNNMNMCNMNNNNNNNCNNNNNKRRRMMJFEFFKRNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNNNNNONNNNNNFFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNNNNNNNNNKKFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCCCHHHFNNNNNNNHNNNJFNNNNNNNNNNNNRRFKNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNMNNNNMNNNNNNNNNNNNNRKFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["Bounded","CLUSTER_SELF_ID","Cluster","ClusterId","ExternalProcess","FlowBuilder","Location","NoOrder","Optional","Process","RUNTIME_CONTEXT","Singleton","Stream","Tick","Timestamped","TotalOrder","Unbounded","boundedness","builder","cycle","deploy","deploy_runtime","hydroflow","ir","location","optional","q","rewrites","runtime_context","singleton","stream","Bounded","Unbounded","borrow","","borrow_mut","","from","","into","","try_from","","try_into","","type_id","","FLOW_USED_MESSAGE","FlowBuilder","FlowState","FlowStateInner","borrow","","borrow_mut","","built","cluster","compile","compile_no_network","compiled","create","deploy","","drop","external_process","finalize","flow_state","from","","into","","new","optimize_with","process","try_from","","try_into","","type_id","","with_cluster","with_default_optimize","with_external","with_process","BuiltFlow","borrow","borrow_mut","compile","compile_no_network","deploy","drop","from","into","ir","optimize_with","try_from","try_into","type_id","with_cluster","with_default_optimize","with_external","with_process","CompiledFlow","CompiledFlowWithId","borrow","","borrow_mut","","from","","hydroflow_ir","into","","take_ir","to_tokens","","try_from","","try_into","","type_id","","with_dynamic_id","DeployFlow","DeployResult","borrow","","borrow_mut","","compile","compile_no_network","connect_sink_bincode","connect_sink_bytes","connect_source_bincode","connect_source_bytes","deploy","drop","from","","get_cluster","get_external","get_process","into","","ir","raw_port","try_from","","try_into","","type_id","","with_cluster","with_external","with_process","CycleCollection","CycleCollectionWithInitial","CycleComplete","DeferTick","ForwardRef","ForwardRefMarker","Location","","TickCycle","TickCycleMarker","borrow","","","","borrow_mut","","","","complete","","complete_next_tick","create_source","","defer_tick","from","","","","into","","","","try_from","","","","try_into","","","","type_id","","","","Cluster","","ClusterSpec","CompileEnv","Deploy","ExternalProcess","","ExternalRawPort","ExternalSpec","GraphId","","InstantiateEnv","","IntoProcessSpec","LocalDeploy","Meta","","","Node","Port","","Process","","ProcessSpec","","RegisterPort","allocate_cluster_port","allocate_external_port","allocate_process_port","as_bincode_sink","as_bincode_source","as_bytes_sink","as_bytes_source","build","","","cluster_ids","cluster_self_id","e2o_connect","e2o_source","has_trivial_node","","in_memory_graph","instantiate","into_process_spec","m2m_connect","m2m_sink_source","m2o_connect","m2o_sink_source","macro_runtime","next_port","o2e_connect","o2e_sink","o2m_connect","o2m_sink_source","o2o_connect","o2o_sink_source","raw_port","register","trivial_cluster","","trivial_process","","update_meta","MultiGraph","MultiNode","SingleNode","SingleProcessGraph","borrow","","","","borrow_mut","","","","clone","","clone_into","","clone_to_uninit","","from","","","","has_trivial_node","","instantiate","","into","","","","next_port","","to_owned","","trivial_cluster","","trivial_process","","try_from","","","","try_into","","","","type_id","","","","update_meta","","DeployRuntime","DeployRuntimeCluster","DeployRuntimeNode","allocate_cluster_port","allocate_external_port","allocate_process_port","as_bincode_sink","as_bincode_source","as_bytes_sink","as_bytes_source","borrow","","","borrow_mut","","","clone","","clone_into","","clone_to_uninit","","cluster_ids","cluster_self_id","e2o_connect","e2o_source","from","","","has_trivial_node","","instantiate","","into","","","m2m_connect","m2m_sink_source","m2o_connect","m2o_sink_source","next_port","","o2e_connect","o2e_sink","o2m_connect","o2m_sink_source","o2o_connect","o2o_sink_source","raw_port","register","to_owned","","trivial_cluster","","trivial_process","","try_from","","","try_into","","","type_id","","","update_meta","","HydroflowPlusMeta","borrow","borrow_mut","cluster_id","cluster_members","cluster_self_id","clusters","default","deploy_e2o","deploy_m2m","deploy_m2o","deploy_o2e","deploy_o2m","deploy_o2o","deserialize","from","into","serialize","subgraph_id","try_from","try_into","type_id","AntiJoin","Building","Chain","CrossProduct","CrossSingleton","CycleSink","CycleSource","DebugExpr","DebugInstantiate","DeferTick","Delta","DestSink","Difference","Enumerate","ExternalNetwork","Filter","FilterMap","Finalized","FlatMap","Fold","FoldKeyed","ForEach","HydroLeaf","HydroNode","HydroSource","Inspect","Iter","Join","Map","Network","Persist","Placeholder","Reduce","ReduceKeyed","SeenTees","Sort","Source","Spin","Stream","Tee","TeeNode","Unique","Unpersist","borrow","","","","","","borrow_mut","","","","","","clone","clone_into","clone_to_uninit","compile_network","","connect_network","","dbg_dedup_tee","deref","emit","","fmt","","","","","","from","","","","","","","into","","","","","","span","to_owned","to_tokens","transform_bottom_up","transform_children","","try_from","","","","","","try_into","","","","","","type_id","","","","","","f","ident","input","","","location_kind","sink","acc","","deserialize_fn","f","","","","","","","from_key","from_location","ident","init","","inner","input","","","","","","","","","","","instantiate_fn","is_static","location_kind","","serialize_fn","source","to_key","to_location","CanSend","Cluster","","ClusterId","ExternalProcess","","Location","LocationId","NoTick","Process","","Root","Tick","","Timestamped","borrow","borrow_mut","can_send","check_matching_location","clone","clone_into","clone_to_uninit","cluster","eq","equivalent","","","","external_process","flow_state","fmt","forward_ref","from","id","into","is_top_level","process","raw_id","root","","singleton","source_interval","source_interval_delayed","source_iter","source_stream","spin","tick","","to_owned","try_from","try_into","type_id","CanSend","In","Out","OutStrongestOrder","is_demux","tagged_type","CLUSTER_SELF_ID","Cluster","ClusterId","ClusterIds","ClusterSelfId","IsCluster","Tag","borrow","","","borrow_mut","","","clone","","","clone_into","","","clone_to_uninit","","","cluster_id","flow_state","from","","","id","into","","","is_demux","","is_top_level","members","root","tagged_type","","to_owned","","","to_tokens","","try_from","","","try_into","","","type_id","","","ClusterId","borrow","borrow_mut","clone","clone_into","clone_to_uninit","deserialize","eq","equivalent","","","","fmt","","from","from_raw","hash","into","raw_id","serialize","to_owned","to_string","try_from","try_into","type_id","ExternalBincodeSink","ExternalBincodeStream","ExternalBytesPort","ExternalProcess","borrow","","","","borrow_mut","","","","clone","clone_into","clone_to_uninit","flow_state","from","","","","id","into","","","","is_top_level","root","source_external_bincode","source_external_bytes","to_owned","try_from","","","","try_into","","","","type_id","","","","Process","borrow","borrow_mut","clone","clone_into","clone_to_uninit","flow_state","from","id","into","is_demux","","","is_top_level","root","tagged_type","","","to_owned","try_from","try_into","type_id","NoTick","NoTimestamp","Tick","Timestamped","borrow","","borrow_mut","","clone","","clone_into","","clone_to_uninit","","cycle","cycle_with_initial","flow_state","","forward_ref","forward_ref_timestamped","from","","id","","into","","is_top_level","","outer","root","","singleton","singleton_first_tick","spin_batch","to_owned","","try_from","","try_into","","type_id","","Optional","all_ticks","borrow","borrow_mut","clone","clone_into","clone_to_uninit","complete","","","continue_if","continue_unless","create_source","","","defer_tick","","delta","drop_timestamp","filter","filter_map","flat_map_ordered","flat_map_unordered","flatten_ordered","flatten_unordered","from","","","into","into_singleton","into_stream","latest","latest_tick","map","persist","sample_eager","sample_every","some","then","timestamped","to_owned","try_from","try_into","type_id","union","unwrap_or","zip","persist_pullup","profiler","properties","persist_pullup","increment_counter","profiling","PropertyDatabase","add_commutative_tag","borrow","borrow_mut","default","from","into","is_tagged_commutative","properties_optimize","try_from","try_into","type_id","RUNTIME_CONTEXT","RuntimeContext","borrow","borrow_mut","clone","clone_into","clone_to_uninit","from","into","to_owned","to_tokens","try_from","try_into","type_id","Location","Out","Singleton","ZipResult","all_ticks","borrow","borrow_mut","clone","clone_into","clone_to_uninit","complete","","","continue_if","continue_unless","create_source","","","defer_tick","","delta","drop_timestamp","filter","filter_map","flat_map_ordered","flat_map_unordered","from","","into","into_stream","latest","latest_tick","make","","","","","map","other_ir_node","","","","","other_location","","","","","persist","sample_eager","sample_every","timestamped","to_owned","try_from","try_into","type_id","zip","Min","MinOrder","NoOrder","Stream","TotalOrder","all_ticks","anti_join","assume_ordering","borrow","","","borrow_mut","","","broadcast_bincode","broadcast_bincode_interleaved","broadcast_bytes","broadcast_bytes_interleaved","chain","clone","clone_into","clone_to_uninit","cloned","complete","","continue_if","continue_unless","count","create_source","","cross_product","cross_singleton","decouple_cluster","decouple_process","defer_tick","","delta","dest_sink","drop_timestamp","enumerate","filter","filter_map","filter_not_in","first","flat_map_ordered","flat_map_unordered","flatten_ordered","flatten_unordered","fold","fold_commutative","fold_keyed","fold_keyed_commutative","for_each","from","","","","inspect","into","","","join","keys","last","map","max","max_by_key","min","persist","reduce","reduce_commutative","reduce_keyed","reduce_keyed_commutative","round_robin_bincode","round_robin_bincode_interleaved","round_robin_bytes","round_robin_bytes_interleaved","sample_every","send_bincode","send_bincode_external","send_bincode_interleaved","send_bytes","send_bytes_external","send_bytes_interleaved","sort","tick_batch","timeout","timestamp_source","timestamped","to_owned","try_from","","","try_into","","","type_id","","","union","","unique"],"q":[[0,"hydro_lang"],[31,"hydro_lang::boundedness"],[47,"hydro_lang::builder"],[84,"hydro_lang::builder::built"],[102,"hydro_lang::builder::compiled"],[123,"hydro_lang::builder::deploy"],[155,"hydro_lang::cycle"],[199,"hydro_lang::deploy"],[263,"hydro_lang::deploy::in_memory_graph"],[315,"hydro_lang::deploy::macro_runtime"],[382,"hydro_lang::deploy_runtime"],[404,"hydro_lang::ir"],[513,"hydro_lang::ir::HydroLeaf"],[520,"hydro_lang::ir::HydroNode"],[555,"hydro_lang::location"],[607,"hydro_lang::location::can_send"],[613,"hydro_lang::location::cluster"],[665,"hydro_lang::location::cluster::cluster_id"],[690,"hydro_lang::location::external_process"],[732,"hydro_lang::location::process"],[754,"hydro_lang::location::tick"],[796,"hydro_lang::optional"],[843,"hydro_lang::rewrites"],[846,"hydro_lang::rewrites::persist_pullup"],[847,"hydro_lang::rewrites::profiler"],[849,"hydro_lang::rewrites::properties"],[861,"hydro_lang::runtime_context"],[875,"hydro_lang::singleton"],[932,"hydro_lang::stream"],[1034,"core::result"],[1035,"core::any"],[1036,"alloc::vec"],[1037,"core::ops::function"],[1038,"hydroflow_lang::graph::hydroflow_graph"],[1039,"alloc::collections::btree::map"],[1040,"proc_macro2"],[1041,"core::option"],[1042,"stageleft"],[1043,"futures_sink"],[1044,"alloc::boxed"],[1045,"core::pin"],[1046,"serde::ser"],[1047,"serde::de"],[1048,"futures_core::stream"],[1049,"core::future::future"],[1050,"core::marker"],[1051,"syn::expr"],[1052,"syn::stmt"],[1053,"alloc::string"],[1054,"hydroflow::util::deploy"],[1055,"std::collections::hash::map"],[1056,"hydroflow_lang::graph::flat_graph_builder"],[1057,"core::cell"],[1058,"core::fmt"],[1059,"core::clone"],[1060,"tokio::time::instant"],[1061,"core::time"],[1062,"core::iter::traits::collect"],[1063,"syn::ty"],[1064,"core::hash"],[1065,"bytes::bytes"],[1066,"core::convert"],[1067,"futures_channel::mpsc"],[1068,"core::cmp"],[1069,"stageleft_macro"]],"i":"`````````````````````````````````KjMn101010101010````A@fj10`000`0`0000010100001010100000`Aj0000000000000000``nCn10101101101010101``BhA`1011000011100001010101010111``````FfFj``ElF`EjEn3210Ed2165Fb54325432543254325432BjAf`0`100`100Hb``210`1021`C``222Fl000G`BlBn666676`546666`56666663376765````A@hA@jHjHl32101010103210321032101010323232103210321010```A@l00Hn00010I`210101010222221022102102222102222221110222221021021010`Id00``00``````00000000JdJj111An2``22022Kb3323331```303333333`33003`332K`In2354102350003535`0354102354100235410235000535410235410235410235A@nAA`1AAb110AAdAAfAAhAAjAAlAAnAB`ABbABdABf77ABh:9ABj8765ABl5<;43::0ABn3;0;;``Eh``0````0Fh`1`11``111`11111`0101010`101000000`01111`A@d0000``````AC`lM`Mb210210210210`22102210222222221010210210210`Md00000000000000000000000````DnDbE`Ah3210000032100321000000321032103210`Bf00000000000000000000````MlLl101010100010001010101001000010101010`N`000000000000000000000000000000000000000000000```````O`000000`000``Ob00000000000ACb0``Kl0000000000000000000000000001000001000010000000000000Oh````Lb00OjNh21022222222222222222222222222222222222222221022210222222222222222222222222222222102102102222","f":"`````````````````````````````````{b{{b{c}}}{}}0{{{b{d}}}{{b{dc}}}{}}0{cc{}}0{{}c{}}0{c{{f{e}}}{}{}}0{{}{{f{c}}}{}}0{bh}0````6655`{{{b{j}}}{{l{c}}}{}}{{jb}n}{jn}`{{}j}`{{j{b{d}}}{{A`{c}}}{{Af{}{{Ab{Ad}}}}}}{{{b{dj}}}Ad}{{{b{j}}}{{Ah{c}}}{}}{jAj}{{{b{j}}}{{b{Al}}}}==<<5{{jc}Aj{{Bd{{B`{An}}}{{Bb{{B`{An}}}}}}}}{{{b{j}}}{{Bf{c}}}{}}==<<;;{{j{b{{l{c}}}}g}{{Bh{e}}}{}Bj{{Bl{e}}}}{j{{Bh{c}}}Bj}{{j{b{{Ah{c}}}}g}{{Bh{e}}}{}Bj{{Bn{e}}}}{{j{b{{Bf{c}}}}g}{{Bh{e}}}{}Bj{{C`{e}}}}`{b{{b{c}}}{}}{{{b{d}}}{{b{dc}}}{}}{{Ajb}n}{Ajn}{{Aj{b{d}}}{{A`{c}}}{{Af{}{{Ab{Ad}}}}}}{{{b{dAj}}}Ad}{cc{}}{{}c{}}{{{b{Aj}}}{{b{{B`{An}}}}}}{{Ajc}Aj{{Bd{{B`{An}}}{{Bb{{B`{An}}}}}}}}{c{{f{e}}}{}{}}{{}{{f{c}}}{}}{bh}{{Aj{b{{l{c}}}}g}{{Bh{e}}}{}Bj{{Bl{e}}}}{Aj{{Bh{c}}}Bj}{{Aj{b{{Ah{c}}}}g}{{Bh{e}}}{}Bj{{Bn{e}}}}{{Aj{b{{Bf{c}}}}g}{{Bh{e}}}{}Bj{{C`{e}}}}``{b{{b{c}}}{}}0{{{b{d}}}{{b{dc}}}{}}0<<{{{b{{n{c}}}}}{{b{{Cf{CbCd}}}}}{}}<<{{{n{c}}}{{Cf{CbCd}}}{}}{{{n{Ad}}{b{c}}}{{Cl{{Cj{Ch}}{Cj{Ch}}}}}{}}{{Cn{b{c}}}{{Cl{{Cj{Ch}}{Cj{Ch}}}}}{}}<<;;::{{{n{Cb}}c}Cn{{D`{CbAd}}}}``6655{{{Bh{c}}b}nAf}{{{Bh{c}}}nBj}{{{b{{A`{c}}}}{Db{e}}}{{Dh{{Df{Dd}}}}}Af{DjDl}}{{{b{{A`{c}}}}Dn}{{Dh{{Df{Dd}}}}}Af}{{{b{{A`{c}}}}{E`{e}}}{{Dh{{Df{Eb}}}}}Af{DjDl}}{{{b{{A`{c}}}}Dn}{{Dh{{Df{Eb}}}}}Af}{{{Bh{c}}{b{d}}}{{A`{c}}}{{Af{}{{Ab{Ad}}}}}}{{{b{d{Bh{c}}}}}AdBj}{cc{}}0{{{b{{A`{c}}}}{b{{l{e}}}}}bAf{}}{{{b{{A`{c}}}}{b{{Ah{e}}}}}bAf{}}{{{b{{A`{c}}}}{b{{Bf{e}}}}}bAf{}}{{}c{}}0{{{b{{Bh{c}}}}}{{b{{B`{An}}}}}Bj}{{{b{{A`{c}}}}Dn}{}Af}{c{{f{e}}}{}{}}0{{}{{f{c}}}{}}0{bh}0{{{Bh{c}}{b{{l{e}}}}g}{{Bh{c}}}Bj{}{{Bl{c}}}}{{{Bh{c}}{b{{Ah{e}}}}g}{{Bh{c}}}Bj{}{{Bn{c}}}}{{{Bh{c}}{b{{Bf{e}}}}g}{{Bh{c}}}Bj{}{{C`{c}}}}``````````{b{{b{c}}}{}}000{{{b{d}}}{{b{dc}}}{}}000{{EdEfEh}Ad}{{{Ej{c}}c}Ad{{Ed{El}}}}{{{En{c}}c}Ad{{Ed{F`}}Fb}}{{Efc}{{Ff{}{{Fd{c}}}}}Fh}{{Ef{Fj{}{{Fd{c}}}}c}{{Fj{}{{Fd{c}}}}}Fh}{FbFb}{cc{}}000{{}c{}}000????>>>>====``````````````````````````{{{b{c}}}e{}{}}00{{{b{Fl}}Cb}{{`{{Fn{}{{Bb{{Dh{{Df{Dd}}}}}}}}}}}}{{{b{Fl}}Cb}{{`{{Fn{}{{Bb{{Dh{{Df{Eb}}}}}}}}}}}}10{{G`Cb{b{Gb}}}}{{BlCb{b{Gb}}}}{{BnCb{b{Gb}}}}{{{b{c}}Cb}{{`{{D`{{b{{B`{Gd}}}}Ad}}Gf}}}{}}{{{b{c}}}{{`{{D`{GdAd}}Gf}}}{}}{{{b{c}}{b{e}}{b{g}}{b{e}}}{{Df{Bd}}}{}{}{}}{{{b{c}}{b{e}}{b{g}}{b{i}}{b{g}}}Gh{}{}{}{}}{{}Gj}0`{{{b{{Hb{}{{Gl{c}}{Gn{e}}{H`{g}}}}}}{b{dg}}{b{de}}Cd{B`{Hd}}}Ad{}{}{}}{{{C`{}{{Hf{c}}}}}c{{G`{e}}}{BjHh}}{{{b{c}}{b{e}}{b{c}}{b{e}}}{{Df{Bd}}}{}{}}{{{b{c}}{b{e}}{b{g}}{b{e}}{b{g}}}{{Cl{GhGh}}}{}{}{}}6{{{b{c}}{b{e}}{b{g}}{b{i}}{b{g}}}{{Cl{GhGh}}}{}{}{}{}}`{{{b{{Hb{}{{Gl{c}}{Gn{e}}{H`{g}}}}}}}c{}{}{}}878132{{{b{Fl}}Cb}}{{{b{Fl}}Cb}Ad}{Cbc{}}000{{{b{d{Hb{}{{Gl{c}}{Gn{e}}{H`{g}}}}}}{b{e}}}Ad{}{}{}}````{b{{b{c}}}{}}000{{{b{d}}}{{b{dc}}}{}}000{{{b{Hj}}}Hj}{{{b{Hl}}}Hl}{{b{b{dc}}}Ad{}}0{bAd}0{cc{}}000{{}Gj}0{{{b{Hj}}{b{dc}}{b{de}}Cd{B`{Hd}}}Ad{}{}}{{{b{Hl}}{b{dc}}{b{de}}Cd{B`{Hd}}}Ad{}{}}{{}c{}}000{{{b{Hj}}}Ad}{{{b{Hl}}}Ad}{bc{}}0????{c{{f{e}}}{}{}}000{{}{{f{c}}}{}}000{bh}000{{{b{dHj}}{b{c}}}Ad{}}{{{b{dHl}}{b{c}}}Ad{}}```{{{b{c}}}e{}{}}00{{{b{Hn}}Cb}{{`{{Fn{}{{Bb{{Dh{{Df{Dd}}}}}}}}}}}}{{{b{Hn}}Cb}{{`{{Fn{}{{Bb{{Dh{{Df{Eb}}}}}}}}}}}}10{b{{b{c}}}{}}00{{{b{d}}}{{b{dc}}}{}}00{{{b{Hn}}}Hn}{{{b{I`}}}I`}{{b{b{dc}}}Ad{}}0{bAd}0{{{b{c}}Cb}{{`{{D`{{b{{B`{Gd}}}}Ad}}Gf}}}{}}{{{b{c}}}{{`{{D`{GdAd}}Gf}}}{}}{{{b{c}}{b{e}}{b{g}}{b{e}}}{{Df{Bd}}}{}{}{}}{{{b{c}}{b{e}}{b{g}}{b{i}}{b{g}}}Gh{}{}{}{}}{cc{}}00{{}Gj}0{{{b{Hn}}{b{dc}}{b{de}}Cd{B`{Hd}}}Ad{}{}}{{{b{I`}}{b{dc}}{b{de}}Cd{B`{Hd}}}Ad{}{}}{{}c{}}00{{{b{c}}{b{e}}{b{c}}{b{e}}}{{Df{Bd}}}{}{}}{{{b{c}}{b{e}}{b{g}}{b{e}}{b{g}}}{{Cl{GhGh}}}{}{}{}}8{{{b{c}}{b{e}}{b{g}}{b{i}}{b{g}}}{{Cl{GhGh}}}{}{}{}{}}{{{b{Hn}}}Ib}{{{b{I`}}}Ib};:;243{{{b{Hn}}Cb}}{{{b{Hn}}Cb}Ad}{bc{}}0{Cb}{Cbc{}}01{c{{f{e}}}{}{}}00{{}{{f{c}}}{}}00{bh}00{{{b{dHn}}{b{c}}}Ad{}}{{{b{dI`}}{b{c}}}Ad{}}`{b{{b{c}}}{}}{{{b{d}}}{{b{dc}}}{}}`{{{Ih{{b{{If{Id}}}}}}Cb}{{`{{D`{{b{{B`{Gd}}}}Ad}}Gf}}}}{{{Ih{{b{{If{Id}}}}}}}{{`{{D`{GdAd}}Gf}}}}`{{}Id}{{{Ih{{b{{If{Id}}}}}}{b{Gb}}{b{Gb}}}Gh}{{{Ih{{b{{If{Id}}}}}}{b{Gb}}{b{Gb}}}{{Cl{GhGh}}}}0100{c{{f{Id}}}Ij}{cc{}}{{}c{}}{{{b{Id}}c}fIl}`?>=```````````````````````````````````````````::::::999999{{{b{In}}}In}{{b{b{dc}}}Ad{}}{bAd}{{Anb{b{dJ`}}{b{{Jb{Cb}}}}{b{{Jb{Cb}}}}{b{{Jb{Cb}}}}}An}{{{b{dJd}}b{b{dJ`}}{b{{Jb{Cb}}}}{b{{Jb{Cb}}}}{b{{Jb{Cb}}}}}Ad}{{An{b{dJ`}}}An}{{{b{dJd}}{b{dJ`}}}Ad}{ec{}{{Bd{}{{Bb{c}}}}}}{{{b{In}}}{{b{c}}}{}}{{{b{An}}{b{d{Cf{CbJf}}}}{b{d{Jb{Jh{Cl{EfCb}}}}}}{b{dCb}}}Ad}{{{b{Jd}}{b{d{Cf{CbJf}}}}{b{d{Jb{Jh{Cl{EfCb}}}}}}{b{dCb}}}{{Cl{EfCb}}}}{{{b{Jj}}{b{dJl}}}Jn}{{{b{K`}}{b{dJl}}}Jn}{{{b{In}}{b{dJl}}}Jn}{{{b{Kb}}{b{dJl}}}Jn}{{{b{An}}{b{dJl}}}Jn}{{{b{Jd}}{b{dJl}}}Jn}{cc{}}00{GhIn}111{{}c{}}00000{bKd}{bc{}}{{{b{In}}{b{dCh}}}Ad}{{{b{dJd}}e{b{dJ`}}{b{dc}}}Ad{}{{Kf{{b{dJd}}{b{dc}}}}Gf}}{{Anc{b{dJ`}}}An{{Kf{{b{dJd}}{b{dJ`}}}}}}{{{b{dJd}}c{b{dJ`}}}Ad{{Kf{{b{dJd}}{b{dJ`}}}}}}{c{{f{e}}}{}{}}00000{{}{{f{c}}}{}}00000{bh}00000`````````````````````````````````````````````````````````{b{{b{c}}}{}}{{{b{d}}}{{b{dc}}}{}}`{{{b{c}}{b{c}}}AdFh}{{{b{Eh}}}Eh}{{b{b{dc}}}Ad{}}{bAd}`{{{b{Eh}}{b{Eh}}}Gj}{{b{b{c}}}Gj{}}000`{{{b{{Fh{}{{Kh{c}}}}}}}{{b{Al}}}Fh}{{{b{Eh}}{b{dJl}}}Jn}{{{b{{Fh{}{{Kh{c}}}}}}}{{Cl{{Ej{e}}e}}}Fh{{Ff{El}{{Fd{{Fh{}{{Kh{c}}}}}}}}}}{cc{}}{{{b{{Fh{}{{Kh{c}}}}}}}EhFh}{{}c{}}{{}Gj}`{{{b{Eh}}}Cb}{{{b{{Fh{}{{Kh{c}}}}}}}cFh}{{{b{Eh}}}{{b{Eh}}}}{{{b{{Fh{}{{Kh{c}}}}}}g}{{Kl{e{Fh{}{{Kh{c}}}}Kj}}}FhKn{{D`{e{Fh{}{{Kh{c}}}}}}}}{{{b{{Fh{}{{Kh{c}}}}}}e}{{Lb{L`{Fh{}{{Kh{c}}}}Kj}}}Fh{{D`{Ld{Fh{}{{Kh{c}}}}}}Gf}}{{{b{{Fh{}{{Kh{c}}}}}}eg}{{Lb{L`{Fh{}{{Kh{c}}}}Kj}}}Fh{{D`{Ld{Fh{}{{Kh{c}}}}}}Gf}{{D`{Ld{Fh{}{{Kh{c}}}}}}Gf}}{{{b{{Fh{}{{Kh{c}}}}}}i}{{Lb{e{Fh{}{{Kh{c}}}}Kj}}}Fh{}{{Lh{}{{Lf{e}}}}}{{D`{g{Fh{}{{Kh{c}}}}}}}}{{{b{{Fh{}{{Kh{c}}}}}}i}{{Lb{e{Fh{}{{Kh{c}}}}Kj}}}Fh{}{{Eb{}{{Lf{e}}}}Lj}{{D`{g{Fh{}{{Kh{c}}}}}}}}{{{b{{Fh{}{{Kh{c}}}}}}}{{Lb{Ad{Fh{}{{Kh{c}}}}Kj}}}Fh}`{{{b{{Fh{}{{Kh{c}}}}}}}{{Ll{{Fh{}{{Kh{c}}}}}}}Fh}{bc{}}{c{{f{e}}}{}{}}{{}{{f{c}}}{}}{bh}````>{{}{{Cj{Ln}}}}```````{b{{b{c}}}{}}00{{{b{d}}}{{b{dc}}}{}}00{{{b{{l{c}}}}}{{l{c}}}{}}{{{b{{M`{c}}}}}{{M`{c}}}{}}{{{b{Mb}}}Mb}{{b{b{dc}}}Ad{}}00{bAd}00`{{{b{{l{c}}}}}{{b{Al}}}{}}{cc{}}00{{{b{{l{c}}}}}Eh{}}{{}c{}}00{{}Gj}00{{{b{{l{c}}}}}{{M`{c}}}{}}{{{b{{l{c}}}}}e{}{}}>>{bc{}}00{{{M`{c}}{b{e}}}{{Cl{{Cj{Ch}}{Cj{Ch}}}}}{}{}}{{Mb{b{c}}}{{Cl{{Cj{Ch}}{Cj{Ch}}}}}Fh}{c{{f{e}}}{}{}}00{{}{{f{c}}}{}}00{bh}00`{b{{b{c}}}{}}{{{b{d}}}{{b{dc}}}{}}{{{b{{Md{c}}}}}{{Md{c}}}{}}{{b{b{dc}}}Ad{}}{bAd}{c{{f{{Md{e}}}}}Ij{}}{{{b{{Md{c}}}}{b{{Md{c}}}}}Gj{}}{{b{b{c}}}Gj{}}000{{{b{{Md{c}}}}{b{dJl}}}Jn{}}0{cc{}}{Gd{{Md{c}}}{}}{{{b{{Md{c}}}}{b{de}}}Ad{}Mf}{{}c{}}`{{{b{{Md{c}}}}e}f{}Il}{bc{}}{bIb}{c{{f{e}}}{}{}}{{}{{f{c}}}{}}{bh}````{b{{b{c}}}{}}000{{{b{d}}}{{b{dc}}}{}}000{{{b{{Ah{c}}}}}{{Ah{c}}}{}}{{b{b{dc}}}Ad{}}{bAd}{{{b{{Ah{c}}}}}{{b{Al}}}{}}????{{{b{{Ah{c}}}}}Eh{}}===={{}Gj}{{{b{{Ah{c}}}}}e{}{}}{{{b{{Ah{c}}}}{b{e}}}{{Cl{{Db{g}}{Lb{geKj}}}}}{}{FhMh}{DjDl}}{{{b{{Ah{c}}}}{b{e}}}{{Cl{Dn{Lb{MjeKj}}}}}{}{FhMh}}?====<<<<;;;;`:9{{{b{{Bf{c}}}}}{{Bf{c}}}{}}87{{{b{{Bf{c}}}}}{{b{Al}}}{}}{cc{}}{{{b{{Bf{c}}}}}Eh{}}{{}c{}}8888{{{b{{Bf{c}}}}}e{}{}}{{}{{Cj{Ln}}}}00{bc{}}{c{{f{e}}}{}{}}{{}{{f{c}}}{}}{bh}````{b{{b{c}}}{}}0{{{b{d}}}{{b{dc}}}{}}0{{{b{{Ml{c}}}}}{{Ml{c}}}Kn}{{{b{{Ll{c}}}}}{{Ll{c}}}Kn}{{b{b{dc}}}Ad{}}0{bAd}0{{{b{{Ll{c}}}}}{{Cl{{En{e}}e}}}{MhFh}{{Ff{F`}{{Fd{{Ll{c}}}}}}Fb}}{{{b{{Ll{c}}}}e}{{Cl{{En{e}}e}}}{MhFh}{{Fj{F`}{{Fd{{Ll{c}}}}}}Fb}}{{{b{{Ml{c}}}}}{{b{Al}}}Fh}{{{b{{Ll{c}}}}}{{b{Al}}}Fh}{{{b{{Ll{c}}}}}{{Cl{{Ej{e}}e}}}{MhFh}{{Ff{El}{{Fd{{Ll{c}}}}}}}}{{{b{{Ll{c}}}}}{{Cl{{Ej{e}}e}}}Fh{{Ff{El}{{Fd{{Ml{c}}}}}}}}{cc{}}0{{{b{{Ml{c}}}}}EhFh}{{{b{{Ll{c}}}}}EhFh}{{}c{}}0{{}Gj}0{{{b{{Ll{c}}}}}{{b{c}}}Fh}{{{b{{Ml{c}}}}}eFh{}}{{{b{{Ll{c}}}}}eFh{}}{{{b{{Ll{c}}}}g}{{Kl{e{Ll{c}}Mn}}}{MhFh}Kn{{D`{ec}}}}{{{b{{Ll{c}}}}g}{{N`{e{Ll{c}}Mn}}}{MhFh}Kn{{D`{e{Ll{c}}}}}}{{{b{{Ll{c}}}}e}{{Lb{Ad{Ll{c}}Mn}}}{MhNbFh}{{D`{Cbc}}Gf}}{bc{}}0{c{{f{e}}}{}{}}0{{}{{f{c}}}{}}0{bh}0`{{{N`{c{Ll{e}}Mn}}}{{Lb{c{Ml{e}}Kj}}}{}Fh}{b{{b{c}}}{}}{{{b{d}}}{{b{dc}}}{}}{{{b{{N`{ceg}}}}}{{N`{ceg}}}KnFh{}}{{b{b{dc}}}Ad{}}{bAd}{{{N`{c{Ll{e}}Mn}}EfEh}Ad{}Fh}{{{N`{ceg}}EfEh}Ad{}{FhMh}{}}1{{{N`{ceMn}}{N`{geMn}}}{{N`{ceMn}}}{}Fh{}}0{{Ef{Ll{c}}}{{N`{e{Ll{c}}Mn}}}Fh{}}0{{Efc}{{N`{ecg}}}{FhMh}{}{}}{{{N`{c{Ll{e}}Mn}}}{{N`{c{Ll{e}}Mn}}}{}Fh}00{{{N`{c{Ml{e}}g}}}{{N`{ceg}}}{}{FhMh}{}}{{{N`{ceg}}k}{{N`{ceg}}}{}Fh{}{{Nd{{b{c}}}{{Bb{Gj}}}}}{{Nf{ie}}}}{{{N`{ceg}}m}{{N`{ieg}}}{}Fh{}{}{{Nd{c}{{Bb{{Cj{i}}}}}}}{{Nf{ke}}}}{{{N`{ceg}}o}{{Lb{ieg}}}{}Fh{}{}{{Lh{}{{Lf{i}}}}}{{Nd{c}{{Bb{k}}}}}{{Nf{me}}}}{{{N`{ceg}}o}{{Lb{iegNh}}}{}Fh{}{}{{Lh{}{{Lf{i}}}}}{{Nd{c}{{Bb{k}}}}}{{Nf{me}}}}{{{N`{egi}}}{{Lb{cgi}}}{}{{Lh{}{{Lf{c}}}}}Fh{}}{{{N`{egi}}}{{Lb{cgiNh}}}{}{{Lh{}{{Lf{c}}}}}Fh{}}{{{N`{ceMn}}}{{N`{ceKj}}}{}Fh}{{{Kl{ceg}}}{{N`{ceg}}}{}Fh{}}{cc{}}{{}c{}}{{{N`{ceg}}}{{Kl{{Cj{c}}eg}}}KnFh{}}{{{N`{ceMn}}}{{Lb{ceMn}}}{}Fh}{{{N`{c{Ll{e}}Mn}}}{{N`{c{Ml{e}}Kj}}}{}Fh}{{{N`{c{Ml{e}}g}}}{{N`{c{Ll{e}}Mn}}}{}{FhMh}{}}{{{N`{ceg}}m}{{N`{ieg}}}{}Fh{}{}{{Nd{c}{{Bb{i}}}}}{{Nf{ke}}}}{{{N`{c{Ll{e}}Mn}}}{{Lb{c{Ll{e}}Mn}}}{}Fh}{{{N`{ceg}}}{{Lb{ceKj}}}{}{FhMh}{}}{{{N`{ceg}}i}{{Lb{ceKj}}}{}{NbFhMh}{}{{D`{Lde}}Gf}}:{{{N`{ceMn}}{Kl{geMn}}}{{N`{geMn}}}{}Fh{}}{{{N`{ceg}}{b{{Ll{e}}}}}{{N`{c{Ml{e}}g}}}{}{FhMh}{}}{bc{}}{c{{f{e}}}{}{}}{{}{{f{c}}}{}}{bh}{{{N`{ceg}}{N`{ceg}}}{{N`{ceg}}}{}Fh{}}{{{N`{ceg}}{Kl{ceg}}}{{Kl{ceg}}}{}Fh{}}{{{N`{ceg}}k}{{N`{{Cl{ci}}eg}}}{}Fh{}Kn{{Nj{{N`{ieg}}}}}}```{{{B`{An}}}{{B`{An}}}}{{{b{dNl}}}Ad}{{{B`{An}}{Ih{{b{{Jh{{B`{Nl}}}}}}}}{Ih{{b{{Jh{{Nn{{Cl{CbNl}}}}}}}}}}}{{B`{An}}}}`{{{b{dO`}}k{b{i}}}k{}{}{{Nd{{b{dc}}e}}}{}{{D`{gi}}Kn}}{b{{b{c}}}{}}{{{b{d}}}{{b{dc}}}{}}{{}O`}{cc{}}{{}c{}}{{{b{O`}}{b{Gh}}}Gj}{{{B`{An}}{b{O`}}}{{B`{An}}}}{c{{f{e}}}{}{}}{{}{{f{c}}}{}}{bh}``98{{{b{Ob}}}Ob}{{b{b{dc}}}Ad{}}{bAd}98{bc{}}{{Ob{b{c}}}{{Cl{{Cj{Ch}}{Cj{Ch}}}}}Fh}765````{{{Kl{c{Ll{e}}Mn}}}{{Lb{c{Ml{e}}Kj}}}{}Fh}?>{{{b{{Kl{ceg}}}}}{{Kl{ceg}}}KnFh{}}54{{{Kl{c{Ll{e}}Mn}}EfEh}Ad{}Fh}{{{Kl{ceg}}EfEh}Ad{}{FhMh}{}}1{{{Kl{ceg}}{N`{ieMn}}}{{N`{ceMn}}}{}Fh{}{}}0{{Ef{Ll{c}}}{{Kl{e{Ll{c}}Mn}}}Fh{}}{{Ef{Kl{c{Ll{e}}Mn}}{Ll{e}}}{{Kl{c{Ll{e}}Mn}}}{}Fh}{{Efc}{{Kl{ecg}}}{FhMh}{}{}}{{{Kl{c{Ll{e}}Mn}}}{{Kl{c{Ll{e}}Mn}}}{}Fh}0{{{Kl{c{Ll{e}}Mn}}}{{N`{c{Ll{e}}Mn}}}{}Fh}{{{Kl{c{Ml{e}}g}}}{{N`{ceg}}}{}{FhMh}{}}{{{Kl{ceg}}k}{{N`{ceg}}}{}Fh{}{{Nd{{b{c}}}{{Bb{Gj}}}}}{{Nf{ie}}}}{{{Kl{ceg}}m}{{N`{ieg}}}{}Fh{}{}{{Nd{c}{{Bb{{Cj{i}}}}}}}{{Nf{ke}}}}{{{Kl{ceg}}o}{{Lb{ieg}}}{}Fh{}{}{{Lh{}{{Lf{i}}}}}{{Nd{c}{{Bb{k}}}}}{{Nf{me}}}}0{cc{}}{{{Kl{ceMn}}}{{Kl{ceKj}}}{}Fh}{{}c{}}{{{Kl{c{Ll{e}}Mn}}}{{Lb{c{Ll{e}}Mn}}}{}Fh}{{{Kl{c{Ll{e}}Mn}}}{{Kl{c{Ml{e}}Kj}}}{}Fh}{{{Kl{c{Ml{e}}g}}}{{Kl{c{Ll{e}}Mn}}}{}{FhMh}{}}{{cJd}e{}{}}{{{Ll{c}}Jd}eFh{}}{{{Ml{c}}Jd}eFh{}}01{{{Kl{ceg}}m}{{Kl{ieg}}}{}Fh{}{}{{Nd{c}{{Bb{i}}}}}{{Nf{ke}}}}{cJd{}}{{{N`{c{Ml{e}}g}}}JdKnFh{}}{{{N`{c{Ll{e}}g}}}JdKnFh{}}{{{Kl{c{Ll{e}}g}}}JdKnFh{}}{{{Kl{c{Ml{e}}g}}}JdKnFh{}}{{{b{c}}}e{}{}}{{{b{{N`{c{Ll{e}}g}}}}}{{Ll{e}}}KnFh{}}{{{b{{Kl{c{Ll{e}}g}}}}}{{Ll{e}}}KnFh{}}{{{b{{N`{c{Ml{e}}g}}}}}{{Ml{e}}}KnFh{}}{{{b{{Kl{c{Ml{e}}g}}}}}{{Ml{e}}}KnFh{}}{{{Kl{c{Ll{e}}Mn}}}{{Lb{c{Ll{e}}Mn}}}{}Fh}{{{Kl{ceg}}}{{Lb{ceKj}}}{}{FhMh}{}}{{{Kl{ceg}}i}{{Lb{ceKj}}}{}{NbFhMh}{}{{D`{Lde}}Gf}}{{{Kl{ceg}}{b{{Ll{e}}}}}{{Kl{c{Ml{e}}g}}}{}{FhMh}{}}{bc{}}{c{{f{e}}}{}{}}{{}{{f{c}}}{}}{bh}{{{Kl{ceg}}i}k{}Fh{}{}{}}`````{{{Lb{c{Ll{e}}Mng}}}{{Lb{c{Ml{e}}Kjg}}}{}Fh{}}{{{Lb{{Cl{ce}}gik}}{Lb{cgMnm}}}{{Lb{{Cl{ce}}gik}}}{OdOf}{}Fh{}{}{}}{{{Lb{cegi}}}{{Lb{cegk}}}{}Fh{}{}{}}{b{{b{c}}}{}}00{{{b{d}}}{{b{dc}}}{}}00{{{Lb{cegi}}{b{{l{k}}}}}{{Lb{{l{k}}Kj}}}{KnDjDl}{FhMh}{}Oh{}}{{{Lb{cegi}}{b{{l{k}}}}}{{Lb{c{l{k}}Kj}}}{KnDjDl}{FhMh}{}Oh{}}{{{Lb{cegi}}{b{{l{k}}}}}{{Lb{{l{k}}Kj}}}Kn{FhMh}{}Oh{}}{{{Lb{cegi}}{b{{l{k}}}}}{{Lb{Mj{l{k}}Kj}}}Kn{FhMh}{}Oh{}}{{{Lb{ceMnOj}}{Lb{ceMnOj}}}{{Lb{ceMnOj}}}{}Fh}{{{b{{Lb{cegi}}}}}{{Lb{cegi}}}KnFh{}{}}{{b{b{dc}}}Ad{}}{bAd}{{{Lb{cegi}}}{{Lb{cegi}}}KnFh{}{}}{{{Lb{cegi}}EfEh}Ad{}{FhMh}{}{}}{{{Lb{c{Ll{e}}Mng}}EfEh}Ad{}Fh{}}{{{Lb{cegi}}{N`{keMn}}}{{Lb{cegi}}}{}Fh{}{}{}}0{{{Lb{cegi}}}{{Kl{Cbeg}}}{}Fh{}{{Oh{Nh}{{Ol{Nh}}}}}}{{Ef{Ll{c}}}{{Lb{e{Ll{c}}Mng}}}Fh{}{}}{{Efc}{{Lb{ecgi}}}{FhMh}{}{}{}}{{{Lb{cegi}}{Lb{kegi}}}{{Lb{{Cl{ck}}egi}}}KnFh{}{}Kn}{{{Lb{cegi}}m}{{Lb{{Cl{ck}}egi}}}{}Fh{}{}Kn{{Nj{{N`{keMn}}}}}}{{{Lb{c{l{e}}gi}}{b{{l{k}}}}}{{Lb{c{l{k}}Kji}}}{KnDjDl}{}{}Oh{}}{{{Lb{cegi}}{b{{Bf{k}}}}}{{Lb{c{Bf{k}}Kji}}}{KnDjDl}{FhMh}{}{{Oh{}{{Ol{}}}}}{}}{{{Lb{c{Ll{e}}Mng}}}{{Lb{c{Ll{e}}Mng}}}{}Fh{}}00{{{Lb{cegi}}m}Ad{}{FhMh}{}{}{Lj{Dd{c}}}{{D`{ke}}}}{{{Lb{c{Ml{e}}gi}}}{{Lb{cegi}}}{}{FhMh}{}{}}{{{Lb{cegOj}}}{{Lb{{Cl{Cbc}}egOj}}}{}Fh{}}{{{Lb{cegi}}m}{{Lb{cegi}}}{}Fh{}{}{{Nd{{b{c}}}{{Bb{Gj}}}}}{{Nf{ke}}}}{{{Lb{cegi}}o}{{Lb{kegi}}}{}Fh{}{}{}{{Nd{c}{{Bb{{Cj{k}}}}}}}{{Nf{me}}}}{{{Lb{cegi}}{Lb{ceMnk}}}{{Lb{ceMni}}}{OdOf}Fh{}{}{}}{{{Lb{cegOj}}}{{N`{ceg}}}{}Fh{}}{{{Lb{cegi}}Aa}{{Lb{kegi}}}{}Fh{}{}{}{{Lh{}{{Lf{k}}}}}{{Nd{c}{{Bb{m}}}}}{{Nf{oe}}}}{{{Lb{cegi}}Aa}{{Lb{kegNh}}}{}Fh{}{}{}{{Lh{}{{Lf{k}}}}}{{Nd{c}{{Bb{m}}}}}{{Nf{oe}}}}{{{Lb{egik}}}{{Lb{cgik}}}{}{{Lh{}{{Lf{c}}}}}Fh{}{}}{{{Lb{egik}}}{{Lb{cgiNh}}}{}{{Lh{}{{Lf{c}}}}}Fh{}{}}{{{Lb{cegOj}}mAa}{{Kl{ieg}}}{}Fh{}{}{{Nd{}{{Bb{i}}}}}{{Nf{ke}}}{{Nd{{b{di}}c}}}{{Nf{oe}}}}{{{Lb{cegi}}oAc}{{Kl{keg}}}{}Fh{}{{Oh{Nh}{{Ol{Nh}}}}}{}{{Nd{}{{Bb{k}}}}}{{Nf{me}}}{{Nd{{b{dk}}c}}}{{Nf{Aae}}}}{{{Lb{{Cl{ce}}{Ll{g}}Mn}}mAa}{{Lb{{Cl{ci}}{Ll{g}}Mn}}}{OdOf}{}Fh{}{{Nd{}{{Bb{i}}}}}{{Nf{k{Ll{g}}}}}{{Nd{{b{di}}e}}}{{Nf{o{Ll{g}}}}}}{{{Lb{{Cl{ce}}{Ll{g}}Mni}}oAc}{{Lb{{Cl{ck}}{Ll{g}}Mni}}}{OdOf}{}Fh{}{}{{Nd{}{{Bb{k}}}}}{{Nf{m{Ll{g}}}}}{{Nd{{b{dk}}e}}}{{Nf{Aa{Ll{g}}}}}}{{{Lb{cegi}}m}Ad{}{FhMh}{}{}{{Nd{c}}}{{Nf{ke}}}}{cc{}}0{{{Lb{cegOj}}}{{Lb{cegNh}}}{}Fh{}}1{{{Lb{cegi}}m}{{Lb{cegi}}}{}Fh{}{}{{Nd{{b{c}}}}}{{Nf{ke}}}}{{}c{}}00{{{Lb{{Cl{ce}}gik}}{Lb{{Cl{cm}}gio}}}{{Lb{{Cl{c{Cl{em}}}}giNh}}}{OdOf}{}Fh{}{}{}{}}{{{Lb{{Cl{ce}}{Ll{g}}Mni}}}{{Lb{c{Ll{g}}Mni}}}{OdOf}{}Fh{}}?{{{Lb{cegi}}o}{{Lb{kegi}}}{}Fh{}{}{}{{Nd{c}{{Bb{k}}}}}{{Nf{me}}}}{{{Lb{cegi}}}{{N`{ceg}}}OnFh{}{{Oh{Nh}{{Ol{Nh}}}}}}{{{Lb{cegi}}o}{{N`{ceg}}}{}Fh{}{{Oh{Nh}{{Ol{Nh}}}}}On{{Nd{{b{c}}}{{Bb{k}}}}}{{Nf{me}}Gf}}1{{{Lb{c{Ll{e}}Mng}}}{{Lb{c{Ll{e}}Mng}}}KnFh{}}{{{Lb{cegOj}}k}{{N`{ceg}}}{}Fh{}{{Nd{{b{dc}}c}}}{{Nf{ie}}}}{{{Lb{cegi}}m}{{N`{ceg}}}{}Fh{}{{Oh{Nh}{{Ol{Nh}}}}}{{Nd{{b{dc}}c}}}{{Nf{ke}}}}{{{Lb{{Cl{ce}}{Ll{g}}Mn}}k}{{Lb{{Cl{ce}}{Ll{g}}Mn}}}{OdOf}{}Fh{{Nd{{b{de}}e}}}{{Nf{i{Ll{g}}}}}}{{{Lb{{Cl{ce}}{Ll{g}}Mni}}m}{{Lb{{Cl{ce}}{Ll{g}}Mni}}}{OdOf}{}Fh{}{{Nd{{b{de}}e}}}{{Nf{k{Ll{g}}}}}}{{{Lb{cegOj}}{b{{l{i}}}}}{{Lb{{l{i}}Kj}}}{KnDjDl}{FhMh}{}{}}{{{Lb{cegOj}}{b{{l{i}}}}}{{Lb{c{l{i}}Kj}}}{KnDjDl}{FhMh}{}{}}{{{Lb{cegOj}}{b{{l{i}}}}}{{Lb{{l{i}}Kj}}}Kn{FhMh}{}{}}{{{Lb{cegOj}}{b{{l{i}}}}}{{Lb{Mj{l{i}}Kj}}}Kn{FhMh}{}{}}{{{Lb{cegi}}k}{{Lb{ceKji}}}{}{FhMhNb}{}{}{{D`{Lde}}Gf}}{{{Lb{cegi}}{b{k}}}{{Lb{kKj}}}{}{FhMh}{}OhFh}{{{Lb{cikm}}{b{{Ah{e}}}}}E`{}{}{DjDl}{{A@d{{Ah{e}}}{{A@`{gc}}{A@b{gg}}}}FhMh}{}{}}{{{Lb{cegi}}{b{k}}}{{Lb{mkKj}}}{}{FhMh}{}OhFh{DjDl}}2{{{Lb{cegi}}{b{{Ah{k}}}}}Dn{}{FhMh}{}{}{}}{{{Lb{cegi}}{b{k}}}{{Lb{MjkKj}}}{}{FhMh}{}OhFh}{{{Lb{ceMng}}}{{Lb{ceMnOj}}}OnFh{}}{{{Lb{c{Ml{e}}gi}}}{{Lb{c{Ll{e}}Mni}}}{}{FhMh}{}{}}{{{Lb{cegi}}k}{{N`{AdeKj}}}{}{FhMhNb}{}{{Oh{Nh}{{Ol{Nh}}}}}{{D`{Ld{Ll{e}}}}Gf}}{{{b{{Lb{c{Ml{e}}gi}}}}}{{Ll{e}}}{}{FhMh}{}{}}{{{Lb{cegi}}{b{{Ll{e}}}}}{{Lb{c{Ml{e}}gi}}}{}{FhMhNb}{}{}}{bc{}}{c{{f{e}}}{}{}}00{{}{{f{c}}}{}}00{bh}00{{{Lb{ceKjNh}}{Lb{ceKjNh}}}{{Lb{ceKjNh}}}{}{FhMhNb}}{{{Lb{ceMni}}{Lb{cekg}}}{{Lb{cek}}}{}Fh{}{{Oh{g}}}{}}{{{Lb{cegi}}}{{Lb{cegi}}}{OdOf}Fh{}{}}","D":"Oj","p":[[1,"reference"],[0,"mut"],[6,"Result",1034],[5,"TypeId",1035],[5,"FlowBuilder",47],[5,"Cluster",613],[5,"CompiledFlow",102],[5,"DeployResult",123],[17,"CompileEnv"],[1,"unit"],[10,"Deploy",199],[5,"ExternalProcess",690],[5,"BuiltFlow",84],[8,"FlowState",47],[6,"HydroLeaf",404],[5,"Vec",1036],[17,"Output"],[10,"FnOnce",1037],[5,"Process",732],[5,"DeployFlow",123],[10,"LocalDeploy",199],[10,"ClusterSpec",199],[10,"ExternalSpec",199],[10,"IntoProcessSpec",199],[1,"usize"],[5,"HydroflowGraph",1038],[5,"BTreeMap",1039],[5,"TokenStream",1040],[6,"Option",1041],[1,"tuple"],[5,"CompiledFlowWithId",102],[10,"QuotedWithContext",1042],[5,"ExternalBincodeSink",690],[10,"Sink",1043],[5,"Box",1044],[5,"Pin",1045],[10,"Serialize",1046],[10,"DeserializeOwned",1047],[5,"ExternalBytesPort",690],[5,"ExternalBincodeStream",690],[10,"Stream",1048],[10,"CycleComplete",155],[5,"Ident",1040],[6,"LocationId",555],[5,"ForwardRef",155],[6,"ForwardRefMarker",155],[5,"TickCycle",155],[6,"TickCycleMarker",155],[10,"DeferTick",155],[17,"Location"],[10,"CycleCollection",155],[10,"Location",555],[10,"CycleCollectionWithInitial",155],[10,"RegisterPort",199],[10,"Future",1049],[10,"ProcessSpec",199],[1,"str"],[1,"u32"],[10,"Copy",1050],[6,"Expr",1051],[1,"bool"],[17,"Port"],[17,"Meta"],[17,"InstantiateEnv"],[10,"Node",199],[6,"Stmt",1052],[17,"ProcessSpec"],[10,"Sized",1050],[5,"SingleNode",263],[5,"MultiNode",263],[5,"DeployRuntimeNode",315],[5,"DeployRuntimeCluster",315],[5,"String",1053],[5,"HydroflowPlusMeta",382],[5,"DeployPorts",1054],[5,"RuntimeData",1042],[10,"Deserializer",1047],[10,"Serializer",1046],[5,"DebugExpr",404],[8,"SeenTees",404],[5,"HashMap",1055],[6,"HydroNode",404],[5,"FlatGraphBuilder",1056],[5,"RefCell",1057],[6,"DebugInstantiate",404],[5,"Formatter",1058],[8,"Result",1058],[5,"TeeNode",404],[6,"HydroSource",404],[5,"Span",1040],[10,"FnMut",1037],[17,"Root"],[6,"Unbounded",31],[5,"Singleton",875],[10,"Clone",1059],[5,"Instant",1060],[5,"Stream",932],[5,"Duration",1061],[17,"Item"],[10,"IntoIterator",1062],[10,"Unpin",1050],[5,"Tick",754],[6,"Type",1063],[5,"ClusterIds",613],[5,"ClusterSelfId",613],[5,"ClusterId",665],[10,"Hasher",1064],[10,"NoTick",754],[5,"Bytes",1065],[5,"Timestamped",754],[6,"Bounded",31],[5,"Optional",796],[10,"NoTimestamp",754],[10,"Fn",1037],[10,"IntoQuotedMut",1042],[5,"NoOrder",932],[10,"Into",1066],[1,"u64"],[5,"UnboundedSender",1067],[5,"PropertyDatabase",849],[5,"RuntimeContext",861],[10,"Eq",1068],[10,"Hash",1064],[10,"MinOrder",932],[5,"TotalOrder",932],[17,"Min"],[10,"Ord",1068],[17,"In"],[17,"Out"],[10,"CanSend",607],[5,"FlowStateInner",47],[5,"SingleProcessGraph",263],[5,"MultiGraph",263],[5,"DeployRuntime",315],[15,"ForEach",513],[15,"CycleSink",513],[15,"DestSink",513],[15,"Fold",520],[15,"FoldKeyed",520],[15,"Network",520],[15,"Map",520],[15,"FlatMap",520],[15,"Filter",520],[15,"FilterMap",520],[15,"Inspect",520],[15,"Reduce",520],[15,"ReduceKeyed",520],[15,"CycleSource",520],[15,"Tee",520],[15,"Enumerate",520],[15,"Source",520],[10,"IsCluster",613],[10,"ZipResult",875]],"r":[[0,31],[1,613],[2,613],[3,665],[4,690],[5,47],[6,555],[7,932],[8,796],[9,732],[10,861],[11,875],[12,932],[13,754],[14,754],[15,932],[16,31],[26,1069],[555,607],[556,613],[558,665],[559,690],[563,754],[564,732],[567,754],[569,754],[615,665]],"b":[[644,"impl-CanSend%3C\'a,+Process%3C\'a,+P2%3E%3E-for-Cluster%3C\'a,+C1%3E"],[645,"impl-CanSend%3C\'a,+Cluster%3C\'a,+C2%3E%3E-for-Cluster%3C\'a,+C1%3E"],[649,"impl-CanSend%3C\'a,+Cluster%3C\'a,+C2%3E%3E-for-Cluster%3C\'a,+C1%3E"],[650,"impl-CanSend%3C\'a,+Process%3C\'a,+P2%3E%3E-for-Cluster%3C\'a,+C1%3E"],[677,"impl-Debug-for-ClusterId%3CC%3E"],[678,"impl-Display-for-ClusterId%3CC%3E"],[742,"impl-CanSend%3C\'a,+Cluster%3C\'a,+C2%3E%3E-for-Process%3C\'a,+P1%3E"],[743,"impl-CanSend%3C\'a,+ExternalProcess%3C\'a,+E2%3E%3E-for-Process%3C\'a,+P1%3E"],[744,"impl-CanSend%3C\'a,+Process%3C\'a,+P2%3E%3E-for-Process%3C\'a,+P1%3E"],[747,"impl-CanSend%3C\'a,+Cluster%3C\'a,+C2%3E%3E-for-Process%3C\'a,+P1%3E"],[748,"impl-CanSend%3C\'a,+Process%3C\'a,+P2%3E%3E-for-Process%3C\'a,+P1%3E"],[749,"impl-CanSend%3C\'a,+ExternalProcess%3C\'a,+E2%3E%3E-for-Process%3C\'a,+P1%3E"],[803,"impl-CycleComplete%3C\'a,+ForwardRefMarker%3E-for-Optional%3CT,+Tick%3CL%3E,+Bounded%3E"],[804,"impl-CycleComplete%3C\'a,+ForwardRefMarker%3E-for-Optional%3CT,+L,+B%3E"],[805,"impl-CycleComplete%3C\'a,+TickCycleMarker%3E-for-Optional%3CT,+Tick%3CL%3E,+Bounded%3E"],[808,"impl-CycleCollection%3C\'a,+ForwardRefMarker%3E-for-Optional%3CT,+Tick%3CL%3E,+Bounded%3E"],[809,"impl-CycleCollection%3C\'a,+TickCycleMarker%3E-for-Optional%3CT,+Tick%3CL%3E,+Bounded%3E"],[810,"impl-CycleCollection%3C\'a,+ForwardRefMarker%3E-for-Optional%3CT,+L,+B%3E"],[811,"impl-DeferTick-for-Optional%3CT,+Tick%3CL%3E,+Bounded%3E"],[812,"impl-Optional%3CT,+Tick%3CL%3E,+Bounded%3E"],[821,"impl-From%3COptional%3CT,+L,+Bounded%3E%3E-for-Optional%3CT,+L,+Unbounded%3E"],[822,"impl-From%3CSingleton%3CT,+L,+B%3E%3E-for-Optional%3CT,+L,+B%3E"],[885,"impl-CycleComplete%3C\'a,+TickCycleMarker%3E-for-Singleton%3CT,+Tick%3CL%3E,+Bounded%3E"],[886,"impl-CycleComplete%3C\'a,+ForwardRefMarker%3E-for-Singleton%3CT,+L,+B%3E"],[887,"impl-CycleComplete%3C\'a,+ForwardRefMarker%3E-for-Singleton%3CT,+Tick%3CL%3E,+Bounded%3E"],[890,"impl-CycleCollection%3C\'a,+ForwardRefMarker%3E-for-Singleton%3CT,+Tick%3CL%3E,+Bounded%3E"],[891,"impl-CycleCollectionWithInitial%3C\'a,+TickCycleMarker%3E-for-Singleton%3CT,+Tick%3CL%3E,+Bounded%3E"],[892,"impl-CycleCollection%3C\'a,+ForwardRefMarker%3E-for-Singleton%3CT,+L,+B%3E"],[893,"impl-DeferTick-for-Singleton%3CT,+Tick%3CL%3E,+Bounded%3E"],[894,"impl-Singleton%3CT,+Tick%3CL%3E,+Bounded%3E"],[908,"impl-ZipResult%3C\'a,+Singleton%3CU,+Tick%3CL%3E,+B%3E%3E-for-Singleton%3CT,+Tick%3CL%3E,+B%3E"],[909,"impl-ZipResult%3C\'a,+Optional%3CU,+Timestamped%3CL%3E,+B%3E%3E-for-Singleton%3CT,+Timestamped%3CL%3E,+B%3E"],[910,"impl-ZipResult%3C\'a,+Singleton%3CU,+Timestamped%3CL%3E,+B%3E%3E-for-Singleton%3CT,+Timestamped%3CL%3E,+B%3E"],[911,"impl-ZipResult%3C\'a,+Optional%3CU,+Tick%3CL%3E,+B%3E%3E-for-Singleton%3CT,+Tick%3CL%3E,+B%3E"],[914,"impl-ZipResult%3C\'a,+Optional%3CU,+Timestamped%3CL%3E,+B%3E%3E-for-Singleton%3CT,+Timestamped%3CL%3E,+B%3E"],[915,"impl-ZipResult%3C\'a,+Optional%3CU,+Tick%3CL%3E,+B%3E%3E-for-Singleton%3CT,+Tick%3CL%3E,+B%3E"],[916,"impl-ZipResult%3C\'a,+Singleton%3CU,+Tick%3CL%3E,+B%3E%3E-for-Singleton%3CT,+Tick%3CL%3E,+B%3E"],[917,"impl-ZipResult%3C\'a,+Singleton%3CU,+Timestamped%3CL%3E,+B%3E%3E-for-Singleton%3CT,+Timestamped%3CL%3E,+B%3E"],[919,"impl-ZipResult%3C\'a,+Optional%3CU,+Tick%3CL%3E,+B%3E%3E-for-Singleton%3CT,+Tick%3CL%3E,+B%3E"],[920,"impl-ZipResult%3C\'a,+Singleton%3CU,+Tick%3CL%3E,+B%3E%3E-for-Singleton%3CT,+Tick%3CL%3E,+B%3E"],[921,"impl-ZipResult%3C\'a,+Optional%3CU,+Timestamped%3CL%3E,+B%3E%3E-for-Singleton%3CT,+Timestamped%3CL%3E,+B%3E"],[922,"impl-ZipResult%3C\'a,+Singleton%3CU,+Timestamped%3CL%3E,+B%3E%3E-for-Singleton%3CT,+Timestamped%3CL%3E,+B%3E"],[955,"impl-CycleComplete%3C\'a,+ForwardRefMarker%3E-for-Stream%3CT,+L,+B,+Order%3E"],[956,"impl-CycleComplete%3C\'a,+TickCycleMarker%3E-for-Stream%3CT,+Tick%3CL%3E,+Bounded,+Order%3E"],[960,"impl-CycleCollection%3C\'a,+TickCycleMarker%3E-for-Stream%3CT,+Tick%3CL%3E,+Bounded,+Order%3E"],[961,"impl-CycleCollection%3C\'a,+ForwardRefMarker%3E-for-Stream%3CT,+L,+B,+Order%3E"],[966,"impl-Stream%3CT,+Tick%3CL%3E,+Bounded,+Order%3E"],[967,"impl-DeferTick-for-Stream%3CT,+Tick%3CL%3E,+Bounded,+Order%3E"],[1031,"impl-Stream%3CT,+L,+Unbounded,+NoOrder%3E"],[1032,"impl-Stream%3CT,+L,+Bounded,+Order%3E"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAI0DNwAAABoAHAADACIAAwAqABkASAATAF4ADgBvAAAAcgAXAIwAAgCRAA4AoQASALwAFQDTAEYAHgEDACYBLwBZAQMAYAEtAJABGgCuAS4A4AEAAOoBYQBNAgAATwIFAFcCCwBkAgEAZwIWAIECAACFAiIAqQIBAKwCFgDHAgAAzAIXAOUCAADnAg0A9gIQAAkDAQANAyoAOgMCAD4DAQBCAw4AVAMCAFkDCwBnAx4AhwMAAIkDAQCMAxAAnwMFAKoDAQCtAxAAwAMZANwDAADeAwAA4gMPAPMDBgD8Aw4A"}],["hydro_std",{"t":"CCHHH","n":["quorum","request_response","collect_quorum","collect_quorum_with_response","join_responses"],"q":[[0,"hydro_std"],[2,"hydro_std::quorum"],[4,"hydro_std::request_response"],[5,"core::result"],[6,"hydro_lang::location::tick"],[7,"hydro_lang::boundedness"],[8,"hydro_lang::stream"],[9,"core::clone"],[10,"core::cmp"],[11,"core::hash"],[12,"hydro_lang::location"]],"i":"`````","f":"``{{{l{{f{c{d{be}}}}{h{g}}ji}}nn}{{f{{l{c{h{g}}ji}}{l{{f{ce}}{h{g}}ji}}}}}{A`AbAd}A`{AfAh}{}}{{{l{{f{c{d{eg}}}}{h{i}}jk}}nn}{{f{{l{{f{ce}}{h{i}}jk}}{l{{f{cg}}{h{i}}jk}}}}}{A`AbAd}A`A`{AfAh}{}}{{{Al{{Aj{c}}}}{l{{f{eg}}{h{c}}jAn}}{l{{f{ei}}{Aj{c}}B`An}}}{{l{{f{e{f{ig}}}}{h{c}}jAn}}}{AfAh}{A`AbAd}A`A`}","D":"b","p":[[1,"unit"],[6,"Result",5],[1,"tuple"],[5,"Timestamped",6],[6,"Unbounded",7],[5,"Stream",8],[1,"usize"],[10,"Clone",9],[10,"Eq",10],[10,"Hash",11],[10,"Location",12],[10,"NoTick",6],[5,"Tick",6],[1,"reference"],[5,"NoOrder",8],[6,"Bounded",7]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OjAAAAEAAAAAAAQAEAAAAAAAAQACAAMABAA="}],["hydro_test",{"t":"CCCCCCCCCCFFNNNNHNNNNNNNNNNNNHFFNNNNNNNNHNNNNNNNNFFKFNNNNNNNNNNNNNNNNNNNNNNNNNONHONNNNNNNNNNNNNNFNNNNHNNNNKFKFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONHHONNNNNNNNNNNNNONNNHHHFFFNNNNNNNNNNNNNNNNNNHNNNNNNCFFNNNNHNNNNNNNNNNNN","n":["cluster","distributed","compute_pi","many_to_many","map_reduce","paxos","paxos_bench","paxos_kv","simple_cluster","two_pc","Leader","Worker","borrow","","borrow_mut","","compute_pi","from","","into","","try_from","","try_into","","type_id","","vzip","","many_to_many","Leader","Worker","borrow","","borrow_mut","","from","","into","","map_reduce","try_from","","try_into","","type_id","","vzip","","Acceptor","Ballot","PaxosPayload","Proposer","borrow","","","borrow_mut","","","clone","clone_into","clone_to_uninit","cmp","compare","deserialize","eq","equivalent","","","","fmt","from","","","hash","into","","","num","partial_cmp","paxos_core","proposer_id","serialize","to_owned","try_from","","","try_into","","","type_id","","","vzip","","","Client","borrow","borrow_mut","from","into","paxos_bench","try_from","try_into","type_id","vzip","KvKey","KvPayload","KvValue","Replica","SequencedKv","borrow","","","borrow_mut","","","clone","","clone_into","","clone_to_uninit","","cmp","compare","deserialize","","eq","","equivalent","","","","","","","","fmt","","from","","","into","","","key","kv","partial_cmp","paxos_kv","replica","seq","serialize","","to_owned","","try_from","","","try_into","","","type_id","","","value","vzip","","","decouple_cluster","decouple_process","simple_cluster","Client","Coordinator","Participants","borrow","","","borrow_mut","","","from","","","into","","","try_from","","","try_into","","","two_pc","type_id","","","vzip","","","first_ten","P1","P2","borrow","","borrow_mut","","first_ten_distributed","from","","into","","try_from","","try_into","","type_id","","vzip",""],"q":[[0,"hydro_test"],[2,"hydro_test::cluster"],[10,"hydro_test::cluster::compute_pi"],[29,"hydro_test::cluster::many_to_many"],[30,"hydro_test::cluster::map_reduce"],[49,"hydro_test::cluster::paxos"],[96,"hydro_test::cluster::paxos_bench"],[106,"hydro_test::cluster::paxos_kv"],[168,"hydro_test::cluster::simple_cluster"],[171,"hydro_test::cluster::two_pc"],[199,"hydro_test::distributed"],[200,"hydro_test::distributed::first_ten"],[219,"hydro_lang::builder"],[220,"hydro_lang::location::cluster"],[221,"hydro_lang::location::process"],[222,"core::result"],[223,"core::any"],[224,"core::cmp"],[225,"serde::de"],[226,"core::fmt"],[227,"core::hash"],[228,"core::option"],[229,"hydro_lang::location::cluster::cluster_id"],[230,"hydro_lang::boundedness"],[231,"hydro_lang::stream"],[232,"serde::ser"],[233,"core::clone"],[234,"hydro_lang::location::external_process"],[235,"alloc::string"]],"i":"````````````jn10`101010101010```AjAl101010`10101010````BnC`An210000000000000210021000`000210210210210`D`000`0000`````DbDdDh2101010100010101111000010210210100``010102102102101210``````EjEhEl210210210210210`210210```F`Fb10`101010101010","f":"````````````{b{{b{c}}}{}}0{{{b{d}}}{{b{dc}}}{}}0{{{b{f}}h}{{Ab{{l{j}}{A`{n}}}}}}{cc{}}0{{}c{}}0{c{{Ad{e}}}{}{}}0{{}{{Ad{c}}}{}}0{bAf}033{{{b{f}}}{{l{Ah}}}}``88775544{{{b{f}}}{{Ab{{A`{Aj}}{l{Al}}}}}}44332255````999888{{{b{An}}}An}{{b{b{dc}}}Ah{}}{bAh}{{{b{An}}{b{An}}}B`}{{b{b{c}}}B`{}}{c{{Ad{An}}}Bb}{{{b{An}}{b{An}}}Bd}{{b{b{c}}}Bd{}}000{{{b{An}}{b{dBf}}}Bh}???{{{b{An}}{b{dc}}}AhBj}???`{{{b{An}}{b{An}}}{{Bl{B`}}}}{{{b{{l{Bn}}}}{b{{l{C`}}}}{Ch{{Ab{{Cb{c}}h}}{l{C`}}CdCf}}{Ch{e{l{Bn}}Cd}}hCjCjh}{{Ab{{Ch{An{l{Bn}}Cd}}{Ch{{Ab{h{Bl{e}}}}{l{Bn}}CdCf}}}}}{}Cl}`{{{b{An}}c}AdCn}{bc{}}{c{{Ad{e}}}{}{}}00{{}{{Ad{c}}}{}}00{bAf}00{{}c{}}00`{b{{b{c}}}{}}{{{b{d}}}{{b{dc}}}{}}{cc{}}3{{{b{f}}hhhhCjCjh}{{Ab{{l{Bn}}{l{C`}}{l{D`}}{l{Db}}}}}}7654`````333222{{{b{{Dd{ce}}}}}{{Dd{ce}}}DfDf}{{{b{{Dh{ce}}}}}{{Dh{ce}}}DfDf}{{b{b{dc}}}Ah{}}0{bAh}0{{{b{{Dh{ce}}}}{b{{Dh{ce}}}}}B`DjDl}{{b{b{c}}}B`{}}{c{{Ad{{Dd{eg}}}}}BbDnDn}{c{{Ad{{Dh{eg}}}}}BbDnDn}{{{b{{Dd{ce}}}}{b{{Dd{ce}}}}}BdE`E`}{{{b{{Dh{ce}}}}{b{{Dh{ce}}}}}BdE`E`}{{b{b{c}}}Bd{}}0000000{{{b{{Dd{ce}}}}{b{dBf}}}BhEbEb}{{{b{{Dh{ce}}}}{b{dBf}}}BhEbEb}>>>{{}c{}}00``{{{b{{Dh{ce}}}}{b{{Dh{ce}}}}}{{Bl{B`}}}DjDl}{{{b{{l{Bn}}}}{b{{l{C`}}}}{b{{l{Db}}}}{Ch{{Dd{ce}}{l{Bn}}Cd}}hCjCjhh}{{Ab{{Ch{An{l{Bn}}Cd}}{Ch{{Dd{ce}}{l{Db}}Cd}}}}}DjDl}{{{b{{l{Db}}}}{Ch{{Dh{ce}}{l{Db}}CdCf}}h}{{Ab{{Ch{h{l{Db}}Cd}}{Ch{{Dd{ce}}{l{Db}}Cd}}}}}DjDl}`{{{b{{Dd{ce}}}}g}AdEdEdCn}{{{b{{Dh{ce}}}}g}AdEdEdCn}{bc{}}0{c{{Ad{e}}}{}{}}00{{}{{Ad{c}}}{}}00{bAf}00`999{{{b{f}}}{{Ab{{l{Ah}}{l{Ah}}}}}}{{{b{f}}}{{Ab{{A`{Ah}}{A`{Ah}}}}}}{{{b{f}}}{{Ab{{A`{Ah}}{l{Ah}}}}}}```{b{{b{c}}}{}}00{{{b{d}}}{{b{dc}}}{}}00{cc{}}00???888777{{{b{f}}Ef}{{Ab{{A`{Eh}}{l{Ej}}{A`{El}}}}}}777{{}c{}}00```4433{{{b{{En{Ah}}}}{b{{A`{F`}}}}{b{{A`{Fb}}}}}{{Ff{Fd}}}}3311;;::9911","D":"Dd","p":[[1,"reference"],[0,"mut"],[5,"FlowBuilder",219],[1,"usize"],[5,"Worker",10],[5,"Cluster",220],[5,"Leader",10],[5,"Process",221],[1,"tuple"],[6,"Result",222],[5,"TypeId",223],[1,"unit"],[5,"Leader",30],[5,"Worker",30],[5,"Ballot",49],[6,"Ordering",224],[10,"Deserializer",225],[1,"bool"],[5,"Formatter",226],[8,"Result",226],[10,"Hasher",227],[6,"Option",228],[5,"Proposer",49],[5,"Acceptor",49],[5,"ClusterId",229],[6,"Unbounded",230],[5,"NoOrder",231],[5,"Stream",231],[1,"u64"],[10,"PaxosPayload",49],[10,"Serializer",232],[5,"Client",96],[5,"Replica",106],[5,"KvPayload",106],[10,"Clone",233],[5,"SequencedKv",106],[10,"KvKey",106],[10,"KvValue",106],[10,"Deserialize",225],[10,"PartialEq",224],[10,"Debug",226],[10,"Serialize",232],[1,"u32"],[5,"Coordinator",171],[5,"Participants",171],[5,"Client",171],[5,"ExternalProcess",234],[5,"P1",200],[5,"P2",200],[5,"String",235],[5,"ExternalBincodeSink",234]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAALkACwAAABEAFgAOACkAHgBLAAAATwABAFIAEQBmACUAkgACAJYAHgC7ABQA1AAHAA=="}],["hydro_test_local",{"t":"CCCCCCCCQHQQHHQQQQQ","n":["local","chat_app","compute_pi","count_elems","first_ten","graph_reachability","negation","teed_join","chat_app","compute_pi","compute_pi_runtime","count_elems","count_elems_generic","first_ten","first_ten_runtime","graph_reachability","test_anti_join","test_difference","teed_join"],"q":[[0,"hydro_test_local"],[1,"hydro_test_local::local"],[8,"hydro_test_local::local::chat_app"],[9,"hydro_test_local::local::compute_pi"],[11,"hydro_test_local::local::count_elems"],[13,"hydro_test_local::local::first_ten"],[15,"hydro_test_local::local::graph_reachability"],[16,"hydro_test_local::local::negation"],[18,"hydro_test_local::local::teed_join"],[19,"hydro_lang::builder"],[20,"stageleft"],[21,"hydro_lang::location::process"],[22,"tokio_stream::wrappers::mpsc_unbounded"],[23,"tokio::sync::mpsc::unbounded"],[24,"hydroflow::scheduled::graph"]],"i":"```````````````````","f":"`````````{{{d{b}}{h{f}}}{{l{j}}}}``{{b{h{{n{c}}}}{h{{d{{Ab{A`}}}}}}}{{`{{Af{Ad}}}}}{}}{{{d{b}}}j}`````","D":"`","p":[[5,"FlowBuilder",19],[1,"reference"],[1,"usize"],[5,"RuntimeData",20],[1,"unit"],[5,"Process",21],[5,"UnboundedReceiverStream",22],[1,"u32"],[5,"UnboundedSender",23],[5,"Hydroflow",24],[10,"Quoted",20]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAABMAAQAAABMA"}],["hydro_test_local_macro",{"t":"QQQQQQQQ","n":["macro_0317123C21A365AAC8F7C904D715749D52C4408A36766C2EA4952E8548FDF2CF","macro_1C0FE8523A30CEE48113F7CA958EDC55F81545A0CB32FC13A73E2E0B86C69967","macro_88FF4FF66B42C3C3EA6A3A776AD3BBB5A0E778C545379CD74D8134F1BDE2467B","macro_B8B04B5C82DD37E36A884DD155638B3BB603ECEE77232C187CB7749C8C3633D4","macro_DBD6835F761FB7B759E0367E64D404553FF74D0CDA5EC33E48C8D94A09338A20","macro_E29C1936765CFB0AEE40C7D85645A072229E6DD9B20D78BFFDFDF0B90F8550E2","macro_F32B896FDC4E575B912C55F307713AE1C491601401B080576A445697B5F5D872","macro_F395CBD2498F0C0291586D539B1C53802F7DE61514FE27DB041B53B7578FA011"],"q":[[0,"hydro_test_local_macro"]],"i":"````````","f":"````````","D":"`","p":[],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAAgAAQAAAAgA"}],["hydroflow",{"t":"YIQEECQEQQQQEEEQXQQEQQECEEXEEEECQQQEECFFFKFFFFFFHNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNMNNMNNNNNNNNNMNNMNNNHOOONNNNNNNNNNNNNNNNNNNNNNNNNNNFFFNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNCCCNNNCNNNCNNCCCNNCCNNNNNNNNNNNNNNFNNNNNNNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKMMMMMMMMMMKKKRFFKFMNNNNNNNNMNNNNNNNNNNNNNNNNNNMNNNNNCNNNNNMNNNMNNNNNNNMNNNNNNNRKKKRMMMFKFNNNNNNNNNNNMNNNNNNNNNNNNFOONNNNNNNNNNNNCNNNNIKFFGIIGIINNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNTFFTNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNPPFFFPPGGIIIIIIIIIIHHHHHNNNNNNNNNNCNNNNNNHHHHHCCHNNNNNNNNNNNHHCCHHHCHCHHHHNNNNNNNNNNNNNNNNNHHHHHHHHHCHHKFNNMNNNNNNNNNNNNNNNNNNKYKRKMMPGIKFFKKFPPPPFFIIIIRPPPPFPPPPRGPGGGRRKPPPPFPPPPPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNHHNNNNNNNNNNNNNMNNMNNOQHONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNNNNNNFFFFIFKIFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNCPPFFFGNNNNNNNNHHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNH","n":["DemuxEnum","Never","assert_var_impl","bincode","bytes","compiled","datalog","futures","hydroflow_expect_warnings","hydroflow_parser","hydroflow_syntax","hydroflow_syntax_noemit","itertools","lang","lattices","launch","main","monotonic_fn","morphism","pusherator","rassert","rassert_eq","rustc_hash","scheduled","serde","serde_json","test","tokio","tokio_stream","tokio_util","tracing","util","var_args","var_expr","var_type","variadics","web_time","pull","AntiJoin","CrossJoin","CrossJoinState","HalfJoinState","HalfJoinStateFold","HalfJoinStateFoldFrom","HalfJoinStateReduce","HalfMultisetJoinState","HalfSetJoinState","SymmetricHashJoin","anti_join_into_iter","borrow","","","","","","","","","borrow_mut","","","","","","","","","build","","","clear","","","","","default","","","","","","fmt","","fold_into","","from","","","","","","","","","full_probe","","","into","","","","","","","","","into_iter","","","is_empty","","iter","","","len","","","multiunzip","","","new","next","","","pop_match","","","probe","","","reduce_into","symmetric_hash_join_into_iter","table","","","try_from","","","","","","","","","try_into","","","","","","","","","type_id","","","","","","","","","HandoffId","StateId","SubgraphId","borrow","","","borrow_mut","","","clone","","","clone_into","","","clone_to_uninit","","","cmp","","context","eq","","","equivalent","","","","","","fmt","","","","","from","","","graph","graph_ext","handoff","hash","","","input","into","","","net","partial_cmp","","port","query","reactor","serialize","","state","ticks","to_owned","","","to_string","","try_from","","","try_into","","","type_id","","","Context","abort_tasks","add_state","borrow","borrow_mut","current_stratum","current_subgraph","current_tick","current_tick_start","default","from","into","is_first_run_this_tick","join_tasks","remove_state","request_task","schedule_subgraph","set_state_tick_hook","spawn_tasks","state_mut","state_ref","try_from","try_into","type_id","waker","Hydroflow","abort_tasks","add_channel_input","add_input","add_input_from_stream","add_read_tcp_stream","add_state","add_subgraph","add_subgraph_2in_2out","add_subgraph_2in_out","add_subgraph_2sink","add_subgraph_in_2out","add_subgraph_in_out","add_subgraph_n_m","add_subgraph_sink","add_subgraph_source","add_subgraph_stratified","add_subgraph_stratified_n_m","add_tcp_stream","add_write_tcp_stream","borrow","borrow_mut","context_mut","current_stratum","current_tick","default","diagnostics","drop","from","inbound_tcp_vertex","inbound_tcp_vertex_port","into","join_tasks","make_edge","meta_graph","new","next_stratum","outbound_tcp_vertex","reactor","recv_events","recv_events_async","request_task","run","run_async","run_available","run_available_async","run_stratum","run_tick","schedule_subgraph","set_state_tick_hook","teeing_handoff_drop","teeing_handoff_tee","try_from","try_into","try_recv_events","type_id","GraphExt","add_channel_input","add_input","add_input_from_stream","add_subgraph_2in_2out","add_subgraph_2in_out","add_subgraph_2sink","add_subgraph_in_2out","add_subgraph_in_out","add_subgraph_sink","add_subgraph_source","CanReceive","Handoff","HandoffMeta","Inner","Iter","TeeingHandoff","TryCanReceive","VecHandoff","any_ref","","","borrow","","","borrow_mut","","","borrow_mut_swap","","","clone","","clone_into","","clone_to_uninit","","cmp","default","","eq","equivalent","","fmt","from","","","give","","","","","","handoff_list","hash","into","","","into_iter","is_bottom","","","partial_cmp","take_inner","","","to_owned","","try_from","","","try_give","","try_into","","","type_id","","","Ctx","HandoffList","PortList","PortListSplit","Suffix","make_ctx","set_graph_meta","split_ctx","Buffer","Give","Input","borrow","","borrow_mut","","clone","clone_into","clone_to_uninit","default","flush","from","","give","","","into","","new","to_owned","try_from","","try_into","","type_id","","Message","address","batch","borrow","borrow_mut","clone","clone_into","clone_to_uninit","decode","eq","equivalent","","fmt","from","into","network_vertex","to_owned","try_from","try_into","type_id","Address","Polarity","Port","PortCtx","RECV","RecvCtx","RecvPort","SEND","SendCtx","SendPort","borrow","","","","borrow_mut","","","","borrow_mut_swap","","drop","","from","","","","give","","into","","","","ref_cast","ref_cast_mut","take_inner","","tee","","try_from","","","","try_give","","try_into","","","","type_id","","","","Operator","Query","borrow","","borrow_mut","","concat","","default","filter","from","","into","","map","new","run_available","sink","source","tee","try_from","","try_into","","type_id","","Reactor","borrow","borrow_mut","clone","clone_into","clone_to_uninit","from","into","into_waker","to_owned","trigger","try_from","try_into","type_id","StateHandle","StateHandleErased","borrow","","borrow_mut","","clone","","clone_into","","clone_to_uninit","","cmp","","eq","","equivalent","","","","fmt","","from","","","hash","","into","","partial_cmp","","to_owned","","try_from","","","try_into","","type_id","","SINGLE_TICK","TickDuration","TickInstant","ZERO","add","","add_assign","","borrow","","borrow_mut","","clone","","clone_into","","clone_to_uninit","","cmp","","default","","deserialize","","eq","","equivalent","","","","fmt","","","","from","","hash","","into","","neg","new","","partial_cmp","","serialize","","sub","","","sub_assign","","ticks","to_owned","","to_string","","try_from","","try_into","","type_id","","Delete","","DroppableChild","MonotonicFn","Morphism","Persist","","Persistence","PersistenceKeyed","TcpFramedSink","TcpFramedStream","UdpBytesSink","UdpBytesStream","UdpFramedSink","UdpFramedStream","UdpLinesSink","UdpLinesStream","UdpSink","UdpStream","bind_tcp","bind_tcp_bytes","bind_tcp_lines","bind_udp_bytes","bind_udp_lines","borrow","","","","","borrow_mut","","","","","clear","clone","","clone_into","","clone_to_uninit","","collect_ready","collect_ready_async","connect_tcp","connect_tcp_bytes","connect_tcp_lines","demux_enum","deploy","deserialize_from_bytes","drop","from","","","","","into","","","","","ipv4_resolve","iter_batches_stream","monotonic_map","multiset","ready_iter","run_cargo_example","serialize_to_bytes","simulation","sort_unstable_by_key_hrtb","sparse_vec","tcp_bytes","tcp_bytestream","tcp_framed","tcp_lines","to_owned","","try_from","","","","","try_into","","","","","type_id","","","","","udp_bytes","udp_bytestream","udp_framed","udp_lines","unbounded_channel","unix_bytes","unix_bytestream","unix_framed","unix_lines","unsync","unsync_channel","wait_for_process_output","Clear","ClearDefault","borrow","borrow_mut","clear","","clone","clone_into","clone_to_uninit","cmp","default","eq","equivalent","","fmt","from","hash","into","partial_cmp","to_owned","try_from","try_into","type_id","DemuxEnum","","DemuxEnumBase","Output","SingleVariant","demux_enum","single_variant","Bound","BoundConnection","BufferedDrain","Connected","ConnectedDemux","ConnectedDirect","ConnectedSink","ConnectedSource","ConnectedTagged","Demux","","","","DemuxDrain","DeployPorts","DynSink","DynStream","DynStreamSink","InitConfig","Input","Merge","","","","MergeSource","Null","","","","Output","RealizedServerPort","Server","ServerBindConfig","ServerOrBound","ServerPort","Sink","Stream","StreamSink","Tagged","","","","TaggedSource","TcpPort","","","","UnixSocket","","","","accept_tcp","bind","borrow","","","","","","","","","","","","borrow_mut","","","","","","","","","","","","clone","","clone_into","","clone_to_uninit","","connect","connect_local_blocking","deserialize","","fmt","","","","","from","","","","","","","","","","","","","from_defn","","","","init","init_no_ack_start","instantiate","into","","","","","","","","","","","","into_sink","","","into_source","","","keys","launch","launch_flow","meta","poll_close","poll_flush","poll_next","","poll_ready","port","serialize","","sink_port","start_send","to_owned","","try_from","","","","","","","","","","","","try_into","","","","","","","","","","","","try_poll_next","","type_id","","","","","","","","","","","","MonotonicMap","borrow","borrow_mut","clone","clone_into","clone_to_uninit","default","fmt","from","get_mut_clear","get_mut_default","get_mut_with","into","new_init","to_owned","try_from","try_into","type_id","HashMultiSet","borrow","borrow_mut","clone","clone_into","clone_to_uninit","default","eq","equivalent","","fmt","from","from_iter","insert","into","to_owned","try_from","try_into","type_id","Address","Fleet","Host","HostBuilder","Hostname","Inbox","MessageSender","MessageWithAddress","Outbox","TransducerBuilderContext","add_host","borrow","","","","","","","borrow_mut","","","","","","","build","clone","clone_into","clone_to_uninit","default","deserialize","eq","equivalent","","fmt","from","","","","","","","get_host","get_host_mut","hash","into","","","","","","","new","","","new_inbox","new_outbox","process_network","run_single_tick_all_hosts","run_tick","run_until_quiescent","send","serialize","to_owned","try_from","","","","","","","try_into","","","","","","","type_id","","","","","","","with_transducer","SparseVec","borrow","borrow_mut","default","delete","from","into","iter","push","try_from","try_into","type_id","mpsc","Closed","Full","Receiver","SendError","Sender","TrySendError","borrow","","","","borrow_mut","","","","bounded","channel","clone","","","clone_into","","","clone_to_uninit","","","close","close_this_sender","drop","","eq","","equivalent","","","","fmt","","","","from","","","","","into","","","","is_closed","poll_close","poll_flush","poll_next","poll_ready","poll_recv","recv","send","start_send","to_owned","","","to_string","","try_from","","","","try_into","","","","try_poll_next","try_send","type_id","","","","unbounded"],"q":[[0,"hydroflow"],[37,"hydroflow::compiled"],[38,"hydroflow::compiled::pull"],[162,"hydroflow::scheduled"],[234,"hydroflow::scheduled::context"],[259,"hydroflow::scheduled::graph"],[315,"hydroflow::scheduled::graph_ext"],[326,"hydroflow::scheduled::handoff"],[394,"hydroflow::scheduled::handoff::handoff_list"],[402,"hydroflow::scheduled::input"],[429,"hydroflow::scheduled::net"],[449,"hydroflow::scheduled::net::network_vertex"],[450,"hydroflow::scheduled::port"],[501,"hydroflow::scheduled::query"],[527,"hydroflow::scheduled::reactor"],[541,"hydroflow::scheduled::state"],[581,"hydroflow::scheduled::ticks"],[644,"hydroflow::util"],[747,"hydroflow::util::clear"],[770,"hydroflow::util::demux_enum"],[777,"hydroflow::util::deploy"],[961,"hydroflow::util::monotonic_map"],[979,"hydroflow::util::multiset"],[998,"hydroflow::util::simulation"],[1084,"hydroflow::util::sparse_vec"],[1096,"hydroflow::util::unsync"],[1097,"hydroflow::util::unsync::mpsc"],[1174,"rustc_hash"],[1175,"core::iter::traits::iterator"],[1176,"core::cmp"],[1177,"core::hash"],[1178,"core::clone"],[1179,"hydroflow::compiled::pull::half_join_state"],[1180,"hydroflow::compiled::pull::half_join_state::multiset"],[1181,"hydroflow::compiled::pull::half_join_state::set"],[1182,"hydroflow::compiled::pull::half_join_state::fold"],[1183,"hydroflow::compiled::pull::half_join_state::fold_from"],[1184,"hydroflow::compiled::pull::half_join_state::reduce"],[1185,"hydroflow::compiled::pull::cross_join"],[1186,"core::fmt"],[1187,"core::ops::function"],[1188,"core::slice::iter"],[1189,"smallvec"],[1190,"std::collections::hash::map"],[1191,"core::option"],[1192,"hydroflow::compiled::pull::symmetric_hash_join"],[1193,"hydroflow::compiled::pull::anti_join"],[1194,"core::result"],[1195,"core::any"],[1196,"serde::ser"],[1197,"alloc::string"],[1198,"std::time"],[1199,"alloc::boxed"],[1200,"core::future::future"],[1201,"core::task::wake"],[1202,"std::sync::mpsc"],[1203,"alloc::borrow"],[1204,"core::convert"],[1205,"futures_core::stream"],[1206,"tokio::net::tcp::stream"],[1207,"hydroflow::scheduled::handoff::vector"],[1208,"alloc::vec"],[1209,"hydroflow_lang::diagnostic"],[1210,"serde::de"],[1211,"core::marker"],[1212,"hydroflow_lang::graph::hydroflow_graph"],[1213,"hydroflow::scheduled::handoff::tee"],[1214,"core::cell"],[1215,"core::iter::traits::collect"],[1216,"variadics"],[1217,"bytes::bytes"],[1218,"tokio::sync::mpsc::error"],[1219,"core::net::socket_addr"],[1220,"hydroflow::util::tcp"],[1221,"std::io::error"],[1222,"tokio_util::codec::decoder"],[1223,"tokio_util::codec::encoder"],[1224,"bytes::bytes_mut"],[1225,"tokio_util::codec::lines_codec"],[1226,"hydroflow::util::udp"],[1227,"hydroflow::util::monotonic"],[1228,"core::default"],[1229,"tokio_util::codec::length_delimited"],[1230,"bincode::error"],[1231,"core::task::poll"],[1232,"futures_util::stream::poll_fn"],[1233,"std::process"],[1234,"tokio::net::tcp::split_owned"],[1235,"tokio_util::codec::framed_write"],[1236,"tokio_util::codec::framed_read"],[1237,"tokio_util::codec::bytes_codec"],[1238,"tokio::net::udp"],[1239,"tokio::sync::mpsc::unbounded"],[1240,"tokio_stream::wrappers::mpsc_unbounded"],[1241,"tokio::net::unix::stream"],[1242,"tokio::net::unix::split_owned"],[1243,"core::num::nonzero"],[1244,"hydroflow_deploy_integration"],[1245,"core::pin"],[1246,"futures_sink"],[1247,"core::iter::traits::double_ended"],[1248,"core::iter::traits::marker"],[1249,"hydroflow_macro"],[1250,"hydroflow_datalog"],[1251,"hydroflow::util::socket"]],"i":"`````````````````````````````````````````````````BdCjCnAlB`BbD`AhAj876543210Af216542196542121659876543210219876543218730002102187388730210214`654987654321987654321987654321```DfDhDj21021021021010`21022110022110210```210`210`10```21``21021210210210`Ed00000000000000000000000`Fd000000000000000000000000000000000000000000000000000000`Jf000000000```Gb````JhGnJd10Jn2104211010100210000210Gd33352`13211432153221321Kh6432432Hd```AIb110```GfFj101111010Kn212112212121`Gl0000000000000`0000``````````HfHbLdLb3210Hh12H`5432Hj3654333234165430365436543``LhLj1010011010100101101010`J`000000000000``EfM`101010101010110010100101010101101010Mb``0Ej1010101010101010101010011001101010110101010010110101010101AIdAIf```10`````````````````10A@jOfOh43210`101010````````24321043210``````````````10432104321043210``````````````ACj0ACh111111111111111111```ACn`ACl1AD`````````ADfADlADbADn``````AEf4321`4321AFd`6```10`5432`5432543263AEnAF`AFjAFnAFf:98;7AFhAE`65432<;:=910<:<:<:==<:<;:=965432<;;:=910ADh763``=76543=<;>:219768736``1225421=;:2=;76543=<;>:2176543=<;>:215476543=<;>:21`AGb0000000000000000`AGf00000000000000000``````````AGhAIhAIjAGjAGnAGl5AH`5432160200060000054321606605432160260116636AHf116543271654327165432713`AHj0000000000`AI`0````NfNjLn32103``203203203122103003300332103321032221211222030321032103122103`","f":"````````````````````````````````````````````````{{g{f{b{d{c}}}}{f{b{d{{h{ce}}}}}}j}{{`{{n{}{{l{{h{ce}}}}}}}}}{A`AbAd}{A`AbAd}{{n{}{{l{{h{ce}}}}}}}}{f{{f{c}}}{}}00000000{{{f{b}}}{{f{bc}}}{}}00000000{{{f{bAf}}c{f{e}}}j{}{}}{{{f{b{Ah{ceg}}}}c{f{e}}}j{AdA`Ab}AdAd}{{{f{b{Aj{ceg}}}}c{f{e}}}j{AdA`Ab}{AdA`}Ad}{{{f{b{Al{ce}}}}}An{}{}}{{{f{b{B`{ce}}}}}An{}{}}{{{f{b{Bb{ce}}}}}An{}{}}{{{f{b{Ah{ceg}}}}}An{}{}{}}{{{f{b{Aj{ceg}}}}}An{}{}{}}{{}{{Bd{ce}}}{}{}}{{}{{Al{ce}}}{}{}}{{}{{B`{ce}}}{}{}}{{}{{Bb{ce}}}{}{}}{{}{{Ah{ceg}}}{}{}{}}{{}{{Aj{ceg}}}{}{}{}}{{{f{{Ah{ceg}}}}{f{bBf}}}BhBjBjBj}{{{f{{Aj{ceg}}}}{f{bBf}}}BhBjBjBj}{{{f{b{Al{ce}}}}imo}An{A`Ab}{}{}{{n{}{{l{{h{cg}}}}}}}{}{{Bn{{f{be}}g}{{Bl{k}}}}}{{Bn{}{{Bl{e}}}}}}{{{f{b{B`{ce}}}}imo}An{A`Ab}{}{}{{n{}{{l{{h{cg}}}}}}}{}{{Bn{{f{be}}g}{{Bl{k}}}}}{{Bn{g}{{Bl{e}}}}}}{cc{}}00000000{{{f{Af}}{f{c}}}{{C`{e}}}{}{}}{{{f{{Ah{ceg}}}}{f{c}}}{{C`{e}}}{AdA`Ab}AdAd}{{{f{{Aj{ceg}}}}{f{c}}}{{C`{e}}}{AdA`Ab}{AdA`}Ad}{{}c{}}00000000000{{{f{Af}}}j}0{{{f{Af}}}{{Cf{c{Cd{{Cb{e}}}}}}}{}{}}{{{f{{Ah{ceg}}}}}{{Cf{c{Cd{{Cb{e}}}}}}}{AdA`Ab}AdAd}{{{f{{Aj{ceg}}}}}{{Cf{c{Cd{{Cb{e}}}}}}}{AdA`Ab}{AdA`}Ad}{{{f{Af}}}Ch}{{{f{{Ah{ceg}}}}}Ch{AdA`Ab}AdAd}{{{f{{Aj{ceg}}}}}Ch{AdA`Ab}{AdA`}Ad}{{}{{h{ce}}}{}{}}00{{ei{f{b{Bd{cg}}}}}{{Cj{ecig}}}{A`Ad}{{n{}{{l{c}}}}}{A`Ad}{{n{}{{l{g}}}}}}{{{f{b{Cj{ecig}}}}}{{Cl{k}}}{A`Ad}{{n{}{{l{c}}}}}{A`Ad}{{n{}{{l{g}}}}}{}}{{{f{b{Cn{cgekimo}}}}}{{Cl{Aa}}}{A`AbAd}Ad{{n{}{{l{{h{ce}}}}}}}Ad{{n{}{{l{{h{ci}}}}}}}{{Af{cei}}}{{Af{cie}}}{}}{{{f{b{D`{ceg}}}}}{{Cl{i}}}{A`AbAd}{A`AbAd}{{n{}{{l{{h{ce}}}}}}}{}}{{{f{bAf}}}{{Cl{{h{ceg}}}}}{}{}{}}{{{f{b{Ah{ceg}}}}}{{Cl{{h{cge}}}}}{AdA`Ab}AdAd}{{{f{b{Aj{ceg}}}}}{{Cl{{h{cge}}}}}{AdA`Ab}{AdA`}Ad}{{{f{bAf}}{f{c}}{f{e}}}{{Cl{{h{ceg}}}}}{}{}{}}{{{f{b{Ah{ceg}}}}{f{c}}{f{g}}}{{Cl{{h{cge}}}}}{AdA`Ab}AdAd}{{{f{b{Aj{ceg}}}}{f{c}}{f{g}}}{{Cl{{h{cge}}}}}{AdA`Ab}{AdA`}Ad}{{{f{b{Bb{ce}}}}gk}An{A`Ab}{}{{n{}{{l{{h{ce}}}}}}}{}{{Bn{{f{be}}e}{{Bl{i}}}}}}{{gk{f{bm}}{f{bo}}j}{{`{{n{}{{l{{h{c{h{ei}}}}}}}}}}}{A`AbAd}Ad{{n{}{{l{{h{ce}}}}}}}Ad{{n{}{{l{{h{ci}}}}}}}{{Af{cei}}}{{Af{cie}}}}```{c{{Db{e}}}{}{}}00000000{{}{{Db{c}}}{}}00000000{fDd}00000000```{f{{f{c}}}{}}00{{{f{b}}}{{f{bc}}}{}}00{{{f{Df}}}Df}{{{f{Dh}}}Dh}{{{f{Dj}}}Dj}{{f{f{bc}}}An{}}00{fAn}00{{{f{Dh}}{f{Dh}}}Dl}{{{f{Dj}}{f{Dj}}}Dl}`{{{f{Df}}{f{Df}}}j}{{{f{Dh}}{f{Dh}}}j}{{{f{Dj}}{f{Dj}}}j}{{f{f{c}}}j{}}00000{{{f{Df}}{f{bBf}}}Bh}0{{{f{Dh}}{f{bBf}}}Bh}0{{{f{Dj}}{f{bBf}}}Bh}{cc{}}00```{{{f{Df}}{f{bc}}}AnDn}{{{f{Dh}}{f{bc}}}AnDn}{{{f{Dj}}{f{bc}}}AnDn}`{{}c{}}00`{{{f{Dh}}{f{Dh}}}{{Cl{Dl}}}}{{{f{Dj}}{f{Dj}}}{{Cl{Dl}}}}```{{{f{Df}}c}DbE`}{{{f{Dh}}c}DbE`}``{fc{}}00{fEb}0{c{{Db{e}}}{}{}}00{{}{{Db{c}}}{}}00{fDd}00`{{{f{bEd}}}An}{{{f{bEd}}c}{{Ef{c}}}Eh}{f{{f{c}}}{}}{{{f{b}}}{{f{bc}}}{}}{{{f{Ed}}}Ch}{{{f{Ed}}}Df}{{{f{Ed}}}Ej}{{{f{Ed}}}El}{{}Ed}{cc{}}{{}c{}}{{{f{Ed}}}j};{{{f{bEd}}{Ef{c}}}{{En{c}}}Eh}{{{f{bEd}}c}An{{F`{}{{Bl{An}}}}}}{{{f{Ed}}Dfj}An}{{{f{bEd}}{Ef{c}}e}AnEh{{Bn{{f{bc}}}}}}?{{{f{bEd}}{Ef{c}}}{{f{bc}}}Eh}{{{f{Ed}}{Ef{c}}}{{f{c}}}Eh}{c{{Db{e}}}{}{}}{{}{{Db{c}}}{}}{fDd}{{{f{Ed}}}Fb}`{{{f{bFd}}}An}{{{f{bFd}}c{Ff{g}}}{{Fj{e{Fh{e}}}}}{{G`{{Fn{Fl}}}}}{}{Gb{Gd{e}}}}{{{f{bFd}}c{Ff{g}}}{{Fj{e{Gf{e}}}}}{{G`{{Fn{Fl}}}}}{}{Gb{Gd{e}}}}{{{f{bFd}}c{Ff{g}}i}An{{G`{{Fn{Fl}}}}}{}{Gb{Gd{e}}}{{Gh{}{{l{e}}}}}}{{{f{bFd}}Gj}{{H`{{Gn{Gl}}}}}}{{{f{bFd}}c}{{Ef{c}}}Eh}{{{f{bFd}}cegi}Df{{G`{{Fn{Fl}}}}}{{Hd{Hb}}}{{Hd{Hf}}}{{Bn{{f{bEd}}}}}}{{{f{bFd}}c{H`{e}}{H`{g}}{Ff{i}}{Ff{k}}m}Df{{G`{{Fn{Fl}}}}}GbGbGbGb{{Bn{{f{Ed}}{f{{Hh{e}}}}{f{{Hh{g}}}}{f{{Hj{i}}}}{f{{Hj{k}}}}}}}}{{{f{bFd}}c{H`{e}}{H`{g}}{Ff{i}}k}Df{{G`{{Fn{Fl}}}}}GbGbGb{{Bn{{f{Ed}}{f{{Hh{e}}}}{f{{Hh{g}}}}{f{{Hj{i}}}}}}}}{{{f{bFd}}c{H`{e}}{H`{g}}i}Df{{G`{{Fn{Fl}}}}}GbGb{{Bn{{f{Ed}}{f{{Hh{e}}}}{f{{Hh{g}}}}}}}}{{{f{bFd}}c{H`{e}}{Ff{g}}{Ff{i}}k}Df{{G`{{Fn{Fl}}}}}GbGbGb{{Bn{{f{Ed}}{f{{Hh{e}}}}{f{{Hj{g}}}}{f{{Hj{i}}}}}}}}{{{f{bFd}}c{H`{e}}{Ff{g}}i}Df{{G`{{Fn{Fl}}}}}GbGb{{Bn{{f{Ed}}{f{{Hh{e}}}}{f{{Hj{g}}}}}}}}{{{f{bFd}}c{Hl{{H`{e}}}}{Hl{{Ff{g}}}}i}Df{{G`{{Fn{Fl}}}}}GbGb{{Bn{{f{bEd}}{f{{Hn{{f{{Hh{e}}}}}}}}{f{{Hn{{f{{Hj{g}}}}}}}}}}}}{{{f{bFd}}c{H`{e}}g}Df{{G`{{Fn{Fl}}}}}Gb{{Bn{{f{Ed}}{f{{Hh{e}}}}}}}}{{{f{bFd}}c{Ff{e}}g}Df{{G`{{Fn{Fl}}}}}Gb{{Bn{{f{Ed}}{f{{Hj{e}}}}}}}}{{{f{bFd}}cChegji}Df{{G`{{Fn{Fl}}}}}{{Hd{Hb}}}{{Hd{Hf}}}{{Bn{{f{bEd}}}}}}{{{f{bFd}}cCh{Hl{{H`{e}}}}{Hl{{Ff{g}}}}i}Df{{G`{{Fn{Fl}}}}}GbGb{{Bn{{f{bEd}}{f{{Hn{{f{{Hh{e}}}}}}}}{f{{Hn{{f{{Hj{g}}}}}}}}}}}}{{{f{bFd}}Gj}{{h{{Ff{{Gn{Gl}}}}{H`{{Gn{Gl}}}}}}}}{{{f{bFd}}Gj}{{Ff{{Gn{Gl}}}}}}{f{{f{c}}}{}}{{{f{b}}}{{f{bc}}}{}}{{{f{bFd}}Df}{{f{bEd}}}}{{{f{Fd}}}Ch}{{{f{Fd}}}Ej}{{}Fd}{{{f{Fd}}}{{Cl{{f{{Hn{{Ib{I`}}}}}}}}}}{{{f{bFd}}}An}{cc{}}{{{f{bFd}}}{{h{Id{H`{{Gn{c}}}}}}}{IfIh}}{{{f{bFd}}Id}{{H`{{Gn{c}}}}}{IfIh}}{{}c{}}{{{f{bFd}}}{{`{F`}}}}{{{f{bFd}}c}{{h{{Ff{e}}{H`{e}}}}}{{G`{{Fn{Fl}}}}}Gb}{{{f{Fd}}}{{Cl{{f{Ij}}}}}}9{{{f{bFd}}j}j}{{{f{bFd}}}{{Ff{{Gn{{h{Ilc}}}}}}}{InIh}}{{{f{Fd}}}J`}{{{f{bFd}}}{{Cl{Ch}}}}0{{{f{bFd}}c}An{{F`{}{{Bl{An}}}}}}{{{f{bFd}}}{{Cl{Jb}}}}0{{{f{bFd}}}j}000{{{f{bFd}}Df}j}{{{f{bFd}}{Ef{c}}e}AnEh{{Bn{{f{bc}}}}}}{{{f{bFd}}{H`{{Jd{c}}}}}AnAd}{{{f{bFd}}{f{{H`{{Jd{c}}}}}}}{{H`{{Jd{c}}}}}Ad}{c{{Db{e}}}{}{}}{{}{{Db{c}}}{}}{{{f{bFd}}}Ch}{fDd}`{{{f{bJf}}c{Ff{g}}}{{Fj{e{Fh{e}}}}}{{G`{{Fn{Fl}}}}}{}{Gb{Gd{e}}}}{{{f{bJf}}c{Ff{g}}}{{Fj{e{Gf{e}}}}}{{G`{{Fn{Fl}}}}}{}{Gb{Gd{e}}}}{{{f{bJf}}c{Ff{g}}i}An{{G`{{Fn{Fl}}}}}{}{Gb{Gd{e}}}{{Gh{}{{l{e}}}}}}{{{f{bJf}}c{H`{e}}{H`{g}}{Ff{i}}{Ff{k}}m}Df{{G`{{Fn{Fl}}}}}GbGbGbGb{{Bn{{f{Ed}}{f{{Hh{e}}}}{f{{Hh{g}}}}{f{{Hj{i}}}}{f{{Hj{k}}}}}}}}{{{f{bJf}}c{H`{e}}{H`{g}}{Ff{i}}k}Df{{G`{{Fn{Fl}}}}}GbGbGb{{Bn{{f{Ed}}{f{{Hh{e}}}}{f{{Hh{g}}}}{f{{Hj{i}}}}}}}}{{{f{bJf}}c{H`{e}}{H`{g}}i}Df{{G`{{Fn{Fl}}}}}GbGb{{Bn{{f{Ed}}{f{{Hh{e}}}}{f{{Hh{g}}}}}}}}{{{f{bJf}}c{H`{e}}{Ff{g}}{Ff{i}}k}Df{{G`{{Fn{Fl}}}}}GbGbGb{{Bn{{f{Ed}}{f{{Hh{e}}}}{f{{Hj{g}}}}{f{{Hj{i}}}}}}}}{{{f{bJf}}c{H`{e}}{Ff{g}}i}Df{{G`{{Fn{Fl}}}}}GbGb{{Bn{{f{Ed}}{f{{Hh{e}}}}{f{{Hj{g}}}}}}}}{{{f{bJf}}c{H`{e}}g}Df{{G`{{Fn{Fl}}}}}Gb{{Bn{{f{Ed}}{f{{Hh{e}}}}}}}}{{{f{bJf}}c{Ff{e}}g}Df{{G`{{Fn{Fl}}}}}Gb{{Bn{{f{Ed}}{f{{Hj{e}}}}}}}}````````{{{f{Jh}}}{{f{Eh}}}}{{{f{{Gn{c}}}}}{{f{Eh}}}{}}{{{f{{Jd{c}}}}}{{f{Eh}}}{}}{f{{f{c}}}{}}00{{{f{b}}}{{f{bc}}}{}}00{{{f{{Gb{}{{Jj{c}}}}}}}{{Jl{c}}}{}}{{{f{{Gn{c}}}}}{{Jl{e}}}{}{}}{{{f{{Jd{c}}}}}{{Jl{e}}}{}{}}{{{f{{Jd{c}}}}}{{Jd{c}}}Ad}{{{f{{Jn{c}}}}}{{Jn{c}}}{K`Ad}}{{f{f{bc}}}An{}}0{fAn}0{{{f{{Jn{c}}}}{f{{Jn{c}}}}}Dl{K`Kb}}{{}{{Gn{c}}}{}}{{}{{Jd{c}}}{}}{{{f{{Jn{c}}}}{f{{Jn{c}}}}}j{K`Kd}}{{f{f{c}}}j{}}0{{{f{{Jn{c}}}}{f{bBf}}}Bh{K`Bj}}{cc{}}00{{{f{Gd}}c}c{}}{{{f{{Gn{c}}}}{Hl{c}}}{{Hl{c}}}{}}{{{f{{Gn{c}}}}{Jn{e}}}{{Jn{e}}}{}{{n{}{{l{c}}}}}}{{{f{{Gn{c}}}}{Cl{c}}}{{Cl{c}}}{}}{{{f{{Gb{}{{Jj{c}}}}}}e}e{}{}}{{{f{{Jd{c}}}}{Hl{c}}}{{Hl{c}}}Ad}`{{{f{{Jn{c}}}}{f{be}}}An{K`Ab}Dn}{{}c{}}00{{{Jn{c}}}eK`{}}{{{f{Jh}}}j}{{{f{{Gn{c}}}}}j{}}{{{f{{Jd{c}}}}}j{}}{{{f{{Jn{c}}}}{f{{Jn{c}}}}}{{Cl{Dl}}}{K`Kf}}{{{f{{Gb{}{{Jj{c}}}}}}}c{}}{{{f{{Gn{c}}}}}e{}{}}{{{f{{Jd{c}}}}}e{}{}}{fc{}}0{c{{Db{e}}}{}{}}00{{{f{Kh}}c}{{Db{cc}}}{}}{{{f{{Gb{}{{Jj{c}}}}}}e}{{Db{ee}}}{}{}}{{}{{Db{c}}}{}}00{fDd}00`````{{{f{{Hd{}{{Kj{c}}}}}}{f{{Hn{`}}}}}cKl}{{{f{{Hd{}{{Kj{c}}}}}}{f{b{Hn{`}}}}{f{b{Hl{Dh}}}}Dfj}AnKl}{ch{}}```{f{{f{c}}}{}}0{{{f{b}}}{{f{bc}}}{}}0{{{f{{Gf{c}}}}}{{Gf{c}}}{}}{{f{f{bc}}}An{}}{fAn}{{}{{Gf{c}}}{}}{{{f{{Fj{ce}}}}}An{}{{Kn{c}}}}{cc{}}0{{{f{Kn}}c}j{}}{{{f{{Gf{c}}}}c}j{}}{{{f{{Fj{ce}}}}c}An{}{{Kn{c}}}}{{}c{}}0{{J`Dfe}{{Fj{ce}}}{}{{Kn{c}}}}{fc{}}{c{{Db{e}}}{}{}}0{{}{{Db{c}}}{}}0{fDd}0```{f{{f{c}}}{}}{{{f{b}}}{{f{bc}}}{}}{{{f{Gl}}}Gl}{{f{f{bc}}}An{}}{fAn}{L`Gl}{{{f{Gl}}{f{Gl}}}j}{{f{f{c}}}j{}}0{{{f{Gl}}{f{bBf}}}Bh}{cc{}}?`=<;:``````````99998888{{{f{{Hh{c}}}}}JlGb}{{{f{{Lb{Hbc}}}}}JlGb}{{{Ld{Hb{Jd{c}}}}{f{bFd}}}AnAd}{{{H`{{Jd{c}}}}{f{bFd}}}AnAd}4444{{{f{{Hj{e}}}}c}c{}{{Gd{c}}Gb}}{{{f{{Lb{Hfe}}}}c}c{}{{Gd{c}}Gb}}{{}c{}}000{{{f{c}}}{{f{{Lb{eg}}}}}{}Lf{}}{{{f{bc}}}{{f{b{Lb{eg}}}}}{}Lf{}}{{{f{{Hh{c}}}}}{}Gb}{{{f{{Lb{Hbc}}}}}{}Gb}{{{f{{Ld{Hb{Jd{c}}}}}}{f{bFd}}}{{H`{{Jd{c}}}}}Ad}{{{f{{H`{{Jd{c}}}}}}{f{bFd}}}{{H`{{Jd{c}}}}}Ad}{c{{Db{e}}}{}{}}000{{{f{{Hj{e}}}}c}{{Db{cc}}}{}{{Kh{c}}Gb}}{{{f{{Lb{Hfe}}}}c}{{Db{cc}}}{}{{Kh{c}}Gb}}{{}{{Db{c}}}{}}000{fDd}000``{f{{f{c}}}{}}0{{{f{b}}}{{f{bc}}}{}}0{{{Lh{c}}{Lh{c}}}{{Lh{c}}}{}}{{{f{bLj}}{Hl{{Lh{c}}}}}{{Lh{c}}}{}}{{}Lj}{{{Lh{c}}e}{{Lh{c}}}{}{{Ll{{f{c}}}{{Bl{j}}}}}}{cc{}}0{{}c{}}0{{{Lh{c}}g}{{Lh{e}}}{}{}{{Ll{c}{{Bl{e}}}}}}4{{{f{bLj}}}An}{{{Lh{c}}e}An{}{{Ll{c}}}}{{{f{bLj}}e}{{Lh{c}}}{}{{Bn{{f{Ed}}{f{{Hj{{Gn{c}}}}}}}}}}{{{Lh{c}}Ch}{{Hl{{Lh{c}}}}}Ad}{c{{Db{e}}}{}{}}0??>>`=<{{{f{J`}}}J`}{{f{f{bc}}}An{}}{fAn}:9{{J`Df}Fb}{fc{}}{{{f{J`}}Df}{{Db{An{Ln{{h{Dfj}}}}}}}}6{{}{{Db{c}}}{}}{fDd}``{f{{f{c}}}{}}0{{{f{b}}}{{f{bc}}}{}}0{{{f{{Ef{c}}}}}{{Ef{c}}}{}}{{{f{M`}}}M`}::99{{{f{{Ef{c}}}}{f{{Ef{c}}}}}DlKb}{{{f{M`}}{f{M`}}}Dl}{{{f{{Ef{c}}}}{f{{Ef{c}}}}}jKd}{{{f{M`}}{f{M`}}}j}{{f{f{c}}}j{}}000{{{f{{Ef{c}}}}{f{bBf}}}BhBj}{{{f{M`}}{f{bBf}}}Bh}{cc{}}0{{{Ef{c}}}M`Eh}{{{f{{Ef{c}}}}{f{be}}}AnAbDn}{{{f{M`}}{f{bc}}}AnDn}{{}c{}}0{{{f{{Ef{c}}}}{f{{Ef{c}}}}}{{Cl{Dl}}}Kf}{{{f{M`}}{f{M`}}}{{Cl{Dl}}}}{fc{}}0{c{{Db{e}}}{}{}}{M`{{Db{{Ef{c}}e}}}Eh{}}1{{}{{Db{c}}}{}}0{fDd}0````{{EjMb}c{}}{{MbMb}c{}}{{{f{bEj}}Mb}An}{{{f{bMb}}Mb}An}{f{{f{c}}}{}}0{{{f{b}}}{{f{bc}}}{}}0{{{f{Ej}}}Ej}{{{f{Mb}}}Mb}{{f{f{bc}}}An{}}0{fAn}0{{{f{Ej}}{f{Ej}}}Dl}{{{f{Mb}}{f{Mb}}}Dl}{{}Ej}{{}Mb}{c{{Db{Ej}}}Md}{c{{Db{Mb}}}Md}{{{f{Ej}}{f{Ej}}}j}{{{f{Mb}}{f{Mb}}}j}{{f{f{c}}}j{}}000{{{f{Ej}}{f{bBf}}}Bh}0{{{f{Mb}}{f{bBf}}}Bh}0{cc{}}0{{{f{Ej}}{f{bc}}}AnDn}{{{f{Mb}}{f{bc}}}AnDn}{{}c{}}0{Mbc{}}{MfEj}{MhMb}{{{f{Ej}}{f{Ej}}}{{Cl{Dl}}}}{{{f{Mb}}{f{Mb}}}{{Cl{Dl}}}}{{{f{Ej}}c}DbE`}{{{f{Mb}}c}DbE`}{{EjMb}c{}}{{EjEj}c{}}{{MbMb}c{}}{{{f{bEj}}Mb}An}{{{f{bMb}}Mb}An}`{fc{}}0{fEb}0{c{{Db{e}}}{}{}}0{{}{{Db{c}}}{}}0{fDd}0```````````````````{{Mje}{{Db{{h{{Ml{c}}{Mn{e}}Mj}}N`}}}{}{AdNb{Nd{c}}}}{Mj{{h{{Nf{{h{L`Mj}}}}{Nj{{Db{{h{NhMj}}N`}}}}Mj}}}}{Mj{{h{{Nf{{h{EbMj}}}}{Nj{{Db{{h{EbMj}}Nl}}}}Mj}}}}{Mj{{h{NnO`Mj}}}}{Mj{{h{ObOdMj}}}}{f{{f{c}}}{}}0000{{{f{b}}}{{f{bc}}}{}}0000`{{{f{{Of{c}}}}}{{Of{c}}}Ad}{{{f{{Oh{c}}}}}{{Oh{c}}}Ad}{{f{f{bc}}}An{}}0{fAn}0{ceGhOj}{ceGh{OlOn}}{e{{h{{Ml{c}}{Mn{e}}}}}{}{AdNb{Nd{c}}}}{{}{{h{{Ml{L`}}{Mn{A@`}}}}}}{{}{{h{{Ml{Eb}}{Mn{A@b}}}}}}``{c{{A@d{e}}}{{A@h{{Hn{A@f}}}}}If}{{{f{bA@j}}}An}{cc{}}0000{{}c{}}0000{{{f{Fl}}}{{Db{MjN`}}}}{{cCh}{{AA`{{`{{Bn{{f{bA@l}}}{{Bl{{A@n{Cl}}}}}}}}}}}{K`AAb}}``{c{{`{{n{}{{l{}}}}}}}Gh}{{{f{Fl}}{f{Fl}}}{{h{A@jAAdAAf}}}}{cL`In}`{{{f{b{Hn{c}}}}g}An{}Kb{{Ll{{f{c}}}{{Bl{{f{e}}}}}}}}`{Gj{{h{{AAj{AAhA@`}}{AAn{AAlA@`}}}}}}{Gj{{h{{AAj{AAhAB`}}{AAn{AAlAB`}}}}}}{{Gjc}{{h{{AAj{AAhc}}{AAn{AAlc}}}}}{AdNb}}{Gj{{h{{AAj{AAhA@b}}{AAn{AAlA@b}}}}}}{fc{}}0{c{{Db{e}}}{}{}}0000{{}{{Db{c}}}{}}0000{fDd}0000{ABb{{h{NnO`Mj}}}}{ABb{{h{ABdABfMj}}}}{{ABbe}{{h{{ABh{ec}}{ABj{e}}Mj}}}{}{{Nd{c}}Nb}}{ABb{{h{{ABh{A@bEb}}{ABj{A@b}}Mj}}}}{{}{{h{{ABl{c}}{ABn{c}}}}}{}}{AC`{{h{{AAj{ACbA@`}}{AAn{ACdA@`}}}}}}{AC`{{h{{AAj{ACbAB`}}{AAn{ACdAB`}}}}}}{{AC`c}{{h{{AAj{ACbc}}{AAn{ACdc}}}}}{AdNb}}{AC`{{h{{AAj{ACbA@b}}{AAn{ACdA@b}}}}}}`{{{Cl{ACf}}}{{h{{Nf{c}}{Nj{c}}}}}{}}{{{f{bEb}}{f{bAAf}}{f{Fl}}}An}``{f{{f{c}}}{}}{{{f{b}}}{{f{bc}}}{}}{{{f{bACh}}}An}{{{f{b{ACj{c}}}}}AnOl}{{{f{{ACj{c}}}}}{{ACj{c}}}{OlAd}}{{f{f{bc}}}An{}}{fAn}{{{f{{ACj{c}}}}{f{{ACj{c}}}}}Dl{OlKb}}{{}{{ACj{c}}}Ol}{{{f{{ACj{c}}}}{f{{ACj{c}}}}}j{OlKd}}{{f{f{c}}}j{}}0{{{f{{ACj{c}}}}{f{bBf}}}Bh{OlBj}}{cc{}}{{{f{{ACj{c}}}}{f{be}}}An{OlAb}Dn}{{}c{}}{{{f{{ACj{c}}}}{f{{ACj{c}}}}}{{Cl{Dl}}}{OlKf}}{fc{}}{c{{Db{e}}}{}{}}{{}{{Db{c}}}{}}{fDd}`````{{ACl{f{bc}}}An{}}{{{ACn{}{{Bl{c}}}}}c{}}```````````````````````````````````````````````````{{{f{bAD`}}}Gj}{ADb{{ADd{{En{F`}}}}}}{f{{f{c}}}{}}00000000000{{{f{b}}}{{f{bc}}}{}}00000000000{{{f{ADf}}}ADf}{{{f{ADb}}}ADb}{{f{f{bc}}}An{}}0{fAn}0{AD`cADh}0{c{{Db{ADf}}}Md}{c{{Db{ADb}}}Md}{{{f{ADf}}{f{bBf}}}{{Db{AnADj}}}}{{{f{ADl}}{f{bBf}}}{{Db{AnADj}}}}{{{f{ADb}}{f{bBf}}}{{Db{AnADj}}}}{{{f{AD`}}{f{bBf}}}{{Db{AnADj}}}}{{{f{ADn}}{f{bBf}}}{{Db{AnADj}}}}{cc{}}00000{{{f{ADf}}}ADl}111111{AD`{{ADd{{En{F`}}}}}}000{{}{{AE`{c}}}{IfOl}}0{{{f{ADf}}}AD`}{{}c{}}00000000000{{{AEf{}{{AEb{c}}{AEd{e}}}}}eIh{{AEj{c}{{AEh{N`}}}}IhAEl}}{AEn{{ADd{{En{AEj}}}}}}{{{AF`{c}}}{}AEf}{{{AFd{}{{Bl{c}}{AFb{e}}}}}eIh{{Gh{}{{l{{Db{cN`}}}}}}IhAEl}}{AEn{{ADd{{En{Gh}}}}}}{{{AFf{c}}}{}AFd}``{FdAn}`{{{ADd{{f{b{AFh{ce}}}}}}{f{bA@l}}}{{A@n{{Db{An}}}}}{}{{AEj{c}{{AEh{N`}}}}IhAEl}}0{{{ADd{{f{b{AFj{ce}}}}}}{f{bA@l}}}{{A@n{Cl}}}AAb{{Gh{}{{l{c}}}}IhAElAFl}}{{{ADd{{f{b{AFn{ce}}}}}}{f{bA@l}}}{{A@n{Cl}}}AAb{{Gh{}{{l{{Db{cN`}}}}}}IhAElAFl}}2{{{f{{AE`{c}}}}{f{Fl}}}AD`{}}{{{f{ADf}}c}DbE`}{{{f{ADb}}c}DbE`}{{{f{ADn}}}ADf}{{{ADd{{f{b{AFh{ce}}}}}}{h{AG`c}}}{{Db{An}}}{}{{AEj{c}{{AEh{N`}}}}IhAEl}}{fc{}}0{c{{Db{e}}}{}{}}00000000000{{}{{Db{c}}}{}}00000000000{{{ADd{{f{bc}}}}{f{bA@l}}}{{A@n{{Cl{Db}}}}}{}}0{fDd}00000000000`{f{{f{c}}}{}}{{{f{b}}}{{f{bc}}}{}}{{{f{{AGb{ce}}}}}{{AGb{ce}}}{KfAd}Ad}{{f{f{bc}}}An{}}{fAn}{{}{{AGb{ce}}}KfOl}{{{f{{AGb{ce}}}}{f{bBf}}}Bh{KfBj}Bj}{cc{}}{{{f{b{AGb{ce}}}}c}{{f{be}}}KfACh}{{{f{b{AGb{ce}}}}c}{{f{be}}}KfOl}{{{f{b{AGb{ce}}}}cg}{{f{be}}}Kf{}{{AGd{}{{Bl{e}}}}}}{{}c{}}{c{{AGb{ec}}}{}Kf}{fc{}}{c{{Db{e}}}{}{}}{{}{{Db{c}}}{}}{fDd}`{f{{f{c}}}{}}{{{f{b}}}{{f{bc}}}{}}{{{f{{AGf{c}}}}}{{AGf{c}}}{AdAbA`}}{{f{f{bc}}}An{}}{fAn}{{}{{AGf{c}}}{AbA`}}{{{f{{AGf{c}}}}{f{{AGf{c}}}}}j{KdAbA`}}{{f{f{c}}}j{}}0{{{f{{AGf{c}}}}{f{bBf}}}Bh{BjAbA`}}{cc{}}{e{{AGf{c}}}{AbA`}{{K`{}{{l{c}}}}}}{{{f{b{AGf{c}}}}c}An{AbA`}}{{}c{}}{fc{}}{c{{Db{e}}}{}{}}{{}{{Db{c}}}{}}{fDd}``````````{{{f{bAGh}}Ebc}{{f{AGj}}}{{AGd{{f{bAGl}}}{{Bl{Fd}}}}}}{f{{f{c}}}{}}000000{{{f{b}}}{{f{bc}}}{}}000000{AGnAGj}{{{f{AH`}}}AH`}{{f{f{bc}}}An{}}{fAn}{{}AGh}{c{{Db{AH`}}}Md}{{{f{AH`}}{f{AH`}}}j}{{f{f{c}}}j{}}0{{{f{AH`}}{f{bBf}}}Bh}{cc{}}000000{{{f{AGh}}{f{Fl}}}{{Cl{{f{AGj}}}}}}{{{f{bAGh}}{f{Fl}}}{{Cl{{f{bAGj}}}}}}{{{f{AH`}}{f{bc}}}AnDn}{{}c{}}000000{AHbAGn}:{{AHbEb}AH`}{{{f{bAGl}}Eb}{{ABn{{h{cAH`}}}}}{}}{{{f{bAGl}}Eb}{{`{{AEj{{h{cAH`}}}{{AEh{AHd}}}}}}}{}}{{{f{bAGh}}}An}{{{f{bAGh}}}j}{{{f{bAGj}}}j}2{{{f{AHf}}AHh}An}{{{f{AH`}}c}DbE`}{fc{}}{c{{Db{e}}}{}{}}000000{{}{{Db{c}}}{}}000000{fDd}000000{{AGnc}AGn{{AGd{{f{bAGl}}}{{Bl{Fd}}}}}}`{f{{f{c}}}{}}{{{f{b}}}{{f{bc}}}{}}{{}{{AHj{c}}}{}}{{{f{b{AHj{c}}}}{f{c}}}An{AdA`Ab}}{cc{}}{{}c{}}{{{f{{AHj{c}}}}}{{`{{AHl{}{{l{{f{c}}}}}}AHnAd}}}{AdA`Ab}}{{{f{b{AHj{c}}}}c}An{AdA`Ab}};:9```````77776666{Ch{{h{{Nf{c}}{Nj{c}}}}}{}}{{{Cl{ACf}}}{{h{{Nf{c}}{Nj{c}}}}}{}}{{{f{{Nf{c}}}}}{{Nf{c}}}{}}{{{f{{Ln{c}}}}}{{Ln{c}}}Ad}{{{f{{AI`{c}}}}}{{AI`{c}}}Ad}{{f{f{bc}}}An{}}00{fAn}00{{{f{b{Nj{c}}}}}An{}}{{{f{b{Nf{c}}}}}An{}}01{{{f{{Ln{c}}}}{f{{Ln{c}}}}}jKd}{{{f{{AI`{c}}}}{f{{AI`{c}}}}}jKd}{{f{f{c}}}j{}}000{{{f{{Ln{c}}}}{f{bBf}}}{{Db{AnADj}}}{}}0{{{f{{AI`{c}}}}{f{bBf}}}{{Db{AnADj}}}{}}0{cc{}}000{{{Ln{c}}}{{AI`{c}}}{}}{{}c{}}000{{{f{{Nf{c}}}}}j{}}{{{ADd{{f{b{Nf{c}}}}}}{f{bA@l}}}{{A@n{{Db{Ane}}}}}{}{}}0{{{ADd{{f{b{Nj{c}}}}}}{f{bA@l}}}{{A@n{{Cl{e}}}}}{}{}}1{{{f{b{Nj{c}}}}{f{A@l}}}{{A@n{{Cl{c}}}}}{}}{{{f{b{Nj{c}}}}}{{Cl{c}}}{}}{{{f{{Nf{c}}}}c}{{Db{An{Ln{c}}}}}{}}{{{ADd{{f{b{Nf{c}}}}}}c}{{Db{Ane}}}{}{}}{fc{}}00{fEb}0{c{{Db{e}}}{}{}}000{{}{{Db{c}}}{}}000{{{ADd{{f{bc}}}}{f{bA@l}}}{{A@n{{Cl{Db}}}}}{}}{{{f{{Nf{c}}}}c}{{Db{An{AI`{c}}}}}{}}{fDd}000{{}{{h{{Nf{c}}{Nj{c}}}}}{}}","D":"CBb","p":[[0,"mut"],[8,"FxHashSet",1174],[1,"reference"],[1,"tuple"],[1,"bool"],[17,"Item"],[10,"Iterator",1175],[10,"Eq",1176],[10,"Hash",1177],[10,"Clone",1178],[10,"HalfJoinState",38,1179],[5,"HalfMultisetJoinState",38,1180],[5,"HalfSetJoinState",38,1181],[5,"HalfJoinStateFold",38,1182],[1,"unit"],[5,"HalfJoinStateFoldFrom",38,1183],[5,"HalfJoinStateReduce",38,1184],[5,"CrossJoinState",38,1185],[5,"Formatter",1186],[8,"Result",1186],[10,"Debug",1186],[17,"Output"],[10,"FnMut",1187],[5,"Iter",1188],[1,"array"],[5,"SmallVec",1189],[5,"Iter",1190],[1,"usize"],[5,"CrossJoin",38,1185],[6,"Option",1191],[5,"SymmetricHashJoin",38,1192],[5,"AntiJoin",38,1193],[6,"Result",1194],[5,"TypeId",1195],[5,"SubgraphId",162],[5,"HandoffId",162],[5,"StateId",162],[6,"Ordering",1176],[10,"Hasher",1177],[10,"Serializer",1196],[5,"String",1197],[5,"Context",234],[5,"StateHandle",541],[10,"Any",1195],[5,"TickInstant",581],[5,"SystemTime",1198],[5,"Box",1199],[10,"Future",1200],[5,"Waker",1201],[5,"Hydroflow",259],[8,"SendPort",450],[5,"SyncSender",1202],[5,"Input",402],[1,"str"],[6,"Cow",1203],[10,"Into",1204],[10,"Handoff",326],[10,"CanReceive",326],[5,"Buffer",402],[10,"Stream",1205],[5,"TcpStream",1206],[5,"Message",429],[5,"VecHandoff",326,1207],[8,"RecvPort",450],[6,"RECV",450],[10,"PortList",394],[6,"SEND",450],[8,"RecvCtx",450],[8,"SendCtx",450],[5,"Vec",1208],[1,"slice"],[5,"SerdeSpan",1209],[5,"Diagnostic",1209],[1,"u16"],[10,"DeserializeOwned",1210],[10,"Send",1211],[5,"HydroflowGraph",1212],[8,"Address",449],[10,"Serialize",1196],[5,"Reactor",527],[8,"Never",0],[5,"TeeingHandoff",326,1213],[10,"GraphExt",315],[10,"HandoffMeta",326],[17,"Inner"],[5,"RefMut",1214],[5,"Iter",326],[10,"IntoIterator",1215],[10,"Ord",1176],[10,"PartialEq",1176],[10,"PartialOrd",1176],[10,"TryCanReceive",326],[17,"Ctx"],[10,"Variadic",1216],[10,"Give",402],[5,"Bytes",1217],[5,"PortCtx",450],[5,"Port",450],[10,"Polarity",450],[5,"Operator",501],[5,"Query",501],[10,"Fn",1187],[5,"SendError",1097,1218],[5,"StateHandleErased",541],[5,"TickDuration",581],[10,"Deserializer",1210],[1,"u64"],[1,"i64"],[6,"SocketAddr",1219],[8,"TcpFramedSink",644,1220],[8,"TcpFramedStream",644,1220],[5,"Error",1221],[10,"Decoder",1222],[10,"Encoder",1223],[5,"Sender",1097],[5,"BytesMut",1224],[5,"Receiver",1097],[6,"LinesCodecError",1225],[8,"UdpSink",644,1226],[8,"UdpStream",644,1226],[8,"UdpLinesSink",644,1226],[8,"UdpLinesStream",644,1226],[5,"MonotonicFn",644,1227],[5,"Morphism",644,1227],[10,"FromIterator",1215],[10,"Default",1228],[10,"Extend",1215],[5,"LengthDelimitedCodec",1229],[5,"LinesCodec",1225],[8,"Result",1230],[1,"u8"],[10,"AsRef",1204],[5,"DroppableChild",644],[5,"Context",1201],[6,"Poll",1231],[5,"PollFn",1232],[10,"Unpin",1211],[5,"ChildStdin",1233],[5,"ChildStdout",1233],[5,"OwnedWriteHalf",1234],[5,"FramedWrite",1235],[5,"OwnedReadHalf",1234],[5,"FramedRead",1236],[5,"BytesCodec",1237],[5,"UdpSocket",1238],[8,"UdpBytesSink",644,1226],[8,"UdpBytesStream",644,1226],[8,"UdpFramedSink",644,1226],[8,"UdpFramedStream",644,1226],[5,"UnboundedSender",1239],[5,"UnboundedReceiverStream",1240],[5,"UnixStream",1241],[5,"OwnedWriteHalf",1242],[5,"OwnedReadHalf",1242],[8,"NonZeroUsize",1243],[10,"Clear",747],[5,"ClearDefault",747],[10,"DemuxEnum",770],[10,"SingleVariant",770],[6,"ServerOrBound",777,1244],[6,"ServerBindConfig",777,1244],[5,"Pin",1245],[6,"ServerPort",777,1244],[10,"Connected",777,1244],[5,"Error",1186],[6,"RealizedServerPort",777,1244],[6,"BoundConnection",777,1244],[5,"DeployPorts",777],[17,"Input"],[17,"Sink"],[10,"ConnectedSink",777,1244],[17,"Error"],[10,"Sink",1246],[10,"Sync",1211],[5,"ConnectedDirect",777,1244],[5,"ConnectedDemux",777,1244],[17,"Stream"],[10,"ConnectedSource",777,1244],[5,"ConnectedTagged",777,1244],[5,"DemuxDrain",777,1244],[5,"MergeSource",777,1244],[10,"Sized",1211],[5,"TaggedSource",777,1244],[1,"u32"],[5,"MonotonicMap",961],[10,"FnOnce",1187],[5,"HashMultiSet",979],[5,"Fleet",998],[5,"Host",998],[5,"TransducerBuilderContext",998],[5,"HostBuilder",998],[5,"Address",998],[8,"Hostname",998],[6,"Infallible",1204],[10,"MessageSender",998],[8,"MessageWithAddress",998],[5,"SparseVec",1084],[10,"DoubleEndedIterator",1247],[10,"FusedIterator",1248],[6,"TrySendError",1097,1218],[10,"PortListSplit",394],[6,"Persistence",644],[6,"PersistenceKeyed",644],[5,"Inbox",998],[5,"Outbox",998]],"r":[[0,1249],[6,1250],[9,1249],[10,1249],[11,1249],[17,1249],[18,1249],[32,1216],[33,1216],[34,1216],[38,1193],[39,1185],[40,1185],[41,1179],[42,1182],[43,1183],[44,1184],[45,1180],[46,1181],[47,1192],[48,1193],[131,1192],[331,1213],[333,1207],[647,1227],[648,1227],[653,1220],[654,1220],[655,1226],[656,1226],[657,1226],[658,1226],[659,1226],[660,1226],[661,1226],[662,1226],[663,1220],[687,1220],[714,1220],[715,1220],[716,1220],[717,1220],[735,1226],[736,1226],[737,1226],[738,1226],[740,1251],[741,1251],[742,1251],[743,1251],[771,1249],[778,1244],[779,1244],[780,1244],[781,1244],[782,1244],[783,1244],[784,1244],[785,1244],[790,1244],[792,1244],[793,1244],[794,1244],[795,1244],[801,1244],[807,1244],[809,1244],[810,1244],[811,1244],[814,1244],[819,1244],[908,0],[1100,1218],[1102,1218]],"b":[[192,"impl-Display-for-SubgraphId"],[193,"impl-Debug-for-SubgraphId"],[194,"impl-Display-for-HandoffId"],[195,"impl-Debug-for-HandoffId"],[363,"impl-CanReceive%3CVec%3CT%3E%3E-for-VecHandoff%3CT%3E"],[364,"impl-CanReceive%3CIter%3CI%3E%3E-for-VecHandoff%3CT%3E"],[365,"impl-CanReceive%3COption%3CT%3E%3E-for-VecHandoff%3CT%3E"],[611,"impl-Display-for-TickInstant"],[612,"impl-Debug-for-TickInstant"],[613,"impl-Debug-for-TickDuration"],[614,"impl-Display-for-TickDuration"],[628,"impl-Sub%3CTickDuration%3E-for-TickInstant"],[629,"impl-Sub-for-TickInstant"],[1132,"impl-Debug-for-SendError%3CT%3E"],[1133,"impl-Display-for-SendError%3CT%3E"],[1134,"impl-Debug-for-TrySendError%3CT%3E"],[1135,"impl-Display-for-TrySendError%3CT%3E"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAAUDYQABAAAABAABAAgAAAANAAQAFAAAABcAAAAZAAYAJAABACcAHABFABAAXwACAGsAEQB+AAEAgQAhAKYAEAC4AA0AzAADANQAAQDZAAEA3QANAO4AAQD0AAAAAAECAAYBAwAMAQQAEgEBABYBAwAdAQAAHwEAACEBAQApAQAAOAEBADsBAABQAQcAWQEOAGwBAgBwAQAAcgEAAHYBAAB4AQAAegEAAHwBBgCFAQUAkwELAKEBAgCmARQAvQEFAMwBBwDiAQEA6AEDAO4BEQAEAgsAEQIEABkCAAAbAgIAIAITADYCAgA7AgoASgIdAGoCAQBuAgAAcQIIAHsCCQCdAgkAqAIFALQCAAC2AgAAzwIQAO4CAQDxAgkA/AIAAP4CBAAEAwAACgMNABkDEgAtAzgAbAMAAHMDBgCGAzsAwwMGANADAwDVAwkA4AMAAOMDAwDyAw0AAQQIABMEAAAlBBYAPgQCAEYEAgBQBAcAWgQIAGUECwB1BAAAewQDAIIEDgCSBAMA"}],["hydroflow_datalog",{"t":"Q","n":["datalog"],"q":[[0,"hydroflow_datalog"]],"i":"`","f":"`","D":"b","p":[],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OjAAAAEAAAAAAAAAEAAAAAAA"}],["hydroflow_datalog_core",{"t":"CHHHHFPPGPFPNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNOOONONNNONNNNNNNNNNNNNNNNNNN","n":["diagnostic","gen_hydroflow_graph","hydroflow_graph_to_program","parse_pipeline","parse_static","Diagnostic","Error","Help","Level","Note","SerdeSpan","Warning","borrow","","","borrow_mut","","","clone","","","clone_into","","","clone_to_uninit","","","cmp","column","deserialize","","","eq","fmt","","","","","","from","","","","","hash","into","","","is_error","","level","line","message","partial_cmp","path","serialize","","","span","spanned","to_owned","","","to_serde","to_string","","to_tokens","try_emit","try_emit_all","try_from","","","try_into","","","type_id","",""],"q":[[0,"hydroflow_datalog_core"],[5,"hydroflow_datalog_core::diagnostic"],[78,"proc_macro2"],[79,"hydroflow_lang::graph::hydroflow_graph"],[80,"hydroflow_lang::diagnostic"],[81,"alloc::vec"],[82,"core::result"],[83,"alloc::string"],[84,"rust_sitter"],[85,"hydroflow_lang::parse"],[86,"core::ops::function"],[87,"syn::expr"],[88,"core::clone"],[89,"core::cmp"],[90,"serde::de"],[91,"core::fmt"],[92,"syn::error"],[93,"core::hash"],[94,"core::option"],[95,"serde::ser"],[96,"core::convert"],[97,"core::iter::traits::collect"],[98,"core::any"],[99,"hydroflow_lang"]],"i":"``````Bd0`0`00fBh210210210210202102211100211002210211012021011210110111210210210","f":"`{b{{j{d{h{f}}}}}}{{dl}l}{{{Ab{{A`{n}}}}{Ab{c}}}{{j{Ad{h{f}}}}}{{An{{Ah{AfAf}}}{{Aj{Al}}}}}}{{{Ab{{A`{n}}}}{Ab{c}}}{{j{B`{h{f}}}}}{{An{{Ah{AfAf}}}{{Aj{Al}}}}}}```````{Ab{{Ab{c}}}{}}00{{{Ab{Bb}}}{{Ab{Bbc}}}{}}00{{{Ab{Bd}}}Bd}{{{Ab{{f{c}}}}}{{f{c}}}Bf}{{{Ab{Bh}}}Bh}{{Ab{Ab{Bbc}}}Bj{}}00{AbBj}00{{{Ab{Bd}}{Ab{Bd}}}Bl}`{c{{j{Bd}}}Bn}{c{{j{{f{e}}}}}BnC`}{c{{j{Bh}}}Bn}{{{Ab{Bd}}{Ab{Bd}}}Cb}{{{Ab{Bd}}{Ab{BbCd}}}{{j{BjCf}}}}{{{Ab{{f{Bh}}}}{Ab{BbCd}}}{{j{BjCf}}}}{{{Ab{{f{c}}}}{Ab{BbCd}}}{{j{BjCf}}}Ch}{{{Ab{f}}{Ab{BbCd}}}{{j{BjCf}}}}{{{Ab{Bh}}{Ab{BbCd}}}{{j{BjCf}}}}0{cc{}}{Cjf}1{AlBh}2{{{Ab{Bd}}{Ab{Bbc}}}BjCl}{{}c{}}00{{{Ab{Bd}}}Cb}{{{Ab{{f{c}}}}}Cb{}}```{{{Ab{Bd}}{Ab{Bd}}}{{Cn{Bl}}}}`{{{Ab{Bd}}c}jD`}{{{Ab{{f{c}}}}e}jDbD`}{{{Ab{Bh}}c}jD`}`{{AlBdc}f{{Dd{n}}}}{Abc{}}00{{{Ab{f}}}{{f{Bh}}}}{Abn}0{{{Ab{f}}}l}{{{Ab{f}}}{{j{Bjl}}}}{c{{j{Bjl}}}{{Dh{}{{Df{{Ab{f}}}}}}}}{c{{j{e}}}{}{}}00{{}{{j{c}}}{}}00{AbDj}00","D":"Cf","p":[[5,"Literal",78],[5,"HydroflowGraph",79],[5,"Diagnostic",5,80],[5,"Vec",81],[6,"Result",82],[5,"TokenStream",78],[5,"String",83],[5,"Spanned",84],[1,"reference"],[6,"Pipeline",85],[1,"usize"],[1,"tuple"],[17,"Output"],[5,"Span",78],[10,"Fn",86],[6,"Expr",87],[0,"mut"],[6,"Level",5,80],[10,"Clone",88],[5,"SerdeSpan",5,80],[1,"unit"],[6,"Ordering",89],[10,"Deserializer",90],[10,"Deserialize",90],[1,"bool"],[5,"Formatter",91],[5,"Error",91],[10,"Debug",91],[5,"Error",92],[10,"Hasher",93],[6,"Option",94],[10,"Serializer",95],[10,"Serialize",95],[10,"Into",96],[17,"Item"],[10,"IntoIterator",97],[5,"TypeId",98]],"r":[[0,99],[5,80],[8,80],[10,80]],"b":[[34,"impl-Display-for-Diagnostic%3CSerdeSpan%3E"],[35,"impl-Debug-for-Diagnostic%3CS%3E"],[36,"impl-Display-for-Diagnostic"],[37,"impl-Display-for-SerdeSpan"],[38,"impl-Debug-for-SerdeSpan"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAADMADAAAAAAAAgADAA0ADwAeAAkAKQAAACsAAAAtAAAANgAAADgAAgA9AAIAQQABAEYACAA="}],["hydroflow_deploy_integration",{"t":"PGIKFFKKFPPPPFIIIIRPPPPFPPPPRGPGGGRRKPPPPFPPPPPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNMNNMNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["Bound","BoundConnection","BufferedDrain","Connected","ConnectedDemux","ConnectedDirect","ConnectedSink","ConnectedSource","ConnectedTagged","Demux","","","","DemuxDrain","DynSink","DynStream","DynStreamSink","InitConfig","Input","Merge","","","","MergeSource","Null","","","","Output","RealizedServerPort","Server","ServerBindConfig","ServerOrBound","ServerPort","Sink","Stream","StreamSink","Tagged","","","","TaggedSource","TcpPort","","","","UnixSocket","","","","accept_tcp","bind","borrow","","","","","","","","","","","borrow_mut","","","","","","","","","","","clone","","clone_into","","clone_to_uninit","","connect","connect_local_blocking","deserialize","","fmt","","","","","from","","","","","","","","","","","","from_defn","","","","instantiate","into","","","","","","","","","","","into_sink","","","into_source","","","keys","poll_close","poll_flush","poll_next","","poll_ready","serialize","","sink_port","start_send","to_owned","","try_from","","","","","","","","","","","try_into","","","","","","","","","","","try_poll_next","","type_id","","","","","","","","","",""],"q":[[0,"hydroflow_deploy_integration"],[170,"tokio::net::tcp::stream"],[171,"core::future::future"],[172,"alloc::boxed"],[173,"core::pin"],[174,"core::result"],[175,"serde::de"],[176,"core::fmt"],[177,"core::marker"],[178,"std::io::error"],[179,"futures_sink"],[180,"futures_core::stream"],[181,"core::task::wake"],[182,"core::task::poll"],[183,"core::option"],[184,"serde::ser"],[185,"core::any"]],"i":"d````````AbB`jBb`````Bh4321`4321Cn`6```10`5432`5432543263CdChDnEfDf:98;7Dh54321;:9<80;9;9;9<<;9;:9<854321;::9<80Af652<65432<;:=91865762511431<:91<:65432<;:=9165432<;:=914365432<;:=91","f":"``````````````````````````````````````````````````{{{f{bd}}}h}{j{{A`{{n{l}}}}}}{f{{f{c}}}{}}0000000000{{{f{b}}}{{f{bc}}}{}}0000000000{{{f{Ab}}}Ab}{{{f{j}}}j}{{f{f{bc}}}Ad{}}0{fAd}0{dcAf}0{c{{Ah{Ab}}}Aj}{c{{Ah{j}}}Aj}{{{f{Ab}}{f{bAl}}}An}{{{f{B`}}{f{bAl}}}An}{{{f{j}}{f{bAl}}}An}{{{f{d}}{f{bAl}}}An}{{{f{Bb}}{f{bAl}}}An}{cc{}}00000{{{f{Ab}}}B`}11111{d{{A`{{n{l}}}}}}000{{{f{Ab}}}d}{{}c{}}0000000000{{{Bh{}{{Bd{c}}{Bf{e}}}}}eBj{{C`{c}{{Bl{Bn}}}}BjCb}}{Cd{{Cf{c}}}{}}{{{Ch{c}}}eBh{}}{{{Cn{}{{Cj{c}}{Cl{e}}}}}eBj{{Db{}{{D`{{Ah{cBn}}}}}}BjCb}}{CdDd}{{{Df{c}}}eCn{}}`{{{A`{{f{b{Dh{ce}}}}}}{f{bDj}}}{{Dl{{Ah{Adg}}}}}{}{{C`{c}{{Bl{Bn}}}}BjCb}{}}0{{{A`{{f{b{Dn{ce}}}}}}{f{bDj}}}{{Dl{{E`{g}}}}}Eb{{Db{}{{D`{c}}}}BjCbEd}{}}{{{A`{{f{b{Ef{ce}}}}}}{f{bDj}}}{{Dl{{E`{g}}}}}Eb{{Db{}{{D`{{Ah{cBn}}}}}}BjCbEd}{}}2{{{f{Ab}}c}AhEh}{{{f{j}}c}AhEh}{{{f{Bb}}}Ab}{{{A`{{f{b{Dh{ce}}}}}}{El{Ejc}}}{{Ah{Adg}}}{}{{C`{c}{{Bl{Bn}}}}BjCb}{}}{fc{}}0{c{{Ah{e}}}{}{}}0000000000{{}{{Ah{c}}}{}}0000000000{{{A`{{f{bc}}}}{f{bDj}}}{{Dl{{E`{Ah}}}}}{}}0{fEn}0000000000","D":"Bn","p":[[0,"mut"],[6,"ServerOrBound",0],[1,"reference"],[5,"TcpStream",170],[6,"ServerBindConfig",0],[10,"Future",171],[5,"Box",172],[5,"Pin",173],[6,"ServerPort",0],[1,"unit"],[10,"Connected",0],[6,"Result",174],[10,"Deserializer",175],[5,"Formatter",176],[8,"Result",176],[6,"RealizedServerPort",0],[6,"BoundConnection",0],[17,"Input"],[17,"Sink"],[10,"ConnectedSink",0],[10,"Send",177],[17,"Error"],[5,"Error",178],[10,"Sink",179],[10,"Sync",177],[5,"ConnectedDirect",0],[8,"DynSink",0],[5,"ConnectedDemux",0],[17,"Output"],[17,"Stream"],[10,"ConnectedSource",0],[17,"Item"],[10,"Stream",180],[8,"DynStream",0],[5,"ConnectedTagged",0],[5,"DemuxDrain",0],[5,"Context",181],[6,"Poll",182],[5,"MergeSource",0],[6,"Option",183],[10,"Unpin",177],[10,"Sized",177],[5,"TaggedSource",0],[10,"Serializer",184],[1,"u32"],[1,"tuple"],[5,"TypeId",185]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAJMABQAAACEAIwA2AGAAAABmAAQAdgA0AA=="}],["hydroflow_lang",{"t":"CCCCCCFPPGPFPNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNOOONONNNONNNNNNNNNNNNNNNNNNNGPFPPFFFGFFPPFPPPFPFPGPPFGNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOHCNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOONNNNNNNNNNNNNNNNNOOONNNCONNNNNNHONNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNOOOOHHHPPGPPPGPSPPPPPPPSSGFFGPGSSSKPPPPPPPPPPPPPFIOONNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNMONNNMNNNNHHONNNNNNNNNNNNNOOONNOOHOONNNNNNNNOONNOOHOOOOHONNNNOOOONOOOMONNNNNNNNNNNNNNNNNNNNNONNNNNNNNOOOOFGFFPPPFPPPFFPPPGPFFFGFPNOOONNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNOOOONNNNNNNNNNNNNOONONOOONNNNNNNNNNNNNHNOOOOOOOONNNNNNNNNNNNNOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOFFNNNNNNNNNNNNNNNNNNHHHFNNNNNNNNNNNNNNNNN","n":["diagnostic","graph","parse","pretty_span","process_singletons","union_find","Diagnostic","Error","Help","Level","Note","SerdeSpan","Warning","borrow","","","borrow_mut","","","clone","","","clone_into","","","clone_to_uninit","","","cmp","column","deserialize","","","eq","fmt","","","","","","from","","","","","hash","into","","","is_error","","level","line","message","partial_cmp","path","serialize","","","span","spanned","to_owned","","","to_serde","to_string","","to_tokens","try_emit","try_emit_all","try_from","","","try_into","","","type_id","","","Color","Comp","DiMulGraph","Dot","Elided","FlatGraphBuilder","GraphEdgeId","GraphLoopId","GraphNode","GraphNodeId","GraphSubgraphId","Handoff","Hoff","HydroflowGraph","Int","Mermaid","ModuleBoundary","OpInstGenerics","Operator","OperatorInstance","Path","PortIndexValue","Pull","Push","WriteConfig","WriteGraphType","add_statement","add_statement_with_loop","arguments_pre","arguments_raw","as_code","as_error_message_string","assert_valid","augment_args","augment_args_for_update","augment_subcommands","augment_subcommands_for_update","borrow","","","","","","","","","","","","","","borrow_mut","","","","","","","","","","","","","","build","build_hfcode","clone","","","","","","","","","","","","clone_into","","","","","","","","","","","","clone_to_uninit","","","","","","","","","","","","cmp","","","","","","combine","command","command_for_update","data","","","","default","","","","","","","","degree_in","degree_out","deserialize","","","","","","","","","edge","","edge_ids","","edge_ports","edges","","eliminate_extra_unions_tees","eq","","","","","","fmt","","","","","","","","","","","","","","","from","","","","","","","","","","","","","","","","","","","","from_arg_matches","","from_arg_matches_mut","","from_hfcode","from_ported","generic_args","generics","get_operator_generics","graph_algorithms","group_id","has_subcommand","hash","","","","input_ports","insert_edge","","insert_intermediate_node","insert_intermediate_vertex","insert_loop","insert_node","insert_node_op_inst","insert_node_op_insts_all","insert_subgraph","into","","","","","","","","","","","","","","is_specified","loop_children","loop_ids","loop_parent","loops","max_stratum","merge_modules","mermaid_string_flat","new","","","no_handoffs","no_pull_push","no_references","no_subgraphs","no_varnames","node","node_color_map","node_degree_in","node_degree_out","node_ids","node_loop","node_op_inst","node_predecessor_edges","node_predecessor_nodes","node_predecessors","node_singleton_references","node_subgraph","node_successor_edges","node_successor_nodes","node_successors","node_varname","nodes","op_constraints","op_short_text","op_text_no_imports","open_dot","open_graph","open_mermaid","ops","output_ports","partial_cmp","","","","","","partition_graph","persistence_args","predecessor_edges","predecessor_vertices","predecessors","remove_edge","","remove_from_subgraph","remove_intermediate_node","remove_intermediate_vertex","remove_vertex","serialize","","","","","","","","","set_node_singleton_references","set_subgraph_laziness","set_subgraph_stratum","singletons_referenced","span","","subgraph","subgraph_ids","subgraph_stratum","subgraphs","successor_edges","successor_vertices","successors","surface_syntax_string","to_dot","to_mermaid","to_name_string","to_owned","","","","","","","","","","","","to_possible_value","to_pretty_string","to_string","try_from","","","","","","","","","","","","","","try_into","","","","","","","","","","","","","","type_args","type_id","","","","","","","","","","","","","","update_from_arg_matches","","update_from_arg_matches_mut","","value_variants","with_capacity","write_dot","write_mermaid","write_mermaid_flat","write_surface_syntax","dst_span","import_expr","input","src_span","scc_kosaraju","topo_sort","topo_sort_scc","CompilerFusionOperator","Control","DelayType","Filter","Fixed","Flatten","FloType","Fold","IDENTITY_WRITE_FN","KeyedFold","LatticeFold","Map","MonotoneAccum","MultiIn","MultiOut","Mutable","NULL_WRITE_FN","OPERATORS","OperatorCategory","OperatorConstraints","OperatorWriteOutput","Persistence","","PortListSpec","RANGE_0","RANGE_1","RANGE_ANY","RangeTrait","Sink","Source","","Static","Stratum","Tick","","TickLazy","Unwindowing","","Variadic","Windowing","","WriteContextArgs","WriteFn","arguments","arguments_handles","borrow","","","","","","","","borrow_mut","","","","","","","","categories","clone","","","","","clone_into","","","","","clone_to_uninit","","","","","cmp","","","","contains","context","default","description","deserialize","end_bound","eq","","","","find_node_op_constraints","find_op_op_constraints","flo_type","fmt","","","","","from","","","","","","","","hard_range_inn","hard_range_out","has_singleton_output","hash","human_string","hydroflow","ident","identity_write_iterator_fn","input_delaytype_fn","inputs","into","","","","","","","","is_external_input","is_pull","make_ident","name","","node_id","null_write_iterator_fn","num_args","op_inst","op_name","op_span","operator_lookup","outputs","partial_cmp","","","","persistence_args","ports_inn","ports_out","root","serialize","singleton_output_ident","soft_range_inn","soft_range_out","start_bound","subgraph_id","to_owned","","","","","try_from","","","","","","","","try_into","","","","","","","","type_args","type_id","","","","","","","","write_fn","write_iterator","write_iterator_after","write_prologue","HfCode","HfStatement","IndexInt","Indexing","Int","Link","Loop","LoopStatement","ModuleBoundary","Name","Named","NamedHfStatement","Operator","","Paren","Path","Pipeline","","PipelineLink","PipelineParen","PipelineStatement","PortIndex","Ported","Use","args","","args_raw","arrow","borrow","","","","","","","","","","","","","borrow_mut","","","","","","","","","","","","","brace_token","bracket_token","clone","","","","","","","","clone_into","","","","","","","","clone_to_uninit","","","","","","","","cmp","eq","equals","fmt","","","","","","","","from","","","","","","","","","","","","","hash","ident","index","inn","inner","into","","","","","","","","","","","","","lhs","loop_token","name","","name_string","out","paren_token","","parse","","","","","","","","","","","","","parse_terminated","partial_cmp","path","pipeline","","","rhs","semi_token","","singletons_referenced","span","","","","","","","","","","","","","","statements","","to_owned","","","","","","","","to_pretty_string","to_tokens","","","","","","","","","","","","","try_from","","","","","","","","","","","","","try_into","","","","","","","","","","","","","type_arguments","type_id","","","","","","","","","","","","","value","PrettyRowCol","PrettySpan","borrow","","borrow_mut","","fmt","","from","","into","","to_string","","try_from","","try_into","","type_id","","postprocess_singletons","postprocess_singletons_handles","preprocess_singletons","UnionFind","borrow","borrow_mut","clone","clone_into","clone_to_uninit","default","find","from","into","new","same_set","to_owned","try_from","try_into","type_id","union","with_capacity"],"q":[[0,"hydroflow_lang"],[6,"hydroflow_lang::diagnostic"],[79,"hydroflow_lang::graph"],[455,"hydroflow_lang::graph::GraphNode"],[459,"hydroflow_lang::graph::graph_algorithms"],[462,"hydroflow_lang::graph::ops"],[648,"hydroflow_lang::parse"],[880,"hydroflow_lang::pretty_span"],[900,"hydroflow_lang::process_singletons"],[903,"hydroflow_lang::union_find"],[921,"core::clone"],[922,"core::cmp"],[923,"core::result"],[924,"serde::de"],[925,"core::fmt"],[926,"syn::error"],[927,"proc_macro2"],[928,"core::hash"],[929,"core::option"],[930,"serde::ser"],[931,"alloc::string"],[932,"core::convert"],[933,"core::iter::traits::collect"],[934,"core::any"],[935,"hydroflow_lang::graph::flat_graph_builder"],[936,"hydroflow_lang::graph::hydroflow_graph"],[937,"alloc::vec"],[938,"hydroflow_lang::graph::di_mul_graph"],[939,"slotmap"],[940,"clap_builder::builder::command"],[941,"syn::item"],[942,"slotmap::basic"],[943,"core::iter::traits::exact_size"],[944,"core::iter::traits::marker"],[945,"clap_builder::parser::matches::arg_matches"],[946,"clap_builder"],[947,"syn::spanned"],[948,"clap_builder::util::id"],[949,"slotmap::sparse_secondary"],[950,"core::iter::traits::double_ended"],[951,"std::io::error"],[952,"core::slice::iter"],[953,"core::iter::adapters::copied"],[954,"alloc::borrow"],[955,"clap_builder::builder::possible_value"],[956,"alloc::collections::btree::map"],[957,"core::marker"],[958,"core::ops::function"],[959,"core::ops::range"],[960,"std::collections::hash::map"],[961,"syn::expr"],[962,"syn::token"],[963,"syn::punctuated"],[964,"syn::path"],[965,"syn::parse"],[966,"quote::to_tokens"],[967,"core::default"],[968,"hydroflow_lang::graph::eliminate_extra_unions_tees"],[969,"hydroflow_lang::graph::flat_to_partitioned"]],"i":"```````f0`0`00hl210210210210202102211100211002210211012021011210110111210210210`F``EbDb``````Ej3`120`0`1`33``Ch0El0Cn4DdE`07714207EdEfEhCl97En=;6975<4321:80=;9`65<4321:80=;65<4321:80=;65<4321:80=;4321=;;<<43216975432166674321:=;6767767`4321=;6975<4321:80=;;66975<44332211:80=;;5<5<9;08``5<432186776777776975<4321:80=;;77777776975555577777777777777777855777`84321=;`0666677766674321:=;7778:;7777666777:65<4321:80=;<:;6975<4321:80=;6975<4321:80=;06975<4321:80=;5<5<<67777NbNd01```Jf0`0Nf1`1`111J`22Jd``````3`````33Jh1221240340``Jb04Kb4Jl24736150247315247352473524735473Jj318506584``226584726135842228033`2372613584233823`2333`3658422235322036358472613584726135842726135842111````FnKnCj`110``112`0`````0Gh00LbDn3LnM`Mb7GdL`6Ld;8Lf7:654;3281<9041;3281<90;3281<90;3281<90006;3281<907:654;3281<90041337:654;3281<90849693297:654;3281<90`0965286597:654;3281<90074;3281<9097:654;3281<907:654;3281<907:654;3281<9097:654;3281<900``MjMl1010101010101010````Mn0000000000000000","f":"`````````````{b{{b{c}}}{}}00{{{b{d}}}{{b{dc}}}{}}00{{{b{f}}}f}{{{b{{h{c}}}}}{{h{c}}}j}{{{b{l}}}l}{{b{b{dc}}}n{}}00{bn}00{{{b{f}}{b{f}}}A`}`{c{{Ab{f}}}Ad}{c{{Ab{{h{e}}}}}AdAf}{c{{Ab{l}}}Ad}{{{b{f}}{b{f}}}Ah}{{{b{f}}{b{dAj}}}Al}{{{b{{h{l}}}}{b{dAj}}}Al}{{{b{h}}{b{dAj}}}Al}{{{b{{h{c}}}}{b{dAj}}}AlAn}{{{b{l}}{b{dAj}}}Al}0{cc{}}{B`h}11{Bbl}{{{b{f}}{b{dc}}}nBd}{{}c{}}00{{{b{f}}}Ah}{{{b{{h{c}}}}}Ah{}}```{{{b{f}}{b{f}}}{{Bf{A`}}}}`{{{b{f}}c}AbBh}{{{b{{h{c}}}}e}AbBjBh}{{{b{l}}c}AbBh}`{{Bbfc}h{{Bn{Bl}}}}{bc{}}00{{{b{h}}}{{h{l}}}}{bBl}0{{{b{h}}}C`}{{{b{h}}}{{Ab{nC`}}}}{c{{Ab{nC`}}}{{Cd{}{{Cb{{b{h}}}}}}}}{c{{Ab{e}}}{}{}}00{{}{{Ab{c}}}{}}00{bCf}00``````````````````````````{{{b{dCh}}Cj}n}{{{b{dCh}}Cj{Bf{Cl}}}n}``{{{b{Cn}}{b{C`}}AhC`{b{d{D`{h}}}}}C`}{{{b{Db}}}Bl}{{{b{{Dd{ce}}}}}nDfDf}{DhDh}000{b{{b{c}}}{}}0000000000000{{{b{d}}}{{b{dc}}}{}}0000000000000{Ch{{Dl{Cn{D`{Dj}}{D`{h}}}}}}{{Dn{b{C`}}}{{Dl{{Bf{{Dl{CnC`}}}}{D`{h}}}}}}{{{b{{Dd{ce}}}}}{{Dd{ce}}}{Dfj}{Dfj}}{{{b{E`}}}E`}{{{b{Eb}}}Eb}{{{b{Ed}}}Ed}{{{b{Ef}}}Ef}{{{b{Eh}}}Eh}{{{b{Cl}}}Cl}{{{b{Ej}}}Ej}{{{b{El}}}El}{{{b{En}}}En}{{{b{F`}}}F`}{{{b{Db}}}Db}{{b{b{dc}}}n{}}00000000000{bn}00000000000{{{b{Ed}}{b{Ed}}}A`}{{{b{Ef}}{b{Ef}}}A`}{{{b{Eh}}{b{Eh}}}A`}{{{b{Cl}}{b{Cl}}}A`}{{{b{F`}}{b{F`}}}A`}{{{b{Db}}{b{Db}}}A`}{{DbDb}{{Ab{DbDb}}}}{{}Dh}0{{{b{Ed}}}Fb}{{{b{Ef}}}Fb}{{{b{Eh}}}Fb}{{{b{Cl}}}Fb}{{}{{Dd{ce}}}DfDf}{{}Ch}{{}Cn}{{}E`}{{}Ed}{{}Ef}{{}Eh}{{}Cl}{{{b{{Dd{ce}}}}c}FdDfDf}0{c{{Ab{{Dd{eg}}}}}Ad{DfAf}{DfAf}}{c{{Ab{Cn}}}Ad}{c{{Ab{Ed}}}Ad}{c{{Ab{Ef}}}Ad}{c{{Ab{Eh}}}Ad}{c{{Ab{Cl}}}Ad}{c{{Ab{Ej}}}Ad}{c{{Ab{F`}}}Ad}{c{{Ab{Db}}}Ad}{{{b{{Dd{ce}}}}e}{{Bf{{Dl{cc}}}}}DfDf}{{{b{Cn}}Ef}{{Dl{EdEd}}}}{{{b{{Dd{ce}}}}}{{Ff{e{Dl{cc}}}}}DfDf}{{{b{Cn}}}{{Ff{Ef{Dl{EdEd}}}}}}{{{b{Cn}}Ef}{{Dl{{b{Db}}{b{Db}}}}}}{{{b{{Dd{ce}}}}}{{`{{Fh{}{{Cb{{Dl{e{Dl{cc}}}}}}}}FjjAn}}}DfDf}{{{b{Cn}}}{{`{{Fh{}{{Cb{{Dl{Ef{Dl{EdEd}}}}}}}}FjjAn}}}}{{{b{dCn}}}n}{{{b{Ed}}{b{Ed}}}Ah}{{{b{Ef}}{b{Ef}}}Ah}{{{b{Eh}}{b{Eh}}}Ah}{{{b{Cl}}{b{Cl}}}Ah}{{{b{F`}}{b{F`}}}Ah}{{{b{Db}}{b{Db}}}Ah}{{{b{{Dd{ce}}}}{b{dAj}}}Al{DfAn}{DfAn}}{{{b{Ch}}{b{dAj}}}Al}{{{b{Cn}}{b{dAj}}}Al}{{{b{E`}}{b{dAj}}}Al}{{{b{Eb}}{b{dAj}}}Al}{{{b{Ed}}{b{dAj}}}Al}{{{b{Ef}}{b{dAj}}}Al}{{{b{Eh}}{b{dAj}}}Al}{{{b{Cl}}{b{dAj}}}Al}{{{b{Ej}}{b{dAj}}}Al}{{{b{El}}{b{dAj}}}Al}{{{b{En}}{b{dAj}}}Al}{{{b{F`}}{b{dAj}}}Al}{{{b{Db}}{b{dAj}}}Al}0{cc{}}{{{Fl{c{Dl{ee}}}}}{{Dd{ec}}}DfDf}1111{FbEd}22{FbEf}3{FbEh}{FbCl}55555{FnDb}6{{{b{G`}}}{{Ab{E`Gb}}}}{{{b{G`}}}{{Ab{EbGb}}}}{{{b{dG`}}}{{Ab{E`Gb}}}}{{{b{dG`}}}{{Ab{EbGb}}}}{DnCh}{{{Gd{c}}}{{Dl{DbcDb}}}Gf}``{{{b{d{D`{h}}}}{b{Gh}}}En}`{{}{{Bf{Gj}}}}{{{b{Gl}}}Ah}{{{b{Ed}}{b{dc}}}nBd}{{{b{Ef}}{b{dc}}}nBd}{{{b{Eh}}{b{dc}}}nBd}{{{b{Cl}}{b{dc}}}nBd}`{{{b{d{Dd{ce}}}}cc}eDfDf}{{{b{dCn}}EdDbEdDb}Ef}{{{b{dCn}}EfEj}{{Dl{EdEf}}}}{{{b{d{Dd{ce}}}}ce}{{Bf{{Dl{ee}}}}}DfDf}{{{b{dCn}}{Bf{Cl}}}Cl}{{{b{dCn}}Ej{Bf{Gn}}{Bf{Cl}}}Ed}{{{b{dCn}}EdEl}n}{{{b{dCn}}{b{d{D`{h}}}}}n}{{{b{dCn}}{D`{Ed}}}{{Ab{Eh{Dl{EdEh}}}}}}{{}c{}}0000000000000{{{b{Db}}}Ah}{{{b{Cn}}Cl}{{b{{D`{Cl}}}}}}{{{b{Cn}}}{{Ff{Cl{D`{Ed}}}}}}{{{b{Cn}}Cl}{{Bf{Cl}}}}{{{b{Cn}}}{{H`{Cl{D`{Ed}}}}}}{{{b{Cn}}}{{Bf{Fd}}}}{{{b{dCn}}}{{Ab{nh}}}}{{{b{Cn}}}Bl}{{}{{Dd{ce}}}DfDf}{{}Ch}{{}Cn}`````{{{b{Cn}}Ed}{{b{Ej}}}}{{{b{Cn}}}{{Hb{EdF`}}}}{{{b{Cn}}Ed}Fd}0{{{b{Cn}}}{{Ff{EdEj}}}}{{{b{Cn}}Ed}{{Bf{Cl}}}}{{{b{Cn}}Ed}{{Bf{{b{El}}}}}}{{{b{Cn}}Ed}{{`{{Hd{}{{Cb{Ef}}}}FhFjjAn}}}}{{{b{Cn}}Ed}{{`{{Hd{}{{Cb{Ed}}}}FhFjjAn}}}}{{{b{Cn}}Ed}{{`{{Hd{}{{Cb{{Dl{EfEd}}}}}}FhFjjAn}}}}{{{b{Cn}}Ed}{{b{{Hf{{Bf{Ed}}}}}}}}{{{b{Cn}}Ed}{{Bf{Eh}}}}432{{{b{Cn}}Ed}{{Bf{Gn}}}}{{{b{Cn}}}{{H`{EdEj}}}}```{{{b{Cn}}{b{E`}}}{{Hh{n}}}}{{{b{Cn}}Eb{Bf{E`}}}{{Hh{n}}}}1``{{{b{Ed}}{b{Ed}}}{{Bf{A`}}}}{{{b{Ef}}{b{Ef}}}{{Bf{A`}}}}{{{b{Eh}}{b{Eh}}}{{Bf{A`}}}}{{{b{Cl}}{b{Cl}}}{{Bf{A`}}}}{{{b{F`}}{b{F`}}}{{Bf{A`}}}}{{{b{Db}}{b{Db}}}{{Bf{A`}}}}{Cn{{Ab{Cnh}}}}`{{{b{{Dd{ce}}}}c}{{Hl{{Hj{e}}}}}DfDf}{{{b{{Dd{ce}}}}c}{{`{{Hd{}{{Cb{c}}}}FhFjjAn}}}DfDf}{{{b{{Dd{ce}}}}c}{{`{{Hd{}{{Cb{{Dl{ec}}}}}}FhFjjAn}}}DfDf}{{{b{d{Dd{ce}}}}e}{{Bf{{Dl{cc}}}}}DfDf}{{{b{dCn}}Ef}n}{{{b{dCn}}Ed}Ah}{{{b{dCn}}Ed}n}{{{b{d{Dd{ce}}}}c}{{Bf{{Dl{e{Dl{ee}}}}}}}DfDf}{{{b{d{Dd{ce}}}}c}nDfDf}{{{b{{Dd{ce}}}}g}Ab{DfBj}{DfBj}Bh}{{{b{Cn}}c}AbBh}{{{b{Ed}}c}AbBh}{{{b{Ef}}c}AbBh}{{{b{Eh}}c}AbBh}{{{b{Cl}}c}AbBh}{{{b{Ej}}c}AbBh}{{{b{F`}}c}AbBh}{{{b{Db}}c}AbBh}{{{b{dCn}}Ed{D`{{Bf{Ed}}}}}{{Bf{{D`{{Bf{Ed}}}}}}}}{{{b{dCn}}EhAh}Ah}{{{b{dCn}}EhFd}{{Bf{Fd}}}}`{{{b{Ej}}}Bb}{{{b{Db}}}Bb}{{{b{Cn}}Eh}{{b{{D`{Ed}}}}}}{{{b{Cn}}}{{Ff{Eh{D`{Ed}}}}}}{{{b{Cn}}Eh}{{Bf{Fd}}}}{{{b{Cn}}}{{H`{Eh{D`{Ed}}}}}}{{{b{{Dd{ce}}}}c}{{Hl{{Hj{e}}}}}DfDf}{{{b{{Dd{ce}}}}c}{{`{{Hd{}{{Cb{c}}}}FhFjjAn}}}DfDf}{{{b{{Dd{ce}}}}c}{{`{{Hd{}{{Cb{{Dl{ec}}}}}}FhFjjAn}}}DfDf}{{{b{Cn}}}Bl}{{{b{Cn}}{b{E`}}}Bl}0{{{b{Ej}}}{{Hn{Gl}}}}{bc{}}00000000000{{{b{Eb}}}{{Bf{I`}}}}2{bBl}{c{{Ab{e}}}{}{}}0000000000000{{}{{Ab{c}}}{}}0000000000000`{bCf}0000000000000{{{b{dE`}}{b{G`}}}{{Ab{nGb}}}}{{{b{dEb}}{b{G`}}}{{Ab{nGb}}}}{{{b{dE`}}{b{dG`}}}{{Ab{nGb}}}}{{{b{dEb}}{b{dG`}}}{{Ab{nGb}}}}{{}{{b{{Hf{Eb}}}}}}{Fd{{Dd{ce}}}DfDf}{{{b{Cn}}c{b{E`}}}AlIb}0{{{b{Cn}}{b{dc}}}AlIb}0````{{eim}{{Id{cc}}}{IfIhIj}{{Cd{}{{Cb{c}}}}}{{Cd{}{{Cb{c}}}}}{{In{c}{{Il{g}}}}}{{Cd{}{{Cb{c}}}}}{{In{c}{{Il{k}}}}}}{{ei}{{Ab{{D`{c}}{D`{c}}}}}{IfIhIj}{{Cd{}{{Cb{c}}}}}{{Cd{}{{Cb{c}}}}}{{In{c}{{Il{g}}}}}}{{gko}{{D`{c}}}{IfIhIj}{{Cd{}{{Cb{c}}}}}{{In{}{{Il{e}}}}}{{Cd{}{{Cb{c}}}}}{{In{c}{{Il{i}}}}}{{Cd{}{{Cb{c}}}}}{{In{c}{{Il{m}}}}}}`````````````````````````````````````````````{b{{b{c}}}{}}0000000{{{b{d}}}{{b{dc}}}{}}0000000`{{{b{J`}}}J`}{{{b{Jb}}}Jb}{{{b{Jd}}}Jd}{{{b{Jf}}}Jf}{{{b{Jh}}}Jh}{{b{b{dc}}}n{}}0000{bn}0000{{{b{J`}}{b{J`}}}A`}{{{b{Jd}}{b{Jd}}}A`}{{{b{Jf}}{b{Jf}}}A`}{{{b{Jh}}{b{Jh}}}A`}{{{b{Jj}}{b{c}}}Ah{}}`{{}Jl}{Jf{{b{Gl}}}}{c{{Ab{Jd}}}Ad}{{{b{Jj}}}{{Jn{{b{c}}}}}K`}{{{b{J`}}{b{J`}}}Ah}{{{b{Jd}}{b{Jd}}}Ah}{{{b{Jf}}{b{Jf}}}Ah}{{{b{Jh}}{b{Jh}}}Ah}{{{b{Ej}}}{{Bf{{b{Kb}}}}}}{{{b{Gh}}}{{Bf{{b{Kb}}}}}}`{{{b{Kb}}{b{dAj}}}Al}{{{b{J`}}{b{dAj}}}Al}{{{b{Jd}}{b{dAj}}}Al}{{{b{Jf}}{b{dAj}}}Al}{{{b{Jh}}{b{dAj}}}Al}{cc{}}0000000```{{{b{Jf}}{b{dc}}}nBd}{{{b{Jj}}}Bl}``{{{b{Jb}}}C`}``{{}c{}}0000000``{{{b{Jb}}c}Gn{{Kd{Gl}}}}{Jf{{b{Gl}}}}``3````{{}{{b{{Kf{{b{Gl}}{b{Kb}}}}}}}}`{{{b{J`}}{b{J`}}}{{Bf{A`}}}}{{{b{Jd}}{b{Jd}}}{{Bf{A`}}}}{{{b{Jf}}{b{Jf}}}{{Bf{A`}}}}{{{b{Jh}}{b{Jh}}}{{Bf{A`}}}}````{{{b{Jd}}c}AbBh}```{{{b{Jj}}}{{Jn{{b{c}}}}}K`}`{bc{}}0000{c{{Ab{e}}}{}{}}0000000{{}{{Ab{c}}}{}}0000000`{bCf}0000000````````````````````````````{{{b{Gh}}}{{b{{Kl{KhKj}}}}}}```{b{{b{c}}}{}}000000000000{{{b{d}}}{{b{dc}}}{}}000000000000``{{{b{Kn}}}Kn}{{{b{{Gd{c}}}}}{{Gd{c}}}j}{{{b{L`}}}L`}{{{b{Lb}}}Lb}{{{b{Ld}}}Ld}{{{b{Fn}}}Fn}{{{b{Gh}}}Gh}{{{b{Lf}}}Lf}{{b{b{dc}}}n{}}0000000{bn}0000000{{{b{Lf}}{b{Lf}}}A`}{{{b{Lf}}{b{Lf}}}Ah}`{{{b{Kn}}{b{dAj}}}Al}{{{b{{Gd{c}}}}{b{dAj}}}AlAn}{{{b{L`}}{b{dAj}}}Al}{{{b{Lb}}{b{dAj}}}Al}{{{b{Ld}}{b{dAj}}}Al}{{{b{Fn}}{b{dAj}}}Al}{{{b{Gh}}{b{dAj}}}Al}{{{b{Lf}}{b{dAj}}}Al}{cc{}}000000000000{{{b{Lf}}{b{dc}}}nBd}````{{}c{}}000000000000``{{{b{Gh}}}Lh}`{{{b{Gh}}}Bl}```{Lj{{Ll{Dn}}}}{Lj{{Ll{Cj}}}}{Lj{{Ll{Ln}}}}{Lj{{Ll{M`}}}}{Lj{{Ll{Mb}}}}{Lj{{Ll{Kn}}}}{Lj{{Ll{{Gd{c}}}}}Md}{Lj{{Ll{L`}}}}{Lj{{Ll{Lb}}}}{Lj{{Ll{Ld}}}}{Lj{{Ll{Fn}}}}{Lj{{Ll{Gh}}}}{Lj{{Ll{Lf}}}}{C`{{Ll{{Kl{ce}}}}}MdMd}{{{b{Lf}}{b{Lf}}}{{Bf{A`}}}}````````{bBb}000000000000```{bc{}}0000000{{{b{Gh}}}Bl}{{{b{Dn}}{b{dC`}}}n}{{{b{Cj}}{b{dC`}}}n}{{{b{Ln}}{b{dC`}}}n}{{{b{M`}}{b{dC`}}}n}{{{b{Mb}}{b{dC`}}}n}{{{b{Kn}}{b{dC`}}}n}{{{b{{Gd{c}}}}{b{dC`}}}nMf}{{{b{L`}}{b{dC`}}}n}{{{b{Lb}}{b{dC`}}}n}{{{b{Ld}}{b{dC`}}}n}{{{b{Fn}}{b{dC`}}}n}{{{b{Gh}}{b{dC`}}}n}{{{b{Lf}}{b{dC`}}}n}{c{{Ab{e}}}{}{}}000000000000{{}{{Ab{c}}}{}}000000000000{{{b{Gh}}}{{Bf{{b{{Kl{MhKj}}}}}}}}{bCf}000000000000```{b{{b{c}}}{}}0{{{b{d}}}{{b{dc}}}{}}0{{{b{Mj}}{b{dAj}}}Al}{{{b{Ml}}{b{dAj}}}Al}{cc{}}0{{}c{}}0{bBl}0::9977{{C`c{b{Gn}}}{{Kl{KhKj}}}{{Cd{}{{Cb{Gn}}}}}}{{C`c}{{Kl{KhKj}}}{{Cd{}{{Cb{Gn}}}}}}{{C`{b{d{D`{Gn}}}}}C`}`98{{{b{{Mn{c}}}}}{{Mn{c}}}{Dfj}}{{b{b{dc}}}n{}}{bn}{{}{{Mn{c}}}{DfN`}}{{{b{d{Mn{c}}}}c}cDf}:9{{}{{Mn{c}}}Df}{{{b{d{Mn{c}}}}cc}AhDf}{bc{}}{c{{Ab{e}}}{}{}}{{}{{Ab{c}}}{}}{bCf}{{{b{d{Mn{c}}}}cc}nDf}{Fd{{Mn{c}}}Df}","D":"BJj","p":[[1,"reference"],[0,"mut"],[6,"Level",6],[5,"Diagnostic",6],[10,"Clone",921],[5,"SerdeSpan",6],[1,"unit"],[6,"Ordering",922],[6,"Result",923],[10,"Deserializer",924],[10,"Deserialize",924],[1,"bool"],[5,"Formatter",925],[8,"Result",925],[10,"Debug",925],[5,"Error",926],[5,"Span",927],[10,"Hasher",928],[6,"Option",929],[10,"Serializer",930],[10,"Serialize",930],[5,"String",931],[10,"Into",932],[5,"TokenStream",927],[17,"Item"],[10,"IntoIterator",933],[5,"TypeId",934],[5,"FlatGraphBuilder",79,935],[6,"HfStatement",648],[5,"GraphLoopId",79],[5,"HydroflowGraph",79,936],[5,"Vec",937],[6,"PortIndexValue",79],[5,"DiMulGraph",79,938],[10,"Key",939],[5,"Command",940],[5,"ItemUse",941],[1,"tuple"],[5,"HfCode",648],[5,"WriteConfig",79,936],[6,"WriteGraphType",79,936],[5,"GraphNodeId",79],[5,"GraphEdgeId",79],[5,"GraphSubgraphId",79],[6,"GraphNode",79],[5,"OperatorInstance",79],[5,"OpInstGenerics",79],[6,"Color",79],[5,"KeyData",939],[1,"usize"],[5,"Keys",942],[10,"ExactSizeIterator",943],[10,"FusedIterator",944],[5,"SlotMap",942],[6,"PortIndex",648],[5,"ArgMatches",945],[8,"Error",946],[5,"Ported",648],[10,"Spanned",947],[5,"Operator",648],[5,"Id",948],[1,"str"],[5,"Ident",927],[5,"Iter",942],[5,"SparseSecondaryMap",949],[10,"DoubleEndedIterator",950],[1,"slice"],[8,"Result",951],[5,"Iter",952],[5,"Copied",953],[6,"Cow",954],[5,"PossibleValue",955],[10,"Write",925],[5,"BTreeMap",956],[10,"Copy",957],[10,"Eq",922],[10,"Ord",922],[17,"Output"],[10,"FnMut",958],[6,"DelayType",462],[5,"WriteContextArgs",462],[6,"Persistence",462],[6,"OperatorCategory",462],[6,"FloType",462],[10,"RangeTrait",462],[5,"OperatorWriteOutput",462],[6,"Bound",959],[10,"Sized",957],[5,"OperatorConstraints",462],[10,"AsRef",932],[5,"HashMap",960],[6,"Expr",961],[5,"Comma",962],[5,"Punctuated",963],[6,"Pipeline",648],[5,"PipelineParen",648],[5,"PipelineLink",648],[5,"Indexing",648],[5,"IndexInt",648],[5,"Path",964],[8,"ParseStream",965],[8,"Result",926],[5,"NamedHfStatement",648],[5,"PipelineStatement",648],[5,"LoopStatement",648],[10,"Parse",965],[10,"ToTokens",966],[6,"GenericArgument",964],[5,"PrettySpan",880],[5,"PrettyRowCol",880],[5,"UnionFind",903],[10,"Default",967],[15,"Handoff",455],[15,"ModuleBoundary",455],[6,"PortListSpec",462]],"r":[[81,938],[84,935],[92,936],[103,936],[104,936],[221,968],[350,969]],"b":[[35,"impl-Display-for-Diagnostic%3CSerdeSpan%3E"],[36,"impl-Display-for-Diagnostic"],[37,"impl-Debug-for-Diagnostic%3CS%3E"],[38,"impl-Debug-for-SerdeSpan"],[39,"impl-Display-for-SerdeSpan"],[241,"impl-Display-for-PortIndexValue"],[242,"impl-Debug-for-PortIndexValue"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAEQCOAAOAA8AHwAJACoAAAAtAAEANwAAADkAAgA+AAIAQgABAEcACABxAB8AkwApAL4ADQDOAAgA3wAUAPUAAAD6AAAA/QAAAP8AAQAGAQAACAEDABIBBQBZAQUAagEIAIQBDACSARwAsAESAM8BAQDSAQAA1AEAANYBAADYAQIA3AEBAOUBAADrAQEA8wEAAPYBAAD8AQ8ADQISACICAAAkAgAAJgIDAC0CBAA9AgAAWQIDAGECAABnAhQAfQIHAIkCFACfAkQA8QIEAAMDNgA7AzUAcwMFAH0DBwCJAwUAlAMDAA=="}],["hydroflow_macro",{"t":"YXQQQXQQ","n":["DemuxEnum","hydroflow_main","hydroflow_parser","hydroflow_syntax","hydroflow_syntax_noemit","hydroflow_test","monotonic_fn","morphism"],"q":[[0,"hydroflow_macro"]],"i":"````````","f":"````````","D":"j","p":[],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OjAAAAEAAAAAAAMAEAAAAAAAAQACAAYA"}],["latency_measure",{"t":"HCFFPPPFFGNNNNNNNNNNONNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOONNNNNONNNNNNNNNNNNNNNNNNNNONNNNN","n":["main","protocol","OperationPayload","Payload","","Ping","Pong","QueryResponse","Timestamped","TopolotreeMessage","borrow","","","","","borrow_mut","","","","","change","clone","","","","","clone_into","","","","","clone_to_uninit","","","","","contents","data","deserialize","","","","","eq","","","","","equivalent","","","","","","","","","","fmt","","","","","from","","","","","hash","","","","into","","","","","key","","","serialize","","","","","timestamp","to_owned","","","","","try_from","","","","","try_into","","","","","type_id","","","","","value","vzip","","","",""],"q":[[0,"latency_measure"],[2,"latency_measure::protocol"],[112,"core::clone"],[113,"core::fmt"],[114,"core::result"],[115,"serde::de"],[116,"core::cmp"],[117,"core::hash"],[118,"serde::ser"],[119,"core::any"]],"i":"````n00```h1A`AbAd3421013421034210342102334210342103344221100342103421034203421021034210334210342103421034210034210","f":"{{}b}`````````{d{{d{c}}}{}}0000{{{d{f}}}{{d{fc}}}{}}0000`{{{d{{h{c}}}}}{{h{c}}}{jl}}{{{d{n}}}n}{{{d{{A`{c}}}}}{{A`{c}}}{jl}}{{{d{Ab}}}Ab}{{{d{Ad}}}Ad}{{d{d{fc}}}b{}}0000{db}0000``{c{{Af{{h{e}}}}}Ah{Ajl}}{c{{Af{n}}}Ah}{c{{Af{{A`{e}}}}}Ah{Ajl}}{c{{Af{Ab}}}Ah}{c{{Af{Ad}}}Ah}{{{d{{h{c}}}}{d{{h{c}}}}}Al{Anl}}{{{d{n}}{d{n}}}Al}{{{d{{A`{c}}}}{d{{A`{c}}}}}Al{Anl}}{{{d{Ab}}{d{Ab}}}Al}{{{d{Ad}}{d{Ad}}}Al}{{d{d{c}}}Al{}}000000000{{{d{{h{c}}}}{d{fB`}}}Bb{ll}}{{{d{n}}{d{fB`}}}Bb}{{{d{{A`{c}}}}{d{fB`}}}Bb{ll}}{{{d{Ab}}{d{fB`}}}Bb}{{{d{Ad}}{d{fB`}}}Bb}{cc{}}0000{{{d{{h{c}}}}{d{fe}}}b{Bdl}Bf}{{{d{n}}{d{fc}}}bBf}{{{d{{A`{c}}}}{d{fe}}}b{Bdl}Bf}{{{d{Ad}}{d{fc}}}bBf}{{}c{}}0000```{{{d{{h{c}}}}e}Af{Bhl}Bj}{{{d{n}}c}AfBj}{{{d{{A`{c}}}}e}Af{Bhl}Bj}{{{d{Ab}}c}AfBj}{{{d{Ad}}c}AfBj}`{dc{}}0000{c{{Af{e}}}{}{}}0000{{}{{Af{c}}}{}}0000{dBl}0000`99999","D":"Ad","p":[[1,"unit"],[1,"reference"],[0,"mut"],[5,"Timestamped",2],[10,"Clone",112],[10,"Debug",113],[6,"TopolotreeMessage",2],[5,"Payload",2],[5,"OperationPayload",2],[5,"QueryResponse",2],[6,"Result",114],[10,"Deserializer",115],[10,"Deserialize",115],[1,"bool"],[10,"PartialEq",116],[5,"Formatter",113],[8,"Result",113],[10,"Hash",117],[10,"Hasher",117],[10,"Serialize",118],[10,"Serializer",118],[5,"TypeId",119]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAGYAAwAAAD8ARQADAE4AIgA="}],["lattices",{"t":"KRRKQFKFQQKYKYKYKKYKKYFKYFKKKRRFFFRKFFFKOMNCNNNNNNNNNNNNNNNNMNNONNNNNNNNNNNNNNNNNNNNMMNENNNNNNNNNNNNNNNNNNNNNNNNNNNHHNNCMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOMNNNNNNNNNCCMNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNMNNNNNNNNNCNNNNNNNNNCCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCOEMHHHHHHHHHHHHHHHHHHHHHHHHFFFFKRFFFFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOKRKFFKTRRRRRRRNNNNNNNNNNCMNNNNNMNNNNNNNMNNNNNNNNNNNNNMNNMNNNMNNNNNMNNNNNNNMNNMNNCCNNMNNNMNNNNNMNNNMNNNCNNNNNNNNKKKRRRRRRMMMMMKRFFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFIIIIIINNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNIFIINNNNNNNNNNNNNNNNNNNNNNNNNNNNFFFPFPFGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFIIIIIINNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFIIIIIIINNNNNNNNNNNNNNNNNNNNNNNNNNHHHHHHHHHHHFIIIIIINNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["Addition","Atom","AtomIter","Atomize","ColtType","Conflict","DeepReveal","DomPair","GhtType","GhtTypeWithSchema","IsBot","","IsTop","","Lattice","","LatticeBimorphism","LatticeFrom","","LatticeMorphism","LatticeOrd","","Max","Merge","","Min","Multiplication","NaiveLatticeOrd","One","Output","","Pair","PairBimorphism","Point","Revealed","Semiring","VecUnion","WithBot","WithTop","Zero","a","add","add_owned","algebra","as_reveal_mut","","","","","","","","as_reveal_ref","","","","","","","","atomize","","","b","borrow","","","","","","","","","","borrow_mut","","","","","","","","","","call","","","cc_traits","clone","","","","","","","","","clone_into","","","","","","","","","clone_to_uninit","","","","","","","","","closure_to_bimorphism","closure_to_morphism","cmp","","collections","deep_reveal","","","","","","","","","","default","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","deserialize","","","","","","","","","eq","","","","","","","","","equivalent","","","","","","","","","","","","","","","","","","fmt","","","","","","","","","from","","","","","","","","","","","ght","into","","","","","","","","","","into_reveal","","","","","","","","is_bot","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","is_top","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","key","lattice_from","","","","","","","","","","map_union","map_union_with_tombstones","merge","","","","","","","","","","merge_owned","mul","mul_owned","naive_cmp","new","","","","","","","","","new_from","","","","","","","","one","partial_cmp","","","","","","","","","semiring_application","serialize","","","","","","","","","set_union","set_union_with_tombstones","test","to_owned","","","","","","","","","try_from","","","","","","","","","","try_into","","","","","","","","","","type_id","","","","","","","","","","union_find","val","variadics","zero","abelian_group","absorbing_element","associativity","bilinearity","commutative_monoid","commutative_ring","commutativity","distributive","field","get_single_function_properties","group","idempotency","identity","integral_domain","inverse","left_distributes","linearity","monoid","no_nonzero_zero_divisors","nonzero_inverse","right_distributes","ring","semigroup","semiring","ArrayMap","ArraySet","EmptyMap","EmptySet","MapMapValues","MapValue","OptionMap","OptionSet","SingletonMap","SingletonSet","VecMap","VecSet","borrow","","","","","","","","","","borrow_mut","","","","","","","","","","clone","","","","","","","","","","clone_into","","","","","","","","","","clone_to_uninit","","","","","","","","","","cmp","","","","","","","","","","default","","","","deserialize","","","","","","","","eq","","","","","","","","","","equivalent","","","","","","","","","","","","","","","","","","","","fmt","","","","","","","","from","","","","","","","","","","","","","","","","","","","get","","","","","","","","","","get_key_value","","","","","get_key_value_mut","","","","","get_mut","","","","","","","","","hash","","","","","","","","","","into","","","","","","","","","","into_iter","","","","","","","","","","into_ref","","","","","","","","","","","","","","","is_empty","","iter","","","","","","","","","","","","","","iter_mut","","","","","","","","keys","","len","","","","","","","","","","map_values","","","","","new","partial_cmp","","","","","","","","","","serialize","","","","","","","","to_owned","","","","","","","","","","try_from","","","","","","","","","","try_into","","","","","","","","","","type_id","","","","","","","","","","upcast_item_mut","","","","","","","","","upcast_item_ref","","","","","","","","","","upcast_key_ref","","","","","vals","","GeneralizedHashTrieNode","Get","GhtGet","GhtInner","GhtLeaf","GhtPrefixIter","HEIGHT","Head","Item","KeyType","Schema","Storage","SuffixSchema","ValType","borrow","","borrow_mut","","clone","","clone_into","","clone_to_uninit","","colt","contains","","","","default","","drain","","","","eq","","equivalent","","find_containing_leaf","","","","fmt","","force","","force_drain","","from","","from_iter","","get","","","get_mut","","","height","insert","","","","into","","into_iter","","","","is_bot","","is_top","","iter","","","iter_tuples","","","lattice","macros","merge","","merge_node","","","","new_from","","","","partial_cmp","","prefix_iter","","","","recursive_iter","","","","test","to_owned","","try_from","","try_into","","type_id","","ColtForestNode","ColtGet","ColtGetTail","Force","Get","Head","Schema","Storage","SuffixSchema","force","force_drain","get","iter","merge","DeepJoinLatticeBimorphism","","GhtBimorphism","GhtCartesianProductBimorphism","GhtNodeKeyedBimorphism","GhtValTypeProductBimorphism","borrow","","","","borrow_mut","","","","call","","","","default","","","","from","","","","into","","","","new","","try_from","","","","try_into","","","","type_id","","","","KeyedBimorphism","MapUnion","MapUnionArrayMap","MapUnionBTreeMap","MapUnionHashMap","MapUnionOptionMap","MapUnionSingletonMap","MapUnionVec","as_reveal_mut","as_reveal_ref","atomize","borrow","","borrow_mut","","call","clone","clone_into","clone_to_uninit","deep_reveal","default","deserialize","eq","equivalent","","fmt","from","","into","","into_reveal","is_bot","is_top","lattice_from","merge","new","","new_from","partial_cmp","serialize","to_owned","try_from","","try_into","","type_id","","MapUnionHashMapWithTombstoneHashSet","MapUnionWithTombstones","MapUnionWithTombstonesSingletonMapOnly","MapUnionWithTombstonesTombstoneSingletonSetOnly","as_reveal_mut","as_reveal_ref","borrow","borrow_mut","clone","clone_into","clone_to_uninit","default","deserialize","eq","equivalent","","fmt","from","into","into_reveal","is_bot","is_top","lattice_from","merge","new","new_from","partial_cmp","serialize","to_owned","try_from","try_into","type_id","BinaryTrust","ConfidenceScore","Cost","Finite","FuzzyLogic","Infinity","Multiplicity","U32WithInfinity","add","","","","","borrow","","","","","","borrow_mut","","","","","","clone","clone_into","clone_to_uninit","default","eq","","equivalent","","fmt","","from","","","","","","into","","","","","","mul","","","","","new","","","","","one","","","","","to_owned","try_from","","","","","","try_into","","","","","","type_id","","","","","","zero","","","","","CartesianProductBimorphism","SetUnion","SetUnionArray","SetUnionBTreeSet","SetUnionHashSet","SetUnionOptionSet","SetUnionSingletonSet","SetUnionVec","as_reveal_mut","as_reveal_ref","atomize","borrow","","borrow_mut","","call","clone","clone_into","clone_to_uninit","deep_reveal","default","","deserialize","eq","equivalent","","fmt","from","","into","","into_reveal","is_bot","is_top","lattice_from","merge","new","new_from","partial_cmp","serialize","to_owned","try_from","","try_into","","type_id","","SetUnionWithTombstones","SetUnionWithTombstonesArray","SetUnionWithTombstonesBTreeSet","SetUnionWithTombstonesHashSet","SetUnionWithTombstonesOptionSet","SetUnionWithTombstonesSingletonSet","SetUnionWithTombstonesTombstoneOnlySet","SetUnionWithTombstonesVec","as_reveal_mut","as_reveal_ref","borrow","borrow_mut","clone","clone_into","clone_to_uninit","default","eq","equivalent","","fmt","from","into","into_reveal","is_bot","is_top","lattice_from","merge","new","new_from","partial_cmp","to_owned","try_from","try_into","type_id","cartesian_power","check_all","check_atomize_each","check_lattice_bimorphism","check_lattice_default_is_bot","check_lattice_is_bot","check_lattice_is_top","check_lattice_morphism","check_lattice_ord","check_lattice_properties","check_partial_ord_properties","UnionFind","UnionFindArrayMap","UnionFindBTreeMap","UnionFindHashMap","UnionFindOptionMap","UnionFindSingletonMap","UnionFindVec","as_reveal_mut","as_reveal_ref","atomize","borrow","borrow_mut","clone","clone_into","clone_to_uninit","deep_reveal","default","deserialize","eq","equivalent","","fmt","from","into","into_reveal","is_bot","is_top","lattice_from","merge","new","new_from","partial_cmp","same","serialize","to_owned","try_from","try_into","type_id","union"],"q":[[0,"lattices"],[426,"lattices::algebra"],[450,"lattices::collections"],[791,"lattices::ght"],[902,"lattices::ght::colt"],[916,"lattices::ght::lattice"],[960,"lattices::map_union"],[1007,"lattices::map_union_with_tombstones"],[1039,"lattices::semiring_application"],[1125,"lattices::set_union"],[1172,"lattices::set_union_with_tombstones"],[1206,"lattices::test"],[1217,"lattices::union_find"],[1256,"lattices::conflict"],[1257,"core::option"],[1258,"lattices::dom_pair"],[1259,"lattices::ord"],[1260,"lattices::pair"],[1261,"lattices::vec_union"],[1262,"alloc::vec"],[1263,"lattices::with_bot"],[1264,"lattices::with_top"],[1265,"core::iter::traits::iterator"],[1266,"core::clone"],[1267,"lattices::point"],[1268,"core::ops::function"],[1269,"core::cmp"],[1270,"core::default"],[1271,"core::result"],[1272,"serde::de"],[1273,"core::fmt"],[1274,"core::convert"],[1275,"serde::ser"],[1276,"core::any"],[1277,"alloc::string"],[1278,"cc_traits"],[1279,"core::marker"],[1280,"core::borrow"],[1281,"core::hash"],[1282,"variadics::variadic_collections"],[1283,"variadics"],[1284,"core::iter::traits::collect"],[1285,"cc_traits::non_alias"],[1286,"core::iter::traits::exact_size"],[1287,"core::cell"],[1288,"lattices_macro"]],"i":"`Bd0``````````````````````````C`Cb```Db`````Afd0`jnAbAd5AhAlAn65438210<10865438CdCh4328765:10432=<1`8765:04328765:04328765:0432``65`;8765:043276666666666666655555555555555:104328765:04328765:043288776655::004433228765:043287665:10432`8765:104328765:432Bf98777777777777777666666666666666;1543Gb:9888888888888888777777777777777<26549Bl;:98=3765``Gd<;:9>48760Gh0Gj>=<;Af7;:9?><07;:9GljnAbAd5>>>>=====`{{{b{{Af{c}}}}}{{Af{c}}}{AhAj}}{{{b{Al}}}Al}{{{b{{An{c}}}}}{{An{c}}}{AhAj}}{{{b{B`}}}B`}{{{b{Bb}}}Bb}{{b{b{dc}}}h{}}0000{bh}0000``{c{{j{{Af{e}}}}}l{BdAj}}{c{{j{Al}}}l}{c{{j{{An{e}}}}}l{BdAj}}{c{{j{B`}}}l}{c{{j{Bb}}}l}{{{b{{Af{c}}}}{b{{Af{c}}}}}Bf{BhAj}}{{{b{Al}}{b{Al}}}Bf}{{{b{{An{c}}}}{b{{An{c}}}}}Bf{BhAj}}{{{b{B`}}{b{B`}}}Bf}{{{b{Bb}}{b{Bb}}}Bf}{{b{b{c}}}Bf{}}000000000{{{b{{Af{c}}}}{b{dn}}}A`{AjAj}}{{{b{Al}}{b{dn}}}A`}{{{b{{An{c}}}}{b{dn}}}A`{AjAj}}{{{b{B`}}{b{dn}}}A`}{{{b{Bb}}{b{dn}}}A`}{cc{}}0000{{{b{{Af{c}}}}{b{de}}}h{BjAj}Bl}{{{b{Al}}{b{dc}}}hBl}{{{b{{An{c}}}}{b{de}}}h{BjAj}Bl}{{{b{Bb}}{b{dc}}}hBl}{{}c{}}0000```{{{b{{Af{c}}}}e}j{BnAj}Ab}{{{b{Al}}c}jAb}{{{b{{An{c}}}}e}j{BnAj}Ab}{{{b{B`}}c}jAb}{{{b{Bb}}c}jAb}`{bc{}}0000{c{{j{e}}}{}{}}0000{{}{{j{c}}}{}}0000{bAd}0000`","D":"Ah","p":[[1,"reference"],[0,"mut"],[6,"GossipOrIncrement",0],[1,"unit"],[6,"Result",125],[10,"Deserializer",126],[5,"Formatter",127],[8,"Result",127],[10,"Serializer",128],[5,"TypeId",129],[5,"Timestamped",20],[10,"Clone",130],[10,"Debug",127],[6,"TopolotreeMessage",20],[5,"Payload",20],[5,"OperationPayload",20],[5,"QueryResponse",20],[10,"Deserialize",126],[1,"bool"],[10,"PartialEq",131],[10,"Hash",132],[10,"Hasher",132],[10,"Serialize",128]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAHEABAAAAAsADgBDAFcAAwBgAB0A"}],["pn_delta",{"t":"PGPINNNNNNNNNHCNNNNNFFPPPFFGNNNNNNNNNNONNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOONNNNNONNNNNNNNNNNNNNNNNNNNO","n":["Gossip","GossipOrIncrement","Increment","NextStateType","borrow","borrow_mut","clone","clone_into","clone_to_uninit","deserialize","fmt","from","into","main","protocol","serialize","to_owned","try_from","try_into","type_id","OperationPayload","Payload","","Ping","Pong","QueryResponse","Timestamped","TopolotreeMessage","borrow","","","","","borrow_mut","","","","","change","clone","","","","","clone_into","","","","","clone_to_uninit","","","","","contents","data","deserialize","","","","","eq","","","","","equivalent","","","","","","","","","","fmt","","","","","from","","","","","hash","","","","into","","","","","key","","","serialize","","","","","timestamp","to_owned","","","","","try_from","","","","","try_into","","","","","type_id","","","","","value"],"q":[[0,"pn_delta"],[20,"pn_delta::protocol"],[125,"core::result"],[126,"serde::de"],[127,"core::fmt"],[128,"serde::ser"],[129,"core::any"],[130,"core::clone"],[131,"core::cmp"],[132,"core::hash"]],"i":"f`0`000000000``00000``Al00```Af1AnB`Bb34210134210342103421023342103421033442211003421034210342034210210342103342103421034210342100","f":"````{b{{b{c}}}{}}{{{b{d}}}{{b{dc}}}{}}{{{b{f}}}f}{{b{b{dc}}}h{}}{bh}{c{{j{f}}}l}{{{b{f}}{b{dn}}}A`}{cc{}}{{}c{}}{{}h}`{{{b{f}}c}jAb}{bc{}}{c{{j{e}}}{}{}}{{}{{j{c}}}{}}{bAd}````````>>>>>=====`{{{b{{Af{c}}}}}{{Af{c}}}{AhAj}}{{{b{Al}}}Al}{{{b{{An{c}}}}}{{An{c}}}{AhAj}}{{{b{B`}}}B`}{{{b{Bb}}}Bb}{{b{b{dc}}}h{}}0000{bh}0000``{c{{j{{Af{e}}}}}l{BdAj}}{c{{j{Al}}}l}{c{{j{{An{e}}}}}l{BdAj}}{c{{j{B`}}}l}{c{{j{Bb}}}l}{{{b{{Af{c}}}}{b{{Af{c}}}}}Bf{BhAj}}{{{b{Al}}{b{Al}}}Bf}{{{b{{An{c}}}}{b{{An{c}}}}}Bf{BhAj}}{{{b{B`}}{b{B`}}}Bf}{{{b{Bb}}{b{Bb}}}Bf}{{b{b{c}}}Bf{}}000000000{{{b{{Af{c}}}}{b{dn}}}A`{AjAj}}{{{b{Al}}{b{dn}}}A`}{{{b{{An{c}}}}{b{dn}}}A`{AjAj}}{{{b{B`}}{b{dn}}}A`}{{{b{Bb}}{b{dn}}}A`}{cc{}}0000{{{b{{Af{c}}}}{b{de}}}h{BjAj}Bl}{{{b{Al}}{b{dc}}}hBl}{{{b{{An{c}}}}{b{de}}}h{BjAj}Bl}{{{b{Bb}}{b{dc}}}hBl}{{}c{}}0000```{{{b{{Af{c}}}}e}j{BnAj}Ab}{{{b{Al}}c}jAb}{{{b{{An{c}}}}e}j{BnAj}Ab}{{{b{B`}}c}jAb}{{{b{Bb}}c}jAb}`{bc{}}0000{c{{j{e}}}{}{}}0000{{}{{j{c}}}{}}0000{bAd}0000`","D":"Ah","p":[[1,"reference"],[0,"mut"],[6,"GossipOrIncrement",0],[1,"unit"],[6,"Result",125],[10,"Deserializer",126],[5,"Formatter",127],[8,"Result",127],[10,"Serializer",128],[5,"TypeId",129],[5,"Timestamped",20],[10,"Clone",130],[10,"Debug",127],[6,"TopolotreeMessage",20],[5,"Payload",20],[5,"OperationPayload",20],[5,"QueryResponse",20],[10,"Deserialize",126],[1,"bool"],[10,"PartialEq",131],[10,"Hash",132],[10,"Hasher",132],[10,"Serialize",128]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAHEABAAAAAsADgBDAFcAAwBgAB0A"}],["pusherator",{"t":"FRRKRKKNNNCNCNCCCNNMCNNCNNCCCNMNCNCNNNNCNFNNNNNNNNNFFNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNFNNNNNNNNNFFNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNFNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNN","n":["InputBuild","Item","ItemOut","IteratorToPusherator","Output","Pusherator","PusheratorBuild","borrow","borrow_mut","default","demux","","filter","","filter_map","flatten","for_each","","from","give","inspect","","into","map","","new","null","partition","pivot","pull_to_push","push_to","","switch","","tee","","try_from","try_into","type_id","unzip","","Demux","borrow","borrow_mut","from","give","into","new","try_from","try_into","type_id","Filter","FilterBuild","borrow","","borrow_mut","","from","","give","into","","new","","push_to","try_from","","try_into","","type_id","","FilterMap","FilterMapBuild","borrow","","borrow_mut","","from","","give","into","","new","","push_to","try_from","","try_into","","type_id","","Flatten","FlattenBuild","borrow","","borrow_mut","","from","","give","into","","new","","push_to","try_from","","try_into","","type_id","","ForEach","borrow","borrow_mut","from","give","into","new","try_from","try_into","type_id","Inspect","InspectBuild","borrow","","borrow_mut","","from","","give","into","","new","","push_to","try_from","","try_into","","type_id","","Map","MapBuild","borrow","","borrow_mut","","from","","give","into","","new","","push_to","try_from","","try_into","","type_id","","Null","borrow","borrow_mut","clone","clone_into","clone_to_uninit","default","from","give","into","new","to_owned","try_from","try_into","type_id","Partition","PartitionBuild","borrow","","borrow_mut","","from","","give","into","","new","","push_to","try_from","","try_into","","type_id","","Pivot","PivotBuild","borrow","","borrow_mut","","from","","into","","new","","push_to","run","step","try_from","","try_into","","type_id","","Switch","SwitchBuild","borrow","","borrow_mut","","from","","give","into","","new","","push_to","try_from","","try_into","","type_id","","Tee","TeeBuild","borrow","","borrow_mut","","from","","give","into","","new","","push_to","try_from","","try_into","","type_id","","Unzip","UnzipBuild","borrow","","borrow_mut","","from","","give","into","","new","","push_to","try_from","","try_into","","type_id",""],"q":[[0,"pusherator"],[41,"pusherator::demux"],[51,"pusherator::filter"],[71,"pusherator::filter_map"],[91,"pusherator::flatten"],[111,"pusherator::for_each"],[121,"pusherator::inspect"],[141,"pusherator::map"],[161,"pusherator::null"],[176,"pusherator::partition"],[196,"pusherator::pivot"],[217,"pusherator::switch"],[237,"pusherator::tee"],[257,"pusherator::unzip"],[277,"core::ops::function"],[278,"core::result"],[279,"core::any"],[280,"core::option"],[281,"core::iter::traits::collect"],[282,"core::clone"],[283,"core::iter::traits::iterator"],[284,"either"]],"i":"`Afl`0``f00`1`1```102`10`10```An21`2`2111`2`Bl00000000``BnA`1010110100101010``C`Cd1010110100101010``CfCj1010110100101010`Cl00000000``CnAj1010110100101010``D`Al1010110100101010`Db0000000000000``DfDh1010110100101010``DjB`10101010011101010``DnBb1010110100101010``EbBd1010110100101010``EdBj1010110100101010","f":"```````{b{{b{c}}}{}}{{{b{d}}}{{b{dc}}}{}}{{}{{f{c}}}{}}`{{{l{}{{h{c}}{j{e}}}}ig}e{}{}{}{{n{c{b{dg}}}}}}`{{{l{}{{h{c}}{j{e}}}}g}{{A`{{l{}{{h{c}}{j{e}}}}g}}}{}{}{{n{{b{c}}}{{j{Ab}}}}}}```{{{l{}{{h{c}}{j{e}}}}g}e{}{}{{n{c}}}}{cc{}}{{{b{d{Af{}{{Ad{c}}}}}}c}Ah{}}`{{{l{}{{h{c}}{j{e}}}}g}{{Aj{{l{}{{h{c}}{j{e}}}}g}}}{}{}{{n{{b{c}}}}}}{{}c{}}`{{{l{}{{h{c}}{j{e}}}}i}{{Al{{l{}{{h{c}}{j{e}}}}i}}}{}{}{}{{n{c}{{j{g}}}}}}8```{An{{B`{An}}}}{{{l{}{{h{c}}{j{e}}}}g}e{}{}{{Af{}{{Ad{c}}}}}}{{{f{c}}g}i{}{}{{Af{}{{Ad{e}}}}}{}}`{{{l{}{{h{c}}{j{e}}}}g}{{Bb{{l{}{{h{c}}{j{e}}}}g}}}{}{}Af}`{{{l{}{{h{c}}{j{e}}}}g}{{Bd{{l{}{{h{c}}{j{e}}}}g}}}{}{}{{Af{}{{Ad{c}}}}}}{c{{Bf{e}}}{}{}}{{}{{Bf{c}}}{}}{bBh}`{{{l{}{{h{c}}{j{e}}}}g}{{Bj{{l{}{{h{c}}{j{e}}}}g}}}{}{}Af}`{b{{b{c}}}{}}{{{b{d}}}{{b{dc}}}{}}?{{{b{d{Bl{gec}}}}i}Ah{}{}{{n{c{b{de}}}}}{}}={{ge}{{Bl{gec}}}{}{}{{n{c{b{de}}}}}}765``3322{cc{}}0{{{b{d{Bn{ce}}}}g}AhAf{{n{b}{{j{Ab}}}}}{}}{{}c{}}0{{ce}{{Bn{ec}}}{{n{b}{{j{Ab}}}}}Af}{{ce}{{A`{ce}}}l{{n{b}{{j{Ab}}}}}}{{{A`{ce}}i}kl{{n{b}{{j{Ab}}}}}{}{{Af{}{{Ad{g}}}}}{}}==<<;;``998855{{{b{d{C`{cge}}}}i}AhAf{}{{n{e}{{j{Cb}}}}}{}}44{{eg}{{C`{gec}}}{}{{n{c}{{j{Cb}}}}}Af}{{cg}{{Cd{cg}}}l{}{{n{}{{j{{Cb{e}}}}}}}}{{{Cd{cg}}k}ml{}{{n{}{{j{{Cb{e}}}}}}}{}{{Af{}{{Ad{i}}}}}{}}{c{{Bf{e}}}{}{}}0{{}{{Bf{c}}}{}}0{bBh}0``{b{{b{c}}}{}}0{{{b{d}}}{{b{dc}}}{}}0>>{{{b{d{Cf{ce}}}}g}Ah{{Af{}{{Ad{}}}}}Ch{}}=={c{{Cf{ce}}}{{Af{}{{Ad{}}}}}Ch}{c{{Cj{c}}}l}{{{Cj{c}}g}il{}{{Af{}{{Ad{e}}}}}{}}887766`54{cc{}}{{{b{d{Cl{ec}}}}g}Ah{}{{n{c}}}{}}{{}c{}}{e{{Cl{ec}}}{}{{n{c}}}}<;:``998833{{{b{d{Cn{ce}}}}g}AhAf{{n{b}}}{}}22{{ce}{{Cn{ec}}}{{n{b}}}Af}{{ce}{{Aj{ce}}}l{{n{b}}}}{{{Aj{ce}}i}kl{{n{b}}}{}{{Af{}{{Ad{g}}}}}{}}{c{{Bf{e}}}{}{}}0{{}{{Bf{c}}}{}}0{bBh}0``{b{{b{c}}}{}}0{{{b{d}}}{{b{dc}}}{}}0<<{{{b{d{D`{cge}}}}i}AhAf{}{{n{e}{{j{}}}}}{}};;{{eg}{{D`{gec}}}{}{{n{c}{{j{}}}}}Af}{{cg}{{Al{cg}}}l{}{{n{}{{j{e}}}}}}{{{Al{cg}}k}ml{}{{n{}{{j{e}}}}}{}{{Af{}{{Ad{i}}}}}{}}887766`54{{{b{{Db{c}}}}}{{Db{c}}}Dd}{{b{b{dc}}}Ah{}}{bAh}{{}{{Db{c}}}{}}{cc{}}{{{b{d{Db{c}}}}e}Ah{}{}}{{}c{}}3{bc{}}{c{{Bf{e}}}{}{}}{{}{{Bf{c}}}{}}{bBh}``{b{{b{c}}}{}}0{{{b{d}}}{{b{dc}}}{}}088{{{b{d{Df{ceg}}}}i}AhAf{{Af{}{{Ad{}}}}}{{n{b}{{j{Ab}}}}}{}}77{{ceg}{{Df{egc}}}{{n{b}{{j{Ab}}}}}Af{{Af{}{{Ad{}}}}}}{{ceg}{{Dh{ceg}}}l{{Af{}{{Ad{}}}}}{{n{b}{{j{Ab}}}}}}{{{Dh{ceg}}k}ml{{Af{}{{Ad{}}}}}{{n{b}{{j{Ab}}}}}{}{{Af{}{{Ad{i}}}}}{}}887766``5544<<::{{ce}{{Dj{ce}}}Dl{{Af{}{{Ad{}}}}}}{c{{B`{c}}}Dl}{{{B`{c}}g}iDl{}{{Af{}{{Ad{e}}}}}{}}{{{Dj{ce}}}AhDl{{Af{}{{Ad{}}}}}}{{{b{d{Dj{ce}}}}}AbDl{{Af{}{{Ad{}}}}}}==<<;;``::99{cc{}}0{{{b{d{Dn{ce}}}}g}AhAfAf{}}{{}c{}}0{{ce}{{Dn{ce}}}AfAf}{{eg}{{Bb{eg}}}{}{{l{}{{h{{E`{c}}}}}}}Af}{{{Bb{eg}}k}m{}{{l{}{{h{{E`{c}}}}}}}Af{}{{Af{}{{Ad{i}}}}}{}}{c{{Bf{e}}}{}{}}0{{}{{Bf{c}}}{}}0{bBh}0``{b{{b{c}}}{}}0{{{b{d}}}{{b{dc}}}{}}0::{{{b{d{Eb{ce}}}}g}AhAf{{Af{}{{Ad{}}}}}{}}99{{ce}{{Eb{ce}}}Af{{Af{}{{Ad{}}}}}}{{ce}{{Bd{ce}}}l{{Af{}{{Ad{}}}}}}{{{Bd{ce}}i}kl{{Af{}{{Ad{}}}}}{}{{Af{}{{Ad{g}}}}}{}}887766``5544>>{{{b{d{Ed{ce}}}}g}AhAfAf{}}=={{ce}{{Ed{ce}}}AfAf}{{eg}{{Bj{eg}}}{}{{l{}{{h{{Ef{c}}}}}}}Af}{{{Bj{eg}}k}m{}{{l{}{{h{{Ef{c}}}}}}}Af{}{{Af{}{{Ad{i}}}}}{}}<<;;::","D":"Fb","p":[[1,"reference"],[0,"mut"],[5,"InputBuild",0],[17,"ItemOut"],[17,"Output"],[10,"PusheratorBuild",0],[10,"FnMut",277],[5,"FilterBuild",51],[1,"bool"],[17,"Item"],[10,"Pusherator",0],[1,"unit"],[5,"InspectBuild",121],[5,"MapBuild",141],[10,"IteratorToPusherator",0],[5,"PivotBuild",196],[5,"SwitchBuild",217],[5,"TeeBuild",237],[6,"Result",278],[5,"TypeId",279],[5,"UnzipBuild",257],[5,"Demux",41],[5,"Filter",51],[5,"FilterMap",71],[6,"Option",280],[5,"FilterMapBuild",71],[5,"Flatten",91],[10,"IntoIterator",281],[5,"FlattenBuild",91],[5,"ForEach",111],[5,"Inspect",121],[5,"Map",141],[5,"Null",161],[10,"Clone",282],[5,"Partition",176],[5,"PartitionBuild",176],[5,"Pivot",196],[10,"Iterator",283],[5,"Switch",217],[6,"Either",284],[5,"Tee",237],[5,"Unzip",257],[1,"tuple"]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAOQAHAABABEAFAACABgAFAAuAAAAMAAJADwAAAA/AA4AUAAAAFMADgBkAAAAZwALAHQAAAB2AAkAggAAAIUADgCWAAAAmQAPAKoAAACsAAoAuQAAALwADgDPABAA4gAAAOUADgD2AAAA+QAOAAoBAAANAQgA"}],["relalg",{"t":"PPGPPPPGPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["Bool","ColRef","Datum","Eq","Int","Literal","Plus","ScalarExpr","String","borrow","","borrow_mut","","clone","","clone_into","","clone_to_uninit","","eq","","equivalent","","","","eval","fmt","","from","","hash","","into","","is_true","span","to_owned","","to_tokens","try_from","","try_into","","type_id",""],"q":[[0,"relalg"],[45,"core::fmt"],[46,"core::hash"],[47,"proc_macro2"],[48,"core::result"],[49,"core::any"]],"i":"fh`0100`1101010101010110001010101010100101010","f":"`````````{b{{b{c}}}{}}0{{{b{d}}}{{b{dc}}}{}}0{{{b{f}}}f}{{{b{h}}}h}{{b{b{dc}}}j{}}0{bj}0{{{b{f}}{b{f}}}l}{{{b{h}}{b{h}}}l}{{b{b{c}}}l{}}000{{{b{h}}{b{{n{f}}}}}f}{{{b{f}}{b{dA`}}}Ab}{{{b{h}}{b{dA`}}}Ab}{cc{}}0{{{b{f}}{b{dc}}}jAd}{{{b{h}}{b{dc}}}jAd}{{}c{}}0{{{b{f}}}l}{bAf}{bc{}}0{{{b{h}}{b{dAh}}}j}{c{{Aj{e}}}{}{}}0{{}{{Aj{c}}}{}}0{bAl}0","D":"h","p":[[1,"reference"],[0,"mut"],[6,"Datum",0],[6,"ScalarExpr",0],[1,"unit"],[1,"bool"],[1,"slice"],[5,"Formatter",45],[8,"Result",45],[10,"Hasher",46],[5,"Span",47],[5,"TokenStream",47],[6,"Result",48],[5,"TypeId",49]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAACkAAwAAABwAHwABACMACgA="}],["stageleft",{"t":"FKKQKKKFNNNNNNNNMNXNNCNNNQHQXCNNNNNNNNNNNNQQNNXNNNNNNIFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNEEQNNNNNENNNNNNNNNNNKKFRKNNNNNHHHHHNHNMHNMNNNNHNNN","n":["BorrowBounds","IntoQuotedMut","IntoQuotedOnce","PATH_SEPARATOR","Quoted","QuotedContext","QuotedWithContext","RuntimeData","borrow","","borrow_mut","","boxed","clone","clone_into","clone_to_uninit","create","","entry","from","","internal","into","","new","q","quote_type","quse_fn","runtime","runtime_support","splice_fn0","splice_fn0_ctx","splice_fn1","splice_fn1_borrow","splice_fn1_borrow_ctx","splice_fn1_ctx","splice_fn2_borrow_mut","splice_fn2_borrow_mut_ctx","splice_typed","splice_typed_ctx","splice_untyped","splice_untyped_ctx","stageleft_crate","stageleft_no_entry_crate","to_owned","to_tokens","top_level_mod","try_from","","try_into","","type_id","","CaptureVec","Span","TokenStream","append","append_all","append_separated","append_terminated","borrow","","borrow_mut","","byte_range","call_site","clone","","clone_into","","clone_to_uninit","","default","end","extend","","fmt","","","from","","","","","from_iter","","from_str","into","","into_iter","into_token_stream","is_empty","join","located_at","mixed_site","new","parse","proc_macro2","proc_macro_crate","quote","resolved_at","source_text","span","","start","syn","to_owned","","to_string","to_tokens","try_from","","try_into","","type_id","","unwrap","FreeVariable","FreeVariableWithContext","Import","O","ParseFromLiteral","borrow","borrow_mut","clone","clone_into","clone_to_uninit","create_import","fn0_type_hint","fn1_borrow_type_hint","fn1_type_hint","fn2_borrow_mut_type_hint","from","get_final_crate_name","into","parse_from_literal","set_macro_to_crate","to_owned","to_tokens","","","try_from","try_into","type_hint","type_id","uninitialized",""],"q":[[0,"stageleft"],[53,"stageleft::internal"],[117,"stageleft::runtime_support"],[147,"alloc::boxed"],[148,"core::marker"],[149,"syn::ty"],[150,"syn::expr"],[151,"proc_macro2"],[152,"core::option"],[153,"core::result"],[154,"core::any"],[155,"core::convert"],[156,"core::iter::traits::collect"],[157,"quote::to_tokens"],[158,"core::ops::range"],[159,"proc_macro2::location"],[160,"core::fmt"],[161,"proc_macro"],[162,"proc_macro2::token_stream"],[163,"syn::parse"],[164,"syn::error"],[165,"alloc::string"],[166,"core::ops::function"],[167,"stageleft_macro"],[168,"stageleft::type_name"],[169,"quote"]],"i":"````````Abj10f111A`3`32`322`````Ah00000000000``33`434343```Al0000Bn10001010101011110111001111011100011```00100`10111010100```Ef`Dl0000`````0`0Eb`12Eh222`230","f":"````````{b{{b{c}}}{}}0{{{b{d}}}{{b{dc}}}{}}0{f{{h{f}}}}{{{b{{j{c}}}}}{{j{c}}}l}{{b{b{dc}}}n{}}{bn}{{}A`}{{}Ab}`{cc{}}0`{{}c{}}0{{{b{Ad}}}{{j{c}}}{}}`{{}Af}```{AhAj}{{Ah{b{c}}}Aj{}}1100101010``{bc{}}{{{j{c}}{b{e}}}{{B`{{An{Al}}{An{Al}}}}}{}{}}`{c{{Bb{e}}}{}{}}0{{}{{Bb{c}}}{}}0{bBd}0```{{{b{dAl}}c}n{{Bh{Bf}}}}{{{b{dAl}}c}nBj}{{{b{dAl}}ce}nBjBl}0{b{{b{c}}}{}}0{{{b{d}}}{{b{dc}}}{}}0{{{b{Bn}}}{{Cb{C`}}}}{{}Bn}{{{b{Al}}}Al}{{{b{Bn}}}Bn}{{b{b{dc}}}n{}}0{bn}0{{}Al}{{{b{Bn}}}Cd}{{{b{dAl}}c}n{{Bj{}{{Cf{Al}}}}}}{{{b{dAl}}c}n{{Bj{}{{Cf{Bf}}}}}}{{{b{Al}}{b{dCh}}}{{Bb{nCj}}}}0{{{b{Bn}}{b{dCh}}}{{Bb{nCj}}}}{BfAl}{ClAl}{cc{}}0{CnBn}{cAl{{Bj{}{{Cf{Al}}}}}}{cAl{{Bj{}{{Cf{Bf}}}}}}{{{b{Ad}}}{{Bb{AlD`}}}}{{}c{}}0{AlDb}{AlAl}{{{b{Al}}}Dd}{{{b{Bn}}Bn}{{An{Bn}}}}{{{b{Bn}}Bn}Bn}{{}Bn}{{}Al}{{{b{Df}}}{{Bb{AlDh}}}}```3{{{b{Bn}}}{{An{Dj}}}}{bBn}0{{{b{Bn}}}Cd}`{bc{}}0{bDj}{{{b{Al}}{b{dAl}}}n}{c{{Bb{e}}}{}{}}0{{}{{Bb{c}}}{}}0{bBd}0{BnCn}`````{b{{b{c}}}{}}{{{b{d}}}{{b{dc}}}{}}{{{b{{Dl{c}}}}}{{Dl{c}}}{}}{{b{b{dc}}}n{}}{bn}{{{b{Ad}}{b{Ad}}{b{Ad}}{b{Ad}}c}{{Dl{c}}}{}}{e{{`{{E`{}{{Dn{c}}}}}}}{}{{E`{}{{Dn{c}}}}}}{g{{`{{E`{{b{c}}}{{Dn{e}}}}}}}{}{}{{E`{{b{c}}}{{Dn{e}}}}}}{g{{`{{E`{c}{{Dn{e}}}}}}}{}{}{{E`{c}{{Dn{e}}}}}}{i{{`{{E`{{b{dc}}e}{{Dn{g}}}}}}}{}{}{}{{E`{{b{dc}}e}{{Dn{g}}}}}}{cc{}}{{{b{Ad}}}Al}{{}c{}}{{{b{Aj}}}Eb}{{{b{Ad}}{b{Ad}}}n}{bc{}}{{{Ef{}{{Ed{c}}}}{b{e}}}{{B`{{An{Al}}{An{Al}}}}}{}{}}{Eh{{B`{{An{Al}}{An{Al}}}}}}{{{Dl{c}}{b{e}}}{{B`{{An{Al}}{An{Al}}}}}{}{}}{c{{Bb{e}}}{}{}}{{}{{Bb{c}}}{}}:{bBd}{{{b{{Ef{}{{Ed{c}}}}}}{b{e}}}c{}{}}{{{b{Eh}}}c{}}","D":"Cn","p":[[1,"reference"],[0,"mut"],[10,"IntoQuotedOnce",0],[5,"Box",147],[5,"RuntimeData",0],[10,"Copy",148],[1,"unit"],[10,"QuotedContext",0],[5,"BorrowBounds",0],[1,"str"],[6,"Type",149],[10,"QuotedWithContext",0],[6,"Expr",150],[5,"TokenStream",53,151],[6,"Option",152],[1,"tuple"],[6,"Result",153],[5,"TypeId",154],[6,"TokenTree",151],[10,"Into",155],[10,"IntoIterator",156],[10,"ToTokens",157],[5,"Span",53,151],[1,"usize"],[5,"Range",158],[5,"LineColumn",159],[17,"Item"],[5,"Formatter",160],[5,"Error",160],[5,"TokenStream",161],[5,"Span",161],[5,"LexError",151],[5,"IntoIter",162],[1,"bool"],[5,"ParseBuffer",163],[5,"Error",164],[5,"String",165],[5,"Import",117],[17,"Output"],[10,"Fn",166],[10,"ParseFromLiteral",117],[17,"O"],[10,"FreeVariableWithContext",117],[10,"FreeVariable",117]],"r":[[18,167],[25,167],[26,168],[27,167],[28,167],[46,167],[54,151],[55,151],[99,169]],"b":[[74,"impl-Extend%3CTokenStream%3E-for-TokenStream"],[75,"impl-Extend%3CTokenTree%3E-for-TokenStream"],[76,"impl-Display-for-TokenStream"],[77,"impl-Debug-for-TokenStream"],[79,"impl-From%3CTokenTree%3E-for-TokenStream"],[80,"impl-From%3CTokenStream%3E-for-TokenStream"],[84,"impl-FromIterator%3CTokenStream%3E-for-TokenStream"],[85,"impl-FromIterator%3CTokenTree%3E-for-TokenStream"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAHQAEgAAAAcACQAJABYAAAAZAAAAHAAAAB4AEAAwAAYAOQAHAEMABgBLAAYAVAADAFoAAQBhAAIAZwABAGoACgB2AA4AhgAAAIgACwA="}],["stageleft_macro",{"t":"XQQXX","n":["entry","q","quse_fn","runtime","top_level_mod"],"q":[[0,"stageleft_macro"]],"i":"`````","f":"`````","D":"h","p":[],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OjAAAAEAAAAAAAEAEAAAAAAAAwA="}],["stageleft_test",{"t":"","n":[],"q":[],"i":"","f":"","D":"`","p":[],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OjAAAAEAAAAAAAAAEAAAAAAA"}],["stageleft_test_macro",{"t":"QQQQQ","n":["macro_1D9EA688BDAD0220DDA345911DFF2BB6E8E5BC4E77EB90CFF313F1173FBAAC76","macro_38E565FEA38AC41C54ADE66EC4DE63627AE67920289C47F17E15FA5CAA51AA09","macro_6FDA8B564870A142D5552754F23D11EF7BE0CAEA91248C97E1841A1AD9B21FDC","macro_7FF6C2F30B0514D172E87E4B147CF7B9E2B5E5229D8E85C40921FBDF8FC88ED4","macro_F4D078123B8339975043C45164DA8B763897C4A8742B7DFFC5D753F1FE929448"],"q":[[0,"stageleft_test_macro"]],"i":"`````","f":"`````","D":"`","p":[],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAAUAAQAAAAUA"}],["stageleft_tool",{"t":"QHHH","n":["gen_final","gen_final_helper","gen_macro","gen_staged_trybuild"],"q":[[0,"stageleft_tool"],[4,"std::path"],[5,"alloc::string"],[6,"syn::file"]],"i":"````","f":"`{{}b}{{{f{d}}{f{h}}}b}{{{f{d}}jl}n}","D":"`","p":[[1,"unit"],[5,"Path",4],[1,"reference"],[1,"str"],[5,"String",5],[1,"bool"],[5,"File",6]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OjAAAAEAAAAAAAQAEAAAAAAAAQACAAMABAA="}],["topolotree",{"t":"IFINNNNNNNNNNNNNHCHNNNNNFFPPPFFGNNNNNNNNNNONNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOONNNNNONNNNNNNNNNNNNNNNNNNNO","n":["ContributionAgg","NodeId","PostNeighborJoin","borrow","borrow_mut","clone","clone_into","clone_to_uninit","eq","equivalent","","fmt","","from","hash","into","main","protocol","run_topolotree","to_owned","to_string","try_from","try_into","type_id","OperationPayload","Payload","","Ping","Pong","QueryResponse","Timestamped","TopolotreeMessage","borrow","","","","","borrow_mut","","","","","change","clone","","","","","clone_into","","","","","clone_to_uninit","","","","","contents","data","deserialize","","","","","eq","","","","","equivalent","","","","","","","","","","fmt","","","","","from","","","","","hash","","","","into","","","","","key","","","serialize","","","","","timestamp","to_owned","","","","","try_from","","","","","try_into","","","","","type_id","","","","","value"],"q":[[0,"topolotree"],[24,"topolotree::protocol"],[129,"core::fmt"],[130,"core::hash"],[131,"alloc::vec"],[132,"bytes::bytes"],[133,"tokio::sync::mpsc::unbounded"],[134,"hydroflow::scheduled::graph"],[135,"bytes::bytes_mut"],[136,"std::io::error"],[137,"core::result"],[138,"futures_core::stream"],[139,"core::marker"],[140,"alloc::string"],[141,"core::any"],[142,"core::clone"],[143,"serde::de"],[144,"core::cmp"],[145,"serde::ser"]],"i":"```f000000000000```00000``Cd00```Bn1CfChCj34210134210342103421023342103421033442211003421034210342034210210342103342103421034210342100","f":"```{b{{b{c}}}{}}{{{b{d}}}{{b{dc}}}{}}{{{b{f}}}f}{{b{b{dc}}}h{}}{bh}{{{b{f}}{b{f}}}j}{{b{b{c}}}j{}}0{{{b{f}}{b{dl}}}n}0{cc{}}{{{b{f}}{b{dc}}}hA`}{{}c{}}{{}h}`{{{Ad{Ab}}ce{Aj{{Ah{AbAf}}}}{Aj{Af}}}Al{{Bf{}{{An{{Bd{{Ah{AbB`}}Bb}}}}}}Bh}{{Bf{}{{An{{Bd{B`Bb}}}}}}Bh}}{bc{}}{bBj}{c{{Bd{e}}}{}{}}{{}{{Bd{c}}}{}}{bBl}````````{b{{b{c}}}{}}0000{{{b{d}}}{{b{dc}}}{}}0000`{{{b{{Bn{c}}}}}{{Bn{c}}}{C`Cb}}{{{b{Cd}}}Cd}{{{b{{Cf{c}}}}}{{Cf{c}}}{C`Cb}}{{{b{Ch}}}Ch}{{{b{Cj}}}Cj}{{b{b{dc}}}h{}}0000{bh}0000``{c{{Bd{{Bn{e}}}}}Cl{CnCb}}{c{{Bd{Cd}}}Cl}{c{{Bd{{Cf{e}}}}}Cl{CnCb}}{c{{Bd{Ch}}}Cl}{c{{Bd{Cj}}}Cl}{{{b{{Bn{c}}}}{b{{Bn{c}}}}}j{D`Cb}}{{{b{Cd}}{b{Cd}}}j}{{{b{{Cf{c}}}}{b{{Cf{c}}}}}j{D`Cb}}{{{b{Ch}}{b{Ch}}}j}{{{b{Cj}}{b{Cj}}}j}{{b{b{c}}}j{}}000000000{{{b{{Bn{c}}}}{b{dl}}}n{CbCb}}{{{b{Cd}}{b{dl}}}n}{{{b{{Cf{c}}}}{b{dl}}}n{CbCb}}{{{b{Ch}}{b{dl}}}n}{{{b{Cj}}{b{dl}}}n}{cc{}}0000{{{b{{Bn{c}}}}{b{de}}}h{DbCb}A`}{{{b{Cd}}{b{dc}}}hA`}{{{b{{Cf{c}}}}{b{de}}}h{DbCb}A`}{{{b{Cj}}{b{dc}}}hA`}{{}c{}}0000```{{{b{{Bn{c}}}}e}Bd{DdCb}Df}{{{b{Cd}}c}BdDf}{{{b{{Cf{c}}}}e}Bd{DdCb}Df}{{{b{Ch}}c}BdDf}{{{b{Cj}}c}BdDf}`{bc{}}0000{c{{Bd{e}}}{}{}}0000{{}{{Bd{c}}}{}}0000{bBl}0000`","D":"Ah","p":[[1,"reference"],[0,"mut"],[5,"NodeId",0],[1,"unit"],[1,"bool"],[5,"Formatter",129],[8,"Result",129],[10,"Hasher",130],[1,"u32"],[5,"Vec",131],[5,"Bytes",132],[1,"tuple"],[5,"UnboundedSender",133],[5,"Hydroflow",134],[17,"Item"],[5,"BytesMut",135],[5,"Error",136],[6,"Result",137],[10,"Stream",138],[10,"Unpin",139],[5,"String",140],[5,"TypeId",141],[5,"Timestamped",24],[10,"Clone",142],[10,"Debug",129],[6,"TopolotreeMessage",24],[5,"Payload",24],[5,"OperationPayload",24],[5,"QueryResponse",24],[10,"Deserializer",143],[10,"Deserialize",143],[10,"PartialEq",144],[10,"Hash",130],[10,"Serialize",145],[10,"Serializer",145]],"r":[],"b":[[11,"impl-Display-for-NodeId"],[12,"impl-Debug-for-NodeId"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAHUABQAAAA0ADwAAABEARABbAAMAZAAdAA=="}],["variadics",{"t":"RRKKRKRKRRRRRRTRKKRRKRKKRRRKKKMMMMMMMMMMMMMMMNMMNMMMMMMMMMQQQCQMFRKFFFKKNNNNNNNNNNNNNNNNNNNNMNNNNNNMNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNMNNNMNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["AsMutVar","AsRefVar","CloneVariadic","CopyRefVariadic","Drain","EitherRefVariadic","Extend","HomogenousVariadic","IntoIter","IntoOption","IntoVec","IntoZip","IterAnyMut","IterAnyRef","LEN","MutVar","MutVariadic","PartialEqVariadic","Prefix","RefVar","RefVariadic","Reverse","Split","SplitBySuffix","Suffix","UnRefVar","UnVec","Variadic","VariadicExt","VecVariadic","as_mut_var","as_ref_var","clone_ref_var","copy_var","drain","eq","eq_ref","extend","get","","get_mut","into_iter","into_option","into_singleton_vec","into_zip","is_empty","iter_any_mut","iter_any_ref","len","mut_to_ref","push","reverse","reverse_ref","split","split_by_suffix","split_by_suffix_ref","split_ref","unref_ref","var_args","var_expr","var_type","variadic_collections","variadic_trait","zip_vecs","DuplicateCounted","Schema","VariadicCollection","VariadicColumnMultiset","VariadicCountedHashSet","VariadicHashSet","VariadicMultiset","VariadicSet","borrow","","","","borrow_mut","","","","clone","","","","clone_into","","","","clone_to_uninit","","","","contains","","","","default","","","drain","","","","eq","","extend","","","fmt","","","from","","","","from_iter","","get","","insert","","","","into","","","","into_iter","","","","is_empty","","","","iter","","","","len","","","","new","","","next","to_owned","","","","try_from","","","","try_into","","","","type_id","","","","with_capacity_and_hasher","","with_hasher",""],"q":[[0,"variadics"],[64,"variadics::variadic_collections"],[167,"core::iter::traits::iterator"],[168,"core::default"],[169,"core::ops::range"],[170,"core::clone"],[171,"core::option"],[172,"core::cmp"],[173,"core::hash"],[174,"core::iter::traits::collect"],[175,"core::fmt"],[176,"core::result"],[177,"core::any"]],"i":"Ad0``Bh`1`D`221222Dd``E`1`4``Dj24```55BlBn6Cj0867668878888578834435`````7`F```````EbEdEfEh3210321032103210432032043203232032032103232432032103210432043204320320132103210321032103232","f":"``````````````````````````````{{{Af{b{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}}iAdAd{{An{}{{Ah{}}{Aj{}}{Al{}}}}}{{B`{}{{Ah{}}{Aj{}}{Al{}}}}}{{Bd{}{{Bb{}}}}}{{Bd{}{{Bb{}}}}}{}{{Bh{}{{Bf{}}}}Bj}}{{{Af{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}}gAdAd{{An{}{{Ah{}}{Aj{}}{Al{}}}}}{{B`{}{{Ah{}}{Aj{}}{Al{}}}}}{{Bd{}{{Bb{}}}}}{{Bd{}{{Bb{}}}}}{}{{Bh{}{{Bf{}}}}Bj}}{cBl{}}{{{Af{Bn}}}c{}}{{{Af{b{Bh{}{{Bf{c}}{C`{e}}{Cb{g}}}}}}i}g{{Ad{}{{Ab{}}}}}{{Bd{}{{Bb{}}}}}{{Bd{}{{Bb{}}}}}{{Cf{Cd}}Ch}}{{{Af{Cj}}{Af{Cj}}}Cl}{{cc}Cl{}}{{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}Ac}cAdAd{{An{}{{Ah{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}{Aj{g}}{Al{i}}}}}{{B`{}{{Ah{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}{Aj{g}}{Al{i}}}}}{{Bd{}{{Bb{Af}}}}}{{Bd{}{{Bb{{Af{b}}}}}}}{}{{Bh{}{{Bf{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}}}Bj}Ad}{{{Af{{D`{}{{Cn{c}}}}}}Cd}{{Db{{Af{e}}}}}{{Bd{}{{Bb{e}}}}}{}}{{{Af{b{Bh{}{{Bf{c}}{C`{e}}{Cb{g}}}}}}Cd}Db{{Ad{}{{Ab{}}}}}{{Bd{}{{Bb{}}}}}{{Bd{}{{Bb{}}}}}}{{{Af{b{D`{}{{Cn{c}}}}}}Cd}{{Db{{Af{be}}}}}{{Bd{}{{Bb{e}}}}}{}}{{{D`{}{{Cn{c}}}}}c{{Bd{}{{Bb{e}}}}}{}}{{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}oAdAd{{An{}{{Ah{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}{Aj{g}}{Al{i}}}}}{{B`{}{{Ah{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}{Aj{g}}{Al{i}}}}}{{Bd{}{{Bb{Af}}}}}{{Bd{}{{Bb{{Af{b}}}}}}}{}{{Bh{}{{Bf{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}}}Bj}}{{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}AaAdAd{{An{}{{Ah{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}{Aj{g}}{Al{i}}}}}{{B`{}{{Ah{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}{Aj{g}}{Al{i}}}}}{{Bd{}{{Bb{Af}}}}}{{Bd{}{{Bb{{Af{b}}}}}}}{}{{Bh{}{{Bf{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}}}Bj}}{{{Bh{}{{Bf{c}}{C`{e}}{Cb{g}}}}}e{{Ad{}{{Ab{{Bh{}{{Bf{c}}{C`{e}}{Cb{g}}}}}}}}}{{Bd{}{{Bb{c}}}}}{{Bd{}{{Bb{c}}}}}}{{{Af{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}}ClAdAd{{An{}{{Ah{}}{Aj{}}{Al{}}}}}{{B`{}{{Ah{}}{Aj{}}{Al{}}}}}{{Bd{}{{Bb{}}}}}{{Bd{}{{Bb{}}}}}{}{{Bh{}{{Bf{}}}}Bj}}{{{Af{b{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}}mAdAd{{An{}{{Ah{}}{Aj{}}{Al{}}}}}{{B`{}{{Ah{}}{Aj{}}{Al{}}}}}{{Bd{}{{Bb{}}}}}{{Bd{}{{Bb{}}}}}{}{{Bh{}{{Bf{}}}}Bj}}{{{Af{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}}kAdAd{{An{}{{Ah{}}{Aj{}}{Al{}}}}}{{B`{}{{Ah{}}{Aj{}}{Al{}}}}}{{Bd{}{{Bb{}}}}}{{Bd{}{{Bb{}}}}}{}{{Bh{}{{Bf{}}}}Bj}}{{{Af{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}}CdAdAd{{An{}{{Ah{}}{Aj{}}{Al{}}}}}{{B`{}{{Ah{}}{Aj{}}{Al{}}}}}{{Bd{}{{Bb{}}}}}{{Bd{}{{Bb{}}}}}{}{{Bh{}{{Bf{}}}}Bj}}{{{Dd{}{{Ah{c}}{Aj{e}}{Al{g}}}}}eAd{{An{}{{Ah{c}}{Aj{e}}}}}{{B`{}{{Ah{c}}{Al{g}}}}}}{{{Af{b{Bh{}{{Bf{c}}{C`{e}}{Cb{g}}}}}}c}Df{{Ad{}{{Ab{}}}}}{{Bd{}{{Bb{}}}}}{{Bd{}{{Bb{}}}}}}{{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}eAdAd{{An{}{{Ah{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}{Aj{g}}{Al{i}}}}}{{B`{}{{Ah{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}{Aj{g}}{Al{i}}}}}{{Bd{}{{Bb{Af}}}}}{{Bd{}{{Bb{{Af{b}}}}}}}{}{{Bh{}{{Bf{{Ad{}{{d{c}}{f{e}}{h{g}}{j{i}}{l{k}}{n{m}}{A`{o}}{Ab{Aa}}}}}}}}Bj}}{c{}{}}{{{Dj{}{{Dh{c}}}}}{{Dl{ec}}}AdAd}{{{E`{}{{Dn{c}}}}}{{Dl{ce}}}AdAd}{cDl{}}0{{{Af{{Dd{}{{Ah{c}}{Aj{e}}{Al{g}}}}}}}{}Ad{{An{}{{Ah{c}}{Aj{e}}}}}{{B`{}{{Ah{c}}{Al{g}}}}}}`````{{{Af{{Bh{}{{Bf{c}}{C`{e}}{Cb{g}}}}}}}{{`{{Bd{}{{Bb{}}}}}}}{{Ad{}{{Ab{}}}}}{{Bd{}{{Bb{}}}}}{{Bd{}{{Bb{}}}}}}````````{Af{{Af{c}}}{}}000{{{Af{b}}}{{Af{bc}}}{}}000{{{Af{{Eb{ce}}}}}{{Eb{ce}}}ChCh}{{{Af{{Ed{ce}}}}}{{Ed{ce}}}{AdCh}Ch}{{{Af{{Ef{ce}}}}}{{Ef{ce}}}ChCh}{{{Af{{Eh{c}}}}}{{Eh{c}}}{AdEjElCh}}{{Af{Af{bc}}}Df{}}000{AfDf}000{{{Af{{F`{}{{En{c}}}}}}}ClCj}{{{Af{{Eb{ce}}}}}Cl{AdCjEjEl}Fb}{{{Af{{Ed{ce}}}}}Cl{AdCjEjElCh}Fb}{{{Af{{Eh{c}}}}}Cl{CjEjEl}}{{}{{Eb{c}}}{}}{{}{{Ed{c}}}Ad}{{}{{Eh{c}}}{AdEjEl}}{{{Af{b{F`{}{{En{c}}}}}}}{{`{{Bd{}{{Bb{c}}}}}}}Cj}{{{Af{b{Eb{ce}}}}}{{`{{Bd{}{{Bb{g}}}}}}}{AdCjEjEl}Fb{}}{{{Af{b{Ed{ce}}}}}{{`{{Bd{}{{Bb{g}}}}}}}{AdCjEjElCh}Fb{}}{{{Af{b{Eh{c}}}}}{{`{{Bd{}{{Bb{e}}}}}}}{CjEjEl}{}}{{{Af{{Eb{ce}}}}{Af{{Eb{ce}}}}}Cl{EjElCj}Fb}{{{Af{{Ed{ce}}}}{Af{{Ed{ce}}}}}Cl{EjElCjCh}Fb}{{{Af{b{Eb{ce}}}}g}Df{EjElCj}Fb{{Fd{}{{Bb{c}}}}}}{{{Af{b{Ed{ce}}}}g}Df{EjElCjCh}Fb{{Fd{}{{Bb{c}}}}}}{{{Af{b{Eh{c}}}}e}Df{EjElCj}{{Fd{}{{Bb{c}}}}}}{{{Af{{Eb{c}}}}{Af{bFf}}}Fh{FjAdCjEjEl}}{{{Af{{Ed{c}}}}{Af{bFf}}}Fh{FjAdCj}}{{{Af{{Eh{c}}}}{Af{bFf}}}Fh{FjAdCjEjEl}}{cc{}}000{e{{Eb{cg}}}{EjElCj}{{Fd{}{{Bb{c}}}}}{FbBj}}{e{{Ed{cg}}}{EjElCjCh}{{Fd{}{{Bb{c}}}}}{FbBj}}{{{Af{{Eb{ce}}}}}{{Db{{Af{c}}}}}CjFb}{{{Af{{Ed{ce}}}}}{{Db{{Af{{Dl{cCd}}}}}}}CjFb}{{{Af{b{F`{}{{En{c}}}}}}c}ClCj}{{{Af{b{Eb{ce}}}}c}Cl{AdCjEjEl}Fb}{{{Af{b{Ed{ce}}}}c}Cl{AdCjEjElCh}Fb}{{{Af{b{Eh{c}}}}c}Cl{CjEjEl}}{{}c{}}000{{{Eb{ce}}}g{AdCj}{}{}}{{{Ed{c}}}e{AdCjCh}{}}2{{{Eh{c}}}e{CjEjEl}{}}{{{Af{{F`{}{{En{c}}}}}}}ClCj}{{{Af{{Eb{ce}}}}}Cl{AdCjEjEl}Fb}{{{Af{{Ed{ce}}}}}Cl{AdCjEjElCh}Fb}{{{Af{{Eh{c}}}}}Cl{CjEjEl}}{{{Af{{F`{}{{En{c}}}}}}}{{`{{Bd{}{{Bb{}}}}}}}Cj}{{{Af{{Eb{ce}}}}}{{`{{Bd{}{{Bb{}}}}}}}{AdCjEjEl}Fb}{{{Af{{Ed{ce}}}}}{{`{{Bd{}{{Bb{}}}}}}}{AdCjEjElCh}Fb}{{{Af{{Eh{c}}}}}{{`{{Bd{}{{Bb{}}}}}}}{CjEjEl}}{{{Af{{F`{}{{En{c}}}}}}}CdCj}{{{Af{{Eb{ce}}}}}Cd{AdCjEjEl}Fb}{{{Af{{Ed{ce}}}}}Cd{AdCjEjElCh}Fb}{{{Af{{Eh{c}}}}}Cd{CjEjEl}}{{}{{Eb{c}}}{}}{{}{{Ed{c}}}Ad}{{}{{Eh{c}}}{AdEjEl}}{{{Af{b{Ef{ec}}}}}{{Db{g}}}Ch{{Bd{}{{Bb{{Dl{cCd}}}}}}}{}}{Afc{}}000{c{{Fl{e}}}{}{}}000{{}{{Fl{c}}}{}}000{AfFn}000{{Cdc}{{Eb{ec}}}{}{}}{{Cdc}{{Ed{ec}}}{}Ad}{c{{Eb{ec}}}{}{}}{c{{Ed{ec}}}{}Ad}","D":"L`","p":[[0,"mut"],[17,"Extend"],[17,"Reverse"],[17,"AsRefVar"],[17,"AsMutVar"],[17,"IterAnyRef"],[17,"IterAnyMut"],[17,"IntoOption"],[17,"IntoVec"],[10,"VariadicExt",0],[1,"reference"],[17,"UnRefVar"],[17,"RefVar"],[17,"MutVar"],[10,"RefVariadic",0],[10,"MutVariadic",0],[17,"Item"],[10,"Iterator",167],[17,"UnVec"],[10,"VecVariadic",0],[10,"Default",168],[10,"CloneVariadic",0],[10,"CopyRefVariadic",0],[17,"IntoZip"],[17,"Drain"],[1,"usize"],[10,"RangeBounds",169],[10,"Clone",170],[10,"PartialEqVariadic",0],[1,"bool"],[17,"IntoIter"],[10,"HomogenousVariadic",0],[6,"Option",171],[10,"EitherRefVariadic",0],[1,"unit"],[17,"Suffix"],[10,"Split",0],[1,"tuple"],[17,"Prefix"],[10,"SplitBySuffix",0],[5,"VariadicHashSet",64],[5,"VariadicCountedHashSet",64],[5,"DuplicateCounted",64],[5,"VariadicColumnMultiset",64],[10,"Eq",172],[10,"Hash",173],[17,"Schema"],[10,"VariadicCollection",64],[10,"BuildHasher",173],[10,"IntoIterator",174],[5,"Formatter",175],[8,"Result",175],[10,"Debug",175],[6,"Result",176],[5,"TypeId",177]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAEcACgBJABMAXgAFAGUACgB0AAEAeQACAIAAAwCFAAIAiQACAI0AAgCTABAA"}],["variadics_macro",{"t":"Q","n":["tuple"],"q":[[0,"variadics_macro"]],"i":"`","f":"`","D":"b","p":[],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OjAAAAEAAAAAAAAAEAAAAAEA"}],["website_playground",{"t":"FFFFFNNNNNNNNNNOHHONNNNNOONNNNNNNNHHNNNNNOOOOOHNNNNNOONNNNNNNNNNNNNNN","n":["HydroflowOutput","HydroflowResult","JsDiagnostic","JsLineColumn","JsSpan","borrow","","","","","borrow_mut","","","","","column","compile_datalog","compile_hydroflow","compiled","deserialize","","","","","diagnostics","end","from","","","","","","","","init","init_datalog_boolean_demo","into","","","","","is_error","line","mermaid","message","output","send_datalog_boolean_demo","serialize","","","","","span","start","try_from","","","","","try_into","","","","","type_id","","","",""],"q":[[0,"website_playground"],[69,"alloc::string"],[70,"wasm_bindgen"],[71,"core::result"],[72,"serde::de"],[73,"proc_macro2::location"],[74,"proc_macro2"],[75,"hydroflow_lang::diagnostic"],[76,"core::option"],[77,"serde::ser"],[78,"core::any"]],"i":"`````lAbAdAfAh432104``0432101344332210``4321024021`4321023432104321043210","f":"`````{b{{b{c}}}{}}0000{{{b{d}}}{{b{dc}}}{}}0000`{{fhhhhhh}j}0`{c{{n{l}}}A`}{c{{n{Ab}}}A`}{c{{n{Ad}}}A`}{c{{n{Af}}}A`}{c{{n{Ah}}}A`}``{cc{}}{Ajl}1{AlAb}2{AnAd}33{{}B`}{{{b{Bb}}}B`}{{}c{}}0000`````{{{b{Bb}}Bd}{{Bf{Bd}}}}{{{b{l}}c}nBh}{{{b{Ab}}c}nBh}{{{b{Ad}}c}nBh}{{{b{Af}}c}nBh}{{{b{Ah}}c}nBh}``{c{{n{e}}}{}{}}0000{{}{{n{c}}}{}}0000{bBj}0000","D":"Ad","p":[[1,"reference"],[0,"mut"],[5,"String",69],[1,"bool"],[5,"JsValue",70],[5,"JsLineColumn",0],[6,"Result",71],[10,"Deserializer",72],[5,"JsSpan",0],[5,"JsDiagnostic",0],[5,"HydroflowResult",0],[5,"HydroflowOutput",0],[5,"LineColumn",73],[5,"Span",74],[5,"Diagnostic",75],[1,"unit"],[1,"str"],[1,"i32"],[6,"Option",76],[10,"Serializer",77],[5,"TypeId",78]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAADsABgAAABoAHAAAAB4AAAAgAAAAIwABACoAGwA="}]]')); if (typeof exports !== 'undefined') exports.searchIndex = searchIndex; else if (window.initSearch) window.initSearch(searchIndex); -//{"start":39,"fragment_lengths":[2290,8715,4429,3591,18790,37071,173,3225,3868,21638,324,37494,1098,5929,1406,792,2396,46952,221,2290,174,2748,2766,7338,1185,5536,223,135,542,415,3463,8858,167,1724]} \ No newline at end of file +//{"start":39,"fragment_lengths":[2290,8715,4429,3591,18790,37366,1046,5784,1308,774,37071,173,3225,3868,21638,324,2396,46952,221,2290,174,2748,2766,7338,1185,5536,223,135,542,415,3463,8858,167,1724]} \ No newline at end of file diff --git a/doc/search.desc/hydro_lang/hydro_lang-desc-0-.js b/doc/search.desc/hydro_lang/hydro_lang-desc-0-.js new file mode 100644 index 000000000000..257f27053dde --- /dev/null +++ b/doc/search.desc/hydro_lang/hydro_lang-desc-0-.js @@ -0,0 +1 @@ +searchState.loadedDescShard("hydro_lang", 0, "Creates a quoted expression for Hydro.\nMarks the stream as being bounded, which means that it is …\nMarks the stream as being unbounded, which means that it …\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nReturns the argument unchanged.\nCalls U::from(self).\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nRepresents a forward reference in the graph that will be …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nType of ID used to switch between different subgraphs at …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns the argument unchanged.\nCalls U::from(self).\nAn leaf in a Hydro graph, which is an pipeline that doesn…\nAn intermediate node in a Hydro graph, which consumes data …\nA source in a Hydro graph, where data enters the graph.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns the argument unchanged.\nCalls U::from(self).\nGenerates a stream with values emitted at a fixed …\nGenerates a stream with values emitted at a fixed interval …\nGiven the ordering guarantees of the input, determines the …\nA free variable representing the cluster’s own ID. When …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns the argument unchanged.\nCalls U::from(self).\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns the argument unchanged.\nCalls U::from(self).\nMarks the stream as being inside the single global clock …\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nReturns the argument unchanged.\nCalls U::from(self).\nGiven a tick, returns a optional value corresponding to a …\nEagerly samples the optional as fast as possible, …\nGiven a time interval, returns a stream corresponding to …\nCount the cardinality of each input and periodically …\nStructure for tracking expressions known to have …\nTags the expression as commutative.\nReturns the argument unchanged.\nCalls U::from(self).\nReturns the argument unchanged.\nCalls U::from(self).\nReturns the argument unchanged.\nCalls U::from(self).\nGiven a tick, returns a singleton value corresponding to a …\nEagerly samples the singleton as fast as possible, …\nGiven a time interval, returns a stream corresponding to …\nThe weaker of the two orderings.\nHelper trait for determining the weakest of two orderings.\nMarks the stream as having no order, which means that the …\nAn ordered sequence stream of elements of type T.\nMarks the stream as being totally ordered, which means …\nExplicitly “casts” the stream to a type with a …\nAllow this stream through if the other stream has …\nAllow this stream through if the other stream is empty, …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nGiven a time interval, returns a stream corresponding to …\nGiven a tick, returns a stream corresponding to a batch of …\nGiven a timeout duration, returns an Optional which will …") \ No newline at end of file diff --git a/doc/search.desc/hydro_std/hydro_std-desc-0-.js b/doc/search.desc/hydro_std/hydro_std-desc-0-.js new file mode 100644 index 000000000000..11add12e406e --- /dev/null +++ b/doc/search.desc/hydro_std/hydro_std-desc-0-.js @@ -0,0 +1 @@ +searchState.loadedDescShard("hydro_std", 0, "Given an incoming stream of request-response responses, …") \ No newline at end of file diff --git a/doc/search.desc/hydro_test/hydro_test-desc-0-.js b/doc/search.desc/hydro_test/hydro_test-desc-0-.js new file mode 100644 index 000000000000..07a675f58eec --- /dev/null +++ b/doc/search.desc/hydro_test/hydro_test-desc-0-.js @@ -0,0 +1 @@ +searchState.loadedDescShard("hydro_test", 0, "Returns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nImplements the core Paxos algorithm, which uses a cluster …\nReturns the argument unchanged.\nCalls U::from(self).\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nSets up a linearizable key-value store using Paxos.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).") \ No newline at end of file diff --git a/doc/search.desc/hydro_test_local/hydro_test_local-desc-0-.js b/doc/search.desc/hydro_test_local/hydro_test_local-desc-0-.js new file mode 100644 index 000000000000..de98241a2c11 --- /dev/null +++ b/doc/search.desc/hydro_test_local/hydro_test_local-desc-0-.js @@ -0,0 +1 @@ +searchState.loadedDescShard("hydro_test_local", 0, "") \ No newline at end of file diff --git a/doc/search.desc/hydro_test_local_macro/hydro_test_local_macro-desc-0-.js b/doc/search.desc/hydro_test_local_macro/hydro_test_local_macro-desc-0-.js new file mode 100644 index 000000000000..96c4b5c270c0 --- /dev/null +++ b/doc/search.desc/hydro_test_local_macro/hydro_test_local_macro-desc-0-.js @@ -0,0 +1 @@ +searchState.loadedDescShard("hydro_test_local_macro", 0, "") \ No newline at end of file diff --git a/doc/search.desc/hydroflow_plus/hydroflow_plus-desc-0-.js b/doc/search.desc/hydroflow_plus/hydroflow_plus-desc-0-.js deleted file mode 100644 index 90bf405a2870..000000000000 --- a/doc/search.desc/hydroflow_plus/hydroflow_plus-desc-0-.js +++ /dev/null @@ -1 +0,0 @@ -searchState.loadedDescShard("hydroflow_plus", 0, "Creates a quoted expression for Hydroflow+.\nMarks the stream as being bounded, which means that it is …\nMarks the stream as being unbounded, which means that it …\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nReturns the argument unchanged.\nCalls U::from(self).\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nRepresents a forward reference in the graph that will be …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nType of ID used to switch between different subgraphs at …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns the argument unchanged.\nCalls U::from(self).\nAn leaf in a Hydroflow+ graph, which is an pipeline that …\nAn intermediate node in a Hydroflow+ graph, which consumes …\nA source in a Hydroflow+ graph, where data enters the …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns the argument unchanged.\nCalls U::from(self).\nGenerates a stream with values emitted at a fixed …\nGenerates a stream with values emitted at a fixed interval …\nGiven the ordering guarantees of the input, determines the …\nA free variable representing the cluster’s own ID. When …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns the argument unchanged.\nCalls U::from(self).\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns the argument unchanged.\nCalls U::from(self).\nMarks the stream as being inside the single global clock …\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nReturns the argument unchanged.\nCalls U::from(self).\nGiven a tick, returns a optional value corresponding to a …\nEagerly samples the optional as fast as possible, …\nGiven a time interval, returns a stream corresponding to …\nCount the cardinality of each input and periodically …\nStructure for tracking expressions known to have …\nTags the expression as commutative.\nReturns the argument unchanged.\nCalls U::from(self).\nReturns the argument unchanged.\nCalls U::from(self).\nReturns the argument unchanged.\nCalls U::from(self).\nGiven a tick, returns a singleton value corresponding to a …\nEagerly samples the singleton as fast as possible, …\nGiven a time interval, returns a stream corresponding to …\nThe weaker of the two orderings.\nHelper trait for determining the weakest of two orderings.\nMarks the stream as having no order, which means that the …\nAn ordered sequence stream of elements of type T.\nMarks the stream as being totally ordered, which means …\nExplicitly “casts” the stream to a type with a …\nAllow this stream through if the other stream has …\nAllow this stream through if the other stream is empty, …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nGiven a time interval, returns a stream corresponding to …\nGiven a tick, returns a stream corresponding to a batch of …\nGiven a timeout duration, returns an Optional which will …") \ No newline at end of file diff --git a/doc/search.desc/hydroflow_plus_std/hydroflow_plus_std-desc-0-.js b/doc/search.desc/hydroflow_plus_std/hydroflow_plus_std-desc-0-.js deleted file mode 100644 index 28608e849a44..000000000000 --- a/doc/search.desc/hydroflow_plus_std/hydroflow_plus_std-desc-0-.js +++ /dev/null @@ -1 +0,0 @@ -searchState.loadedDescShard("hydroflow_plus_std", 0, "Given an incoming stream of request-response responses, …") \ No newline at end of file diff --git a/doc/search.desc/hydroflow_plus_test/hydroflow_plus_test-desc-0-.js b/doc/search.desc/hydroflow_plus_test/hydroflow_plus_test-desc-0-.js deleted file mode 100644 index beed123db5e0..000000000000 --- a/doc/search.desc/hydroflow_plus_test/hydroflow_plus_test-desc-0-.js +++ /dev/null @@ -1 +0,0 @@ -searchState.loadedDescShard("hydroflow_plus_test", 0, "Returns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nImplements the core Paxos algorithm, which uses a cluster …\nReturns the argument unchanged.\nCalls U::from(self).\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nSets up a linearizable key-value store using Paxos.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).") \ No newline at end of file diff --git a/doc/search.desc/hydroflow_plus_test_local/hydroflow_plus_test_local-desc-0-.js b/doc/search.desc/hydroflow_plus_test_local/hydroflow_plus_test_local-desc-0-.js deleted file mode 100644 index e918bbf46ca2..000000000000 --- a/doc/search.desc/hydroflow_plus_test_local/hydroflow_plus_test_local-desc-0-.js +++ /dev/null @@ -1 +0,0 @@ -searchState.loadedDescShard("hydroflow_plus_test_local", 0, "") \ No newline at end of file diff --git a/doc/search.desc/hydroflow_plus_test_local_macro/hydroflow_plus_test_local_macro-desc-0-.js b/doc/search.desc/hydroflow_plus_test_local_macro/hydroflow_plus_test_local_macro-desc-0-.js deleted file mode 100644 index 6a77f9d964a7..000000000000 --- a/doc/search.desc/hydroflow_plus_test_local_macro/hydroflow_plus_test_local_macro-desc-0-.js +++ /dev/null @@ -1 +0,0 @@ -searchState.loadedDescShard("hydroflow_plus_test_local_macro", 0, "") \ No newline at end of file diff --git a/doc/search.desc/stageleft/stageleft-desc-0-.js b/doc/search.desc/stageleft/stageleft-desc-0-.js index cc683af596b5..fddacc5c4b30 100644 --- a/doc/search.desc/stageleft/stageleft-desc-0-.js +++ b/doc/search.desc/stageleft/stageleft-desc-0-.js @@ -1 +1 @@ -searchState.loadedDescShard("stageleft", 0, "Represents a piece of data that will be passed into the …\nDefines an entrypoint for staged code, which will be …\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCreates a quoted expression for Hydroflow+.\nCaptures a fully qualified path to a given type, which is …\nMarks a chunk of code as being runtime-only, which means …\nA utility for declaring top-level public modules in a …\nA region of source code, along with macro expansion …\nAn abstract stream of tokens, or more concretely a …\nReturns the span’s byte position range in the source …\nThe span of the invocation of the current procedural macro.\nGet the ending line/column in the source file for this …\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nChecks if this TokenStream is empty.\nCreate a new span encompassing self and other.\nCreates a new span with the same name resolution behavior …\nThe span located at the invocation of the procedural …\nReturns an empty TokenStream containing no token trees.\nThe whole point.\nCreates a new span with the same line/column information …\nReturns the source text behind a span. This preserves the …\nGet the starting line/column in the source file for this …\nConvert proc_macro2::Span to proc_macro::Span.\nReturns the argument unchanged.\nCalls U::from(self).") \ No newline at end of file +searchState.loadedDescShard("stageleft", 0, "Represents a piece of data that will be passed into the …\nDefines an entrypoint for staged code, which will be …\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nCreates a quoted expression for Hydro.\nCaptures a fully qualified path to a given type, which is …\nMarks a chunk of code as being runtime-only, which means …\nA utility for declaring top-level public modules in a …\nA region of source code, along with macro expansion …\nAn abstract stream of tokens, or more concretely a …\nReturns the span’s byte position range in the source …\nThe span of the invocation of the current procedural macro.\nGet the ending line/column in the source file for this …\nReturns the argument unchanged.\nReturns the argument unchanged.\nCalls U::from(self).\nCalls U::from(self).\nChecks if this TokenStream is empty.\nCreate a new span encompassing self and other.\nCreates a new span with the same name resolution behavior …\nThe span located at the invocation of the procedural …\nReturns an empty TokenStream containing no token trees.\nThe whole point.\nCreates a new span with the same line/column information …\nReturns the source text behind a span. This preserves the …\nGet the starting line/column in the source file for this …\nConvert proc_macro2::Span to proc_macro::Span.\nReturns the argument unchanged.\nCalls U::from(self).") \ No newline at end of file diff --git a/doc/search.desc/stageleft_macro/stageleft_macro-desc-0-.js b/doc/search.desc/stageleft_macro/stageleft_macro-desc-0-.js index e7172dc15922..5ad02f0957dc 100644 --- a/doc/search.desc/stageleft_macro/stageleft_macro-desc-0-.js +++ b/doc/search.desc/stageleft_macro/stageleft_macro-desc-0-.js @@ -1 +1 @@ -searchState.loadedDescShard("stageleft_macro", 0, "Defines an entrypoint for staged code, which will be …\nCreates a quoted expression for Hydroflow+.\nMarks a chunk of code as being runtime-only, which means …\nA utility for declaring top-level public modules in a …") \ No newline at end of file +searchState.loadedDescShard("stageleft_macro", 0, "Defines an entrypoint for staged code, which will be …\nCreates a quoted expression for Hydro.\nMarks a chunk of code as being runtime-only, which means …\nA utility for declaring top-level public modules in a …") \ No newline at end of file diff --git a/doc/src-files.js b/doc/src-files.js index 43d6f292edd4..78d514054b59 100644 --- a/doc/src-files.js +++ b/doc/src-files.js @@ -1,3 +1,3 @@ -var srcIndex = new Map(JSON.parse('[["gossip_cli",["",[],["main.rs"]]],["gossip_kv",["",[["lattices",[],["mod.rs"]]],["lib.rs","membership.rs","model.rs","server.rs","util.rs"]]],["gossip_server",["",[["config",[],["mod.rs"]]],["main.rs","membership.rs"]]],["hydro_cli",["",[],["cli.rs","lib.rs"]]],["hydro_deploy",["",[["hydroflow_crate",[],["build.rs","flamegraph.rs","mod.rs","ports.rs","service.rs","tracing_options.rs"]],["localhost",[],["launched_binary.rs","mod.rs"]]],["azure.rs","custom_service.rs","deployment.rs","gcp.rs","lib.rs","progress.rs","ssh.rs","terraform.rs","util.rs"]]],["hydroflow",["",[["compiled",[["pull",[["half_join_state",[],["fold.rs","fold_from.rs","mod.rs","multiset.rs","reduce.rs","set.rs"]]],["anti_join.rs","cross_join.rs","mod.rs","symmetric_hash_join.rs"]]],["mod.rs"]],["scheduled",[["handoff",[],["handoff_list.rs","mod.rs","tee.rs","vector.rs"]],["net",[],["mod.rs","network_vertex.rs"]]],["context.rs","graph.rs","graph_ext.rs","input.rs","mod.rs","port.rs","query.rs","reactor.rs","state.rs","subgraph.rs","ticks.rs"]],["util",[["unsync",[],["mod.rs","mpsc.rs"]]],["clear.rs","demux_enum.rs","deploy.rs","mod.rs","monotonic.rs","monotonic_map.rs","multiset.rs","simulation.rs","socket.rs","sparse_vec.rs","tcp.rs","udp.rs"]]],["declarative_macro.rs","lib.rs"]]],["hydroflow_datalog",["",[],["lib.rs"]]],["hydroflow_datalog_core",["",[],["grammar.rs","join_plan.rs","lib.rs","util.rs"]]],["hydroflow_deploy_integration",["",[],["lib.rs"]]],["hydroflow_lang",["",[["graph",[["ops",[],["_lattice_fold_batch.rs","_lattice_join_fused_join.rs","all_once.rs","anti_join.rs","anti_join_multiset.rs","assert.rs","assert_eq.rs","batch.rs","chain.rs","cross_join.rs","cross_join_multiset.rs","cross_singleton.rs","defer_signal.rs","defer_tick.rs","defer_tick_lazy.rs","demux.rs","demux_enum.rs","dest_file.rs","dest_sink.rs","dest_sink_serde.rs","difference.rs","difference_multiset.rs","enumerate.rs","filter.rs","filter_map.rs","flat_map.rs","flatten.rs","fold.rs","fold_keyed.rs","for_each.rs","identity.rs","initialize.rs","inspect.rs","join.rs","join_fused.rs","join_fused_lhs.rs","join_fused_rhs.rs","join_multiset.rs","lattice_bimorphism.rs","lattice_fold.rs","lattice_reduce.rs","map.rs","mod.rs","multiset_delta.rs","next_stratum.rs","null.rs","partition.rs","persist.rs","persist_mut.rs","persist_mut_keyed.rs","py_udf.rs","reduce.rs","reduce_keyed.rs","sort.rs","sort_by_key.rs","source_file.rs","source_interval.rs","source_iter.rs","source_json.rs","source_stdin.rs","source_stream.rs","source_stream_serde.rs","spin.rs","state.rs","state_by.rs","tee.rs","union.rs","unique.rs","unzip.rs","zip.rs","zip_longest.rs"]]],["di_mul_graph.rs","eliminate_extra_unions_tees.rs","flat_graph_builder.rs","flat_to_partitioned.rs","graph_algorithms.rs","graph_write.rs","hydroflow_graph.rs","hydroflow_graph_debugging.rs","mod.rs"]]],["diagnostic.rs","lib.rs","parse.rs","pretty_span.rs","process_singletons.rs","union_find.rs"]]],["hydroflow_macro",["",[],["lib.rs"]]],["hydroflow_plus",["",[["builder",[],["built.rs","compiled.rs","deploy.rs","mod.rs"]],["deploy",[],["in_memory_graph.rs","macro_runtime.rs","mod.rs"]],["location",[["cluster",[],["cluster_id.rs","mod.rs"]]],["can_send.rs","external_process.rs","mod.rs","process.rs","tick.rs"]],["rewrites",[],["mod.rs","persist_pullup.rs","profiler.rs","properties.rs"]]],["boundedness.rs","cycle.rs","deploy_runtime.rs","ir.rs","lib.rs","optional.rs","runtime_context.rs","singleton.rs","staging_util.rs","stream.rs"]]],["hydroflow_plus_std",["",[],["lib.rs","quorum.rs","request_response.rs"]]],["hydroflow_plus_test",["",[["cluster",[],["compute_pi.rs","many_to_many.rs","map_reduce.rs","mod.rs","paxos.rs","paxos_bench.rs","paxos_kv.rs","simple_cluster.rs","two_pc.rs"]],["distributed",[],["first_ten.rs","mod.rs"]]],["lib.rs"]]],["hydroflow_plus_test_local",["",[["local",[],["chat_app.rs","compute_pi.rs","count_elems.rs","first_ten.rs","graph_reachability.rs","mod.rs","negation.rs","teed_join.rs"]]],["lib.rs"]]],["hydroflow_plus_test_local_macro",["",[["local",[],["chat_app.rs","compute_pi.rs","count_elems.rs","first_ten.rs","graph_reachability.rs","mod.rs","negation.rs","teed_join.rs"]]],["lib.rs"]]],["latency_measure",["",[],["latency_measure.rs","protocol.rs"]]],["lattices",["",[["ght",[],["colt.rs","lattice.rs","macros.rs","mod.rs","test.rs"]]],["algebra.rs","collections.rs","conflict.rs","dom_pair.rs","lib.rs","map_union.rs","map_union_with_tombstones.rs","ord.rs","pair.rs","point.rs","semiring_application.rs","set_union.rs","set_union_with_tombstones.rs","test.rs","union_find.rs","unit.rs","vec_union.rs","with_bot.rs","with_top.rs"]]],["lattices_macro",["",[],["lib.rs"]]],["load_test_server",["",[],["server.rs"]]],["multiplatform_test",["",[],["lib.rs"]]],["pn",["",[],["pn.rs","protocol.rs"]]],["pn_delta",["",[],["pn_delta.rs","protocol.rs"]]],["pusherator",["",[],["demux.rs","filter.rs","filter_map.rs","flatten.rs","for_each.rs","inspect.rs","lib.rs","map.rs","null.rs","partition.rs","pivot.rs","switch.rs","tee.rs","unzip.rs"]]],["relalg",["",[],["codegen.rs","lib.rs","runtime.rs","sexp.rs"]]],["stageleft",["",[],["lib.rs","runtime_support.rs","type_name.rs"]]],["stageleft_macro",["",[["quote_impl",[["free_variable",[],["mod.rs","prelude.rs"]]],["mod.rs"]]],["lib.rs"]]],["stageleft_test",["",[],["lib.rs","submodule.rs"]]],["stageleft_test_macro",["",[],["lib.rs","submodule.rs"]]],["stageleft_tool",["",[],["lib.rs"]]],["topolotree",["",[],["main.rs","protocol.rs"]]],["variadics",["",[],["lib.rs","variadic_collections.rs"]]],["variadics_macro",["",[],["lib.rs"]]],["website_playground",["",[],["lib.rs","utils.rs"]]]]')); +var srcIndex = new Map(JSON.parse('[["gossip_cli",["",[],["main.rs"]]],["gossip_kv",["",[["lattices",[],["mod.rs"]]],["lib.rs","membership.rs","model.rs","server.rs","util.rs"]]],["gossip_server",["",[["config",[],["mod.rs"]]],["main.rs","membership.rs"]]],["hydro_cli",["",[],["cli.rs","lib.rs"]]],["hydro_deploy",["",[["hydroflow_crate",[],["build.rs","flamegraph.rs","mod.rs","ports.rs","service.rs","tracing_options.rs"]],["localhost",[],["launched_binary.rs","mod.rs"]]],["azure.rs","custom_service.rs","deployment.rs","gcp.rs","lib.rs","progress.rs","ssh.rs","terraform.rs","util.rs"]]],["hydro_lang",["",[["builder",[],["built.rs","compiled.rs","deploy.rs","mod.rs"]],["deploy",[],["in_memory_graph.rs","macro_runtime.rs","mod.rs"]],["location",[["cluster",[],["cluster_id.rs","mod.rs"]]],["can_send.rs","external_process.rs","mod.rs","process.rs","tick.rs"]],["rewrites",[],["mod.rs","persist_pullup.rs","profiler.rs","properties.rs"]]],["boundedness.rs","cycle.rs","deploy_runtime.rs","ir.rs","lib.rs","optional.rs","runtime_context.rs","singleton.rs","staging_util.rs","stream.rs"]]],["hydro_std",["",[],["lib.rs","quorum.rs","request_response.rs"]]],["hydro_test",["",[["cluster",[],["compute_pi.rs","many_to_many.rs","map_reduce.rs","mod.rs","paxos.rs","paxos_bench.rs","paxos_kv.rs","simple_cluster.rs","two_pc.rs"]],["distributed",[],["first_ten.rs","mod.rs"]]],["lib.rs"]]],["hydro_test_local",["",[["local",[],["chat_app.rs","compute_pi.rs","count_elems.rs","first_ten.rs","graph_reachability.rs","mod.rs","negation.rs","teed_join.rs"]]],["lib.rs"]]],["hydro_test_local_macro",["",[["local",[],["chat_app.rs","compute_pi.rs","count_elems.rs","first_ten.rs","graph_reachability.rs","mod.rs","negation.rs","teed_join.rs"]]],["lib.rs"]]],["hydroflow",["",[["compiled",[["pull",[["half_join_state",[],["fold.rs","fold_from.rs","mod.rs","multiset.rs","reduce.rs","set.rs"]]],["anti_join.rs","cross_join.rs","mod.rs","symmetric_hash_join.rs"]]],["mod.rs"]],["scheduled",[["handoff",[],["handoff_list.rs","mod.rs","tee.rs","vector.rs"]],["net",[],["mod.rs","network_vertex.rs"]]],["context.rs","graph.rs","graph_ext.rs","input.rs","mod.rs","port.rs","query.rs","reactor.rs","state.rs","subgraph.rs","ticks.rs"]],["util",[["unsync",[],["mod.rs","mpsc.rs"]]],["clear.rs","demux_enum.rs","deploy.rs","mod.rs","monotonic.rs","monotonic_map.rs","multiset.rs","simulation.rs","socket.rs","sparse_vec.rs","tcp.rs","udp.rs"]]],["declarative_macro.rs","lib.rs"]]],["hydroflow_datalog",["",[],["lib.rs"]]],["hydroflow_datalog_core",["",[],["grammar.rs","join_plan.rs","lib.rs","util.rs"]]],["hydroflow_deploy_integration",["",[],["lib.rs"]]],["hydroflow_lang",["",[["graph",[["ops",[],["_lattice_fold_batch.rs","_lattice_join_fused_join.rs","all_once.rs","anti_join.rs","anti_join_multiset.rs","assert.rs","assert_eq.rs","batch.rs","chain.rs","cross_join.rs","cross_join_multiset.rs","cross_singleton.rs","defer_signal.rs","defer_tick.rs","defer_tick_lazy.rs","demux.rs","demux_enum.rs","dest_file.rs","dest_sink.rs","dest_sink_serde.rs","difference.rs","difference_multiset.rs","enumerate.rs","filter.rs","filter_map.rs","flat_map.rs","flatten.rs","fold.rs","fold_keyed.rs","for_each.rs","identity.rs","initialize.rs","inspect.rs","join.rs","join_fused.rs","join_fused_lhs.rs","join_fused_rhs.rs","join_multiset.rs","lattice_bimorphism.rs","lattice_fold.rs","lattice_reduce.rs","map.rs","mod.rs","multiset_delta.rs","next_stratum.rs","null.rs","partition.rs","persist.rs","persist_mut.rs","persist_mut_keyed.rs","py_udf.rs","reduce.rs","reduce_keyed.rs","sort.rs","sort_by_key.rs","source_file.rs","source_interval.rs","source_iter.rs","source_json.rs","source_stdin.rs","source_stream.rs","source_stream_serde.rs","spin.rs","state.rs","state_by.rs","tee.rs","union.rs","unique.rs","unzip.rs","zip.rs","zip_longest.rs"]]],["di_mul_graph.rs","eliminate_extra_unions_tees.rs","flat_graph_builder.rs","flat_to_partitioned.rs","graph_algorithms.rs","graph_write.rs","hydroflow_graph.rs","hydroflow_graph_debugging.rs","mod.rs"]]],["diagnostic.rs","lib.rs","parse.rs","pretty_span.rs","process_singletons.rs","union_find.rs"]]],["hydroflow_macro",["",[],["lib.rs"]]],["latency_measure",["",[],["latency_measure.rs","protocol.rs"]]],["lattices",["",[["ght",[],["colt.rs","lattice.rs","macros.rs","mod.rs","test.rs"]]],["algebra.rs","collections.rs","conflict.rs","dom_pair.rs","lib.rs","map_union.rs","map_union_with_tombstones.rs","ord.rs","pair.rs","point.rs","semiring_application.rs","set_union.rs","set_union_with_tombstones.rs","test.rs","union_find.rs","unit.rs","vec_union.rs","with_bot.rs","with_top.rs"]]],["lattices_macro",["",[],["lib.rs"]]],["load_test_server",["",[],["server.rs"]]],["multiplatform_test",["",[],["lib.rs"]]],["pn",["",[],["pn.rs","protocol.rs"]]],["pn_delta",["",[],["pn_delta.rs","protocol.rs"]]],["pusherator",["",[],["demux.rs","filter.rs","filter_map.rs","flatten.rs","for_each.rs","inspect.rs","lib.rs","map.rs","null.rs","partition.rs","pivot.rs","switch.rs","tee.rs","unzip.rs"]]],["relalg",["",[],["codegen.rs","lib.rs","runtime.rs","sexp.rs"]]],["stageleft",["",[],["lib.rs","runtime_support.rs","type_name.rs"]]],["stageleft_macro",["",[["quote_impl",[["free_variable",[],["mod.rs","prelude.rs"]]],["mod.rs"]]],["lib.rs"]]],["stageleft_test",["",[],["lib.rs","submodule.rs"]]],["stageleft_test_macro",["",[],["lib.rs","submodule.rs"]]],["stageleft_tool",["",[],["lib.rs"]]],["topolotree",["",[],["main.rs","protocol.rs"]]],["variadics",["",[],["lib.rs","variadic_collections.rs"]]],["variadics_macro",["",[],["lib.rs"]]],["website_playground",["",[],["lib.rs","utils.rs"]]]]')); createSrcSidebar(); -//{"start":36,"fragment_lengths":[34,108,78,42,294,713,41,84,52,1482,39,505,76,237,187,193,65,383,38,43,42,39,51,190,66,69,111,53,59,38,49,59,39,53]} \ No newline at end of file +//{"start":36,"fragment_lengths":[34,108,78,42,294,501,67,228,178,184,713,41,84,52,1482,39,65,383,38,43,42,39,51,190,66,69,111,53,59,38,49,59,39,53]} \ No newline at end of file diff --git a/doc/src/hydroflow_plus_std/lib.rs.html b/doc/src/hydro_lang/boundedness.rs.html similarity index 51% rename from doc/src/hydroflow_plus_std/lib.rs.html rename to doc/src/hydro_lang/boundedness.rs.html index 846656b50588..1c8a5ed4e8fc 100644 --- a/doc/src/hydroflow_plus_std/lib.rs.html +++ b/doc/src/hydro_lang/boundedness.rs.html @@ -1,27 +1,15 @@ -lib.rs - source
1
+boundedness.rs - source
1
 2
 3
 4
 5
 6
 7
-8
-9
-10
-11
-12
-13
-
stageleft::stageleft_no_entry_crate!();
+
/// Marks the stream as being unbounded, which means that it is not
+/// guaranteed to be complete in finite time.
+pub enum Unbounded {}
 
-pub mod quorum;
-pub mod request_response;
-
-#[stageleft::runtime]
-#[cfg(test)]
-mod tests {
-    #[ctor::ctor]
-    fn init() {
-        hydroflow_plus::deploy::init_test();
-    }
-}
+/// Marks the stream as being bounded, which means that it is guaranteed
+/// to be complete in finite time.
+pub enum Bounded {}
 
\ No newline at end of file diff --git a/doc/src/hydroflow_plus/builder/built.rs.html b/doc/src/hydro_lang/builder/built.rs.html similarity index 83% rename from doc/src/hydroflow_plus/builder/built.rs.html rename to doc/src/hydro_lang/builder/built.rs.html index fb0b672e81c0..cbcce6ef41f3 100644 --- a/doc/src/hydroflow_plus/builder/built.rs.html +++ b/doc/src/hydro_lang/builder/built.rs.html @@ -1,4 +1,4 @@ -built.rs - source
1
+built.rs - source
1
 2
 3
 4
@@ -143,12 +143,12 @@
 use super::compiled::CompiledFlow;
 use super::deploy::{DeployFlow, DeployResult};
 use crate::deploy::{ClusterSpec, Deploy, ExternalSpec, IntoProcessSpec, LocalDeploy};
-use crate::ir::HfPlusLeaf;
+use crate::ir::HydroLeaf;
 use crate::location::{Cluster, ExternalProcess, Process};
 use crate::staging_util::Invariant;
 
 pub struct BuiltFlow<'a> {
-    pub(super) ir: Vec<HfPlusLeaf>,
+    pub(super) ir: Vec<HydroLeaf>,
     pub(super) processes: Vec<usize>,
     pub(super) clusters: Vec<usize>,
     pub(super) used: bool,
@@ -164,7 +164,7 @@
     }
 }
 
-pub(crate) fn build_inner(ir: &mut Vec<HfPlusLeaf>) -> BTreeMap<usize, HydroflowGraph> {
+pub(crate) fn build_inner(ir: &mut Vec<HydroLeaf>) -> BTreeMap<usize, HydroflowGraph> {
     let mut builders = BTreeMap::new();
     let mut built_tees = HashMap::new();
     let mut next_stmt_id = 0;
@@ -183,11 +183,11 @@
 }
 
 impl<'a> BuiltFlow<'a> {
-    pub fn ir(&self) -> &Vec<HfPlusLeaf> {
+    pub fn ir(&self) -> &Vec<HydroLeaf> {
         &self.ir
     }
 
-    pub fn optimize_with(mut self, f: impl FnOnce(Vec<HfPlusLeaf>) -> Vec<HfPlusLeaf>) -> Self {
+    pub fn optimize_with(mut self, f: impl FnOnce(Vec<HydroLeaf>) -> Vec<HydroLeaf>) -> Self {
         self.used = true;
         BuiltFlow {
             ir: f(std::mem::take(&mut self.ir)),
diff --git a/doc/src/hydroflow_plus/builder/compiled.rs.html b/doc/src/hydro_lang/builder/compiled.rs.html
similarity index 83%
rename from doc/src/hydroflow_plus/builder/compiled.rs.html
rename to doc/src/hydro_lang/builder/compiled.rs.html
index 27f7743d793c..363db1baa202 100644
--- a/doc/src/hydroflow_plus/builder/compiled.rs.html
+++ b/doc/src/hydro_lang/builder/compiled.rs.html
@@ -1,4 +1,4 @@
-compiled.rs - source
1
+compiled.rs - source
1
 2
 3
 4
@@ -163,10 +163,10 @@
         self,
         id: impl QuotedWithContext<'a, usize, ()>,
     ) -> CompiledFlowWithId<'a> {
-        let hydroflow_crate = proc_macro_crate::crate_name("hydroflow_plus")
-            .expect("hydroflow_plus should be present in `Cargo.toml`");
+        let hydroflow_crate = proc_macro_crate::crate_name("hydro_lang")
+            .expect("hydro_lang should be present in `Cargo.toml`");
         let root = match hydroflow_crate {
-            proc_macro_crate::FoundCrate::Itself => quote! { hydroflow_plus::hydroflow },
+            proc_macro_crate::FoundCrate::Itself => quote! { hydro_lang::hydroflow },
             proc_macro_crate::FoundCrate::Name(name) => {
                 let ident = syn::Ident::new(&name, proc_macro2::Span::call_site());
                 quote! { #ident::hydroflow }
@@ -223,10 +223,10 @@
     type O = Hydroflow<'a>;
 
     fn to_tokens(mut self, _ctx: &Ctx) -> (Option<TokenStream>, Option<TokenStream>) {
-        let hydroflow_crate = proc_macro_crate::crate_name("hydroflow_plus")
-            .expect("hydroflow_plus should be present in `Cargo.toml`");
+        let hydroflow_crate = proc_macro_crate::crate_name("hydro_lang")
+            .expect("hydro_lang should be present in `Cargo.toml`");
         let root = match hydroflow_crate {
-            proc_macro_crate::FoundCrate::Itself => quote! { hydroflow_plus::hydroflow },
+            proc_macro_crate::FoundCrate::Itself => quote! { hydro_lang::hydroflow },
             proc_macro_crate::FoundCrate::Name(name) => {
                 let ident = syn::Ident::new(&name, proc_macro2::Span::call_site());
                 quote! { #ident::hydroflow }
diff --git a/doc/src/hydroflow_plus/builder/deploy.rs.html b/doc/src/hydro_lang/builder/deploy.rs.html
similarity index 91%
rename from doc/src/hydroflow_plus/builder/deploy.rs.html
rename to doc/src/hydro_lang/builder/deploy.rs.html
index 6c93cb6192da..8bb6acb8c67d 100644
--- a/doc/src/hydroflow_plus/builder/deploy.rs.html
+++ b/doc/src/hydro_lang/builder/deploy.rs.html
@@ -1,4 +1,4 @@
-deploy.rs - source
1
+deploy.rs - source
1
 2
 3
 4
@@ -335,7 +335,7 @@
     ClusterSpec, Deploy, ExternalSpec, IntoProcessSpec, LocalDeploy, Node, ProcessSpec,
     RegisterPort,
 };
-use crate::ir::HfPlusLeaf;
+use crate::ir::HydroLeaf;
 use crate::location::external_process::{
     ExternalBincodeSink, ExternalBincodeStream, ExternalBytesPort,
 };
@@ -343,7 +343,7 @@
 use crate::staging_util::Invariant;
 
 pub struct DeployFlow<'a, D: LocalDeploy<'a>> {
-    pub(super) ir: Vec<HfPlusLeaf>,
+    pub(super) ir: Vec<HydroLeaf>,
     pub(super) nodes: HashMap<usize, D::Process>,
     pub(super) externals: HashMap<usize, D::ExternalProcess>,
     pub(super) clusters: HashMap<usize, D::Cluster>,
@@ -361,7 +361,7 @@
 }
 
 impl<'a, D: LocalDeploy<'a>> DeployFlow<'a, D> {
-    pub fn ir(&self) -> &Vec<HfPlusLeaf> {
+    pub fn ir(&self) -> &Vec<HydroLeaf> {
         &self.ir
     }
 
@@ -412,7 +412,7 @@
         self.used = true;
 
         let mut seen_tees: HashMap<_, _> = HashMap::new();
-        let mut flow_state_networked: Vec<HfPlusLeaf> = std::mem::take(&mut self.ir)
+        let mut flow_state_networked: Vec<HydroLeaf> = std::mem::take(&mut self.ir)
             .into_iter()
             .map(|leaf| {
                 leaf.compile_network::<D>(
@@ -440,7 +440,7 @@
         let mut extra_stmts: BTreeMap<usize, Vec<syn::Stmt>> = BTreeMap::new();
         for &c_id in self.clusters.keys() {
             let self_id_ident = syn::Ident::new(
-                &format!("__hydroflow_plus_cluster_self_id_{}", c_id),
+                &format!("__hydro_lang_cluster_self_id_{}", c_id),
                 Span::call_site(),
             );
             let self_id_expr = D::cluster_self_id(env).splice_untyped();
@@ -453,7 +453,7 @@
 
             for other_location in 0..all_locations_count {
                 let other_id_ident = syn::Ident::new(
-                    &format!("__hydroflow_plus_cluster_ids_{}", c_id),
+                    &format!("__hydro_lang_cluster_ids_{}", c_id),
                     Span::call_site(),
                 );
                 let other_id_expr = D::cluster_ids(env, c_id).splice_untyped();
@@ -475,7 +475,7 @@
         self.used = true;
 
         let mut seen_tees_instantiate: HashMap<_, _> = HashMap::new();
-        let mut flow_state_networked: Vec<HfPlusLeaf> = std::mem::take(&mut self.ir)
+        let mut flow_state_networked: Vec<HydroLeaf> = std::mem::take(&mut self.ir)
             .into_iter()
             .map(|leaf| {
                 leaf.compile_network::<D>(
diff --git a/doc/src/hydroflow_plus/builder/mod.rs.html b/doc/src/hydro_lang/builder/mod.rs.html
similarity index 89%
rename from doc/src/hydroflow_plus/builder/mod.rs.html
rename to doc/src/hydro_lang/builder/mod.rs.html
index edb3b50f4d0c..e7aa4aa00bc3 100644
--- a/doc/src/hydroflow_plus/builder/mod.rs.html
+++ b/doc/src/hydro_lang/builder/mod.rs.html
@@ -1,4 +1,4 @@
-mod.rs - source
1
+mod.rs - source
1
 2
 3
 4
@@ -225,7 +225,7 @@
 
 #[cfg(feature = "build")]
 use crate::deploy::{ClusterSpec, Deploy, ExternalSpec, IntoProcessSpec, LocalDeploy};
-use crate::ir::HfPlusLeaf;
+use crate::ir::HydroLeaf;
 use crate::location::{Cluster, ExternalProcess, Process};
 use crate::staging_util::Invariant;
 
@@ -240,7 +240,7 @@
     /// Tracks the leaves of the dataflow IR. This is referenced by
     /// `Stream` and `HfCycle` to build the IR. The inner option will
     /// be set to `None` when this builder is finalized.
-    pub(crate) leaves: Option<Vec<HfPlusLeaf>>,
+    pub(crate) leaves: Option<Vec<HydroLeaf>>,
 
     /// Counter for generating unique external output identifiers.
     pub(crate) next_external_out: usize,
@@ -330,7 +330,7 @@
     #[cfg(feature = "build")]
     pub fn optimize_with(
         self,
-        f: impl FnOnce(Vec<HfPlusLeaf>) -> Vec<HfPlusLeaf>,
+        f: impl FnOnce(Vec<HydroLeaf>) -> Vec<HydroLeaf>,
     ) -> built::BuiltFlow<'a> {
         self.finalize().optimize_with(f)
     }
diff --git a/doc/src/hydroflow_plus/cycle.rs.html b/doc/src/hydro_lang/cycle.rs.html
similarity index 72%
rename from doc/src/hydroflow_plus/cycle.rs.html
rename to doc/src/hydro_lang/cycle.rs.html
index 5f827d046f27..1602d6383dae 100644
--- a/doc/src/hydroflow_plus/cycle.rs.html
+++ b/doc/src/hydro_lang/cycle.rs.html
@@ -1,4 +1,4 @@
-cycle.rs - source
1
+cycle.rs - source
1
 2
 3
 4
diff --git a/doc/src/hydroflow_plus/deploy/in_memory_graph.rs.html b/doc/src/hydro_lang/deploy/in_memory_graph.rs.html
similarity index 78%
rename from doc/src/hydroflow_plus/deploy/in_memory_graph.rs.html
rename to doc/src/hydro_lang/deploy/in_memory_graph.rs.html
index d3c804feb543..916ab8023794 100644
--- a/doc/src/hydroflow_plus/deploy/in_memory_graph.rs.html
+++ b/doc/src/hydro_lang/deploy/in_memory_graph.rs.html
@@ -1,4 +1,4 @@
-in_memory_graph.rs - source
1
+in_memory_graph.rs - source
1
 2
 3
 4
diff --git a/doc/src/hydroflow_plus/deploy/macro_runtime.rs.html b/doc/src/hydro_lang/deploy/macro_runtime.rs.html
similarity index 92%
rename from doc/src/hydroflow_plus/deploy/macro_runtime.rs.html
rename to doc/src/hydro_lang/deploy/macro_runtime.rs.html
index d9879cca2d5b..ab4ffe46763f 100644
--- a/doc/src/hydroflow_plus/deploy/macro_runtime.rs.html
+++ b/doc/src/hydro_lang/deploy/macro_runtime.rs.html
@@ -1,4 +1,4 @@
-macro_runtime.rs - source
1
+macro_runtime.rs - source
1
 2
 3
 4
diff --git a/doc/src/hydroflow_plus/deploy/mod.rs.html b/doc/src/hydro_lang/deploy/mod.rs.html
similarity index 92%
rename from doc/src/hydroflow_plus/deploy/mod.rs.html
rename to doc/src/hydro_lang/deploy/mod.rs.html
index 8b2880904b6e..14ec6f964f22 100644
--- a/doc/src/hydroflow_plus/deploy/mod.rs.html
+++ b/doc/src/hydro_lang/deploy/mod.rs.html
@@ -1,4 +1,4 @@
-mod.rs - source
1
+mod.rs - source
1
 2
 3
 4
diff --git a/doc/src/hydroflow_plus/deploy_runtime.rs.html b/doc/src/hydro_lang/deploy_runtime.rs.html
similarity index 83%
rename from doc/src/hydroflow_plus/deploy_runtime.rs.html
rename to doc/src/hydro_lang/deploy_runtime.rs.html
index 4fc29000457f..294c2b6bdc69 100644
--- a/doc/src/hydroflow_plus/deploy_runtime.rs.html
+++ b/doc/src/hydro_lang/deploy_runtime.rs.html
@@ -1,4 +1,4 @@
-deploy_runtime.rs - source
1
+deploy_runtime.rs - source
1
 2
 3
 4
diff --git a/doc/src/hydro_lang/home/runner/work/hydroflow/hydroflow/target/debug/build/hydro_lang-c5a496d5f2fb16e4/out/lib_pub.rs.html b/doc/src/hydro_lang/home/runner/work/hydroflow/hydroflow/target/debug/build/hydro_lang-c5a496d5f2fb16e4/out/lib_pub.rs.html
new file mode 100644
index 000000000000..69ba15269ae9
--- /dev/null
+++ b/doc/src/hydro_lang/home/runner/work/hydroflow/hydroflow/target/debug/build/hydro_lang-c5a496d5f2fb16e4/out/lib_pub.rs.html
@@ -0,0 +1,2 @@
+lib_pub.rs - source
1
+
pub use hydroflow ; pub use stageleft :: q ; # [doc (hidden)] pub mod runtime_support { pub use bincode ; } pub mod runtime_context { pub use hydroflow :: scheduled :: context :: Context ; pub use proc_macro2 :: TokenStream ; pub use quote :: quote ; pub use stageleft :: runtime_support :: FreeVariableWithContext ; pub use crate :: __staged :: Location ; pub use crate :: runtime_context :: RUNTIME_CONTEXT ; pub use crate :: runtime_context :: RuntimeContext ; # [cfg (stageleft_macro)] impl < 'a , L : Location < 'a > > FreeVariableWithContext < L > for RuntimeContext < 'a > { type O = & 'a Context ; fn to_tokens (self , _ctx : & L) -> (Option < TokenStream > , Option < TokenStream >) { (None , Some (quote ! (& context))) } } # [cfg (stageleft_macro)] pub mod tests { pub use hydro_deploy :: Deployment ; pub use hydroflow :: futures :: StreamExt ; pub use crate :: __staged :: * ; pub struct P1 { } # [tokio :: test] pub async fn runtime_context () { let mut deployment = Deployment :: new () ; let flow = FlowBuilder :: new () ; let node = flow . process :: < P1 > () ; let external = flow . external_process :: < () > () ; let out_port = node . source_iter (q ! (0 .. 5)) . map (q ! (| v | (v , RUNTIME_CONTEXT . current_tick () . 0))) . send_bincode_external (& external) ; let nodes = flow . with_process (& node , deployment . Localhost ()) . with_external (& external , deployment . Localhost ()) . deploy (& mut deployment) ; deployment . deploy () . await . unwrap () ; let mut external_out = nodes . connect_source_bincode (out_port) . await ; deployment . start () . await . unwrap () ; for i in 0 .. 5 { assert_eq ! (external_out . next () . await . unwrap () , (i , 0)) ; } } } } pub use runtime_context :: RUNTIME_CONTEXT ; pub mod boundedness { pub use crate :: boundedness :: Unbounded ; pub use crate :: boundedness :: Bounded ; } pub use boundedness :: { Bounded , Unbounded } ; pub mod stream { pub use std :: cell :: RefCell ; pub use std :: hash :: Hash ; pub use std :: marker :: PhantomData ; pub use std :: ops :: Deref ; pub use std :: rc :: Rc ; pub use hydroflow :: bytes :: Bytes ; pub use hydroflow :: futures ; pub use serde :: de :: DeserializeOwned ; pub use serde :: Serialize ; pub use stageleft :: { q , IntoQuotedMut , QuotedWithContext } ; pub use syn :: parse_quote ; pub use tokio :: time :: Instant ; pub use crate :: __staged :: builder :: FLOW_USED_MESSAGE ; pub use crate :: __staged :: cycle :: { CycleCollection , CycleComplete , DeferTick , ForwardRefMarker , TickCycleMarker } ; pub use crate :: __staged :: ir :: { DebugInstantiate , HydroLeaf , HydroNode , TeeNode } ; pub use crate :: __staged :: location :: cluster :: CLUSTER_SELF_ID ; pub use crate :: __staged :: location :: external_process :: { ExternalBincodeStream , ExternalBytesPort } ; pub use crate :: __staged :: location :: tick :: { NoTimestamp , Timestamped } ; pub use crate :: __staged :: location :: { check_matching_location , CanSend , ExternalProcess , Location , LocationId , NoTick , Tick , } ; pub use crate :: __staged :: staging_util :: get_this_crate ; pub use crate :: __staged :: { Bounded , Cluster , ClusterId , Optional , Process , Singleton , Unbounded } ; pub use crate :: stream :: TotalOrder ; pub use crate :: stream :: NoOrder ; pub use crate :: stream :: MinOrder ; # [cfg (stageleft_macro)] # [sealed :: sealed] impl < T > MinOrder < T > for T { type Min = T ; } # [cfg (stageleft_macro)] # [sealed :: sealed] impl MinOrder < NoOrder > for TotalOrder { type Min = NoOrder ; } # [cfg (stageleft_macro)] # [sealed :: sealed] impl MinOrder < TotalOrder > for NoOrder { type Min = NoOrder ; } pub use crate :: stream :: Stream ; # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , B > From < Stream < T , L , B , TotalOrder > > for Stream < T , L , B , NoOrder > { fn from (stream : Stream < T , L , B , TotalOrder >) -> Stream < T , L , B , NoOrder > { Stream { location : stream . location , ir_node : stream . ir_node , _phantom : PhantomData , } } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , B , Order > Stream < T , L , B , Order > { fn location_kind (& self) -> LocationId { self . location . id () } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , Order > DeferTick for Stream < T , Tick < L > , Bounded , Order > { fn defer_tick (self) -> Self { Stream :: defer_tick (self) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , Order > CycleCollection < 'a , TickCycleMarker > for Stream < T , Tick < L > , Bounded , Order > { type Location = Tick < L > ; fn create_source (ident : syn :: Ident , location : Tick < L >) -> Self { let location_id = location . id () ; Stream :: new (location , HydroNode :: CycleSource { ident , location_kind : location_id , } ,) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , Order > CycleComplete < 'a , TickCycleMarker > for Stream < T , Tick < L > , Bounded , Order > { fn complete (self , ident : syn :: Ident , expected_location : LocationId) { assert_eq ! (self . location . id () , expected_location , "locations do not match") ; self . location . flow_state () . borrow_mut () . leaves . as_mut () . expect (FLOW_USED_MESSAGE) . push (HydroLeaf :: CycleSink { ident , location_kind : self . location_kind () , input : Box :: new (self . ir_node . into_inner ()) , }) ; } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick , B , Order > CycleCollection < 'a , ForwardRefMarker > for Stream < T , L , B , Order > { type Location = L ; fn create_source (ident : syn :: Ident , location : L) -> Self { let location_id = location . id () ; Stream :: new (location , HydroNode :: Persist (Box :: new (HydroNode :: CycleSource { ident , location_kind : location_id , })) ,) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick , B , Order > CycleComplete < 'a , ForwardRefMarker > for Stream < T , L , B , Order > { fn complete (self , ident : syn :: Ident , expected_location : LocationId) { assert_eq ! (self . location . id () , expected_location , "locations do not match") ; self . location . flow_state () . borrow_mut () . leaves . as_mut () . expect (FLOW_USED_MESSAGE) . push (HydroLeaf :: CycleSink { ident , location_kind : self . location_kind () , input : Box :: new (HydroNode :: Unpersist (Box :: new (self . ir_node . into_inner ()))) , }) ; } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , B , Order > Stream < T , L , B , Order > { pub (crate) fn new (location : L , ir_node : HydroNode) -> Self { Stream { location , ir_node : RefCell :: new (ir_node) , _phantom : PhantomData , } } } # [cfg (stageleft_macro)] impl < 'a , T : Clone , L : Location < 'a > , B , Order > Clone for Stream < T , L , B , Order > { fn clone (& self) -> Self { if ! matches ! (self . ir_node . borrow () . deref () , HydroNode :: Tee { .. }) { let orig_ir_node = self . ir_node . replace (HydroNode :: Placeholder) ; * self . ir_node . borrow_mut () = HydroNode :: Tee { inner : TeeNode (Rc :: new (RefCell :: new (orig_ir_node))) , } ; } if let HydroNode :: Tee { inner } = self . ir_node . borrow () . deref () { Stream { location : self . location . clone () , ir_node : HydroNode :: Tee { inner : TeeNode (inner . 0 . clone ()) , } . into () , _phantom : PhantomData , } } else { unreachable ! () } } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , B , Order > Stream < T , L , B , Order > { pub fn map < U , F : Fn (T) -> U + 'a > (self , f : impl IntoQuotedMut < 'a , F , L > ,) -> Stream < U , L , B , Order > { let f = f . splice_fn1_ctx (& self . location) . into () ; Stream :: new (self . location , HydroNode :: Map { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn cloned (self) -> Stream < T , L , B , Order > where T : Clone , { self . map (q ! (| d | d . clone ())) } pub fn flat_map_ordered < U , I : IntoIterator < Item = U > , F : Fn (T) -> I + 'a > (self , f : impl IntoQuotedMut < 'a , F , L > ,) -> Stream < U , L , B , Order > { let f = f . splice_fn1_ctx (& self . location) . into () ; Stream :: new (self . location , HydroNode :: FlatMap { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn flat_map_unordered < U , I : IntoIterator < Item = U > , F : Fn (T) -> I + 'a > (self , f : impl IntoQuotedMut < 'a , F , L > ,) -> Stream < U , L , B , NoOrder > { let f = f . splice_fn1_ctx (& self . location) . into () ; Stream :: new (self . location , HydroNode :: FlatMap { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn flatten_ordered < U > (self) -> Stream < U , L , B , Order > where T : IntoIterator < Item = U > , { self . flat_map_ordered (q ! (| d | d)) } pub fn flatten_unordered < U > (self) -> Stream < U , L , B , NoOrder > where T : IntoIterator < Item = U > , { self . flat_map_unordered (q ! (| d | d)) } pub fn filter < F : Fn (& T) -> bool + 'a > (self , f : impl IntoQuotedMut < 'a , F , L > ,) -> Stream < T , L , B , Order > { let f = f . splice_fn1_borrow_ctx (& self . location) . into () ; Stream :: new (self . location , HydroNode :: Filter { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn filter_map < U , F : Fn (T) -> Option < U > + 'a > (self , f : impl IntoQuotedMut < 'a , F , L > ,) -> Stream < U , L , B , Order > { let f = f . splice_fn1_ctx (& self . location) . into () ; Stream :: new (self . location , HydroNode :: FilterMap { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn cross_singleton < O > (self , other : impl Into < Optional < O , L , Bounded > > ,) -> Stream < (T , O) , L , B , Order > where O : Clone , { let other : Optional < O , L , Bounded > = other . into () ; check_matching_location (& self . location , & other . location) ; Stream :: new (self . location , HydroNode :: CrossSingleton (Box :: new (self . ir_node . into_inner ()) , Box :: new (other . ir_node . into_inner ()) ,) ,) } # [doc = " Allow this stream through if the other stream has elements, otherwise the output is empty."] pub fn continue_if < U > (self , signal : Optional < U , L , Bounded >) -> Stream < T , L , B , Order > { self . cross_singleton (signal . map (q ! (| _u | ()))) . map (q ! (| (d , _signal) | d)) } # [doc = " Allow this stream through if the other stream is empty, otherwise the output is empty."] pub fn continue_unless < U > (self , other : Optional < U , L , Bounded >) -> Stream < T , L , B , Order > { self . continue_if (other . into_stream () . count () . filter (q ! (| c | * c == 0))) } pub fn cross_product < O > (self , other : Stream < O , L , B , Order >) -> Stream < (T , O) , L , B , Order > where T : Clone , O : Clone , { check_matching_location (& self . location , & other . location) ; Stream :: new (self . location , HydroNode :: CrossProduct (Box :: new (self . ir_node . into_inner ()) , Box :: new (other . ir_node . into_inner ()) ,) ,) } pub fn unique (self) -> Stream < T , L , B , Order > where T : Eq + Hash , { Stream :: new (self . location , HydroNode :: Unique (Box :: new (self . ir_node . into_inner ())) ,) } pub fn filter_not_in < O2 > (self , other : Stream < T , L , Bounded , O2 >) -> Stream < T , L , Bounded , Order > where T : Eq + Hash , { check_matching_location (& self . location , & other . location) ; Stream :: new (self . location , HydroNode :: Difference (Box :: new (self . ir_node . into_inner ()) , Box :: new (other . ir_node . into_inner ()) ,) ,) } pub fn inspect < F : Fn (& T) + 'a > (self , f : impl IntoQuotedMut < 'a , F , L > ,) -> Stream < T , L , B , Order > { let f = f . splice_fn1_borrow_ctx (& self . location) . into () ; if L :: is_top_level () { Stream :: new (self . location , HydroNode :: Persist (Box :: new (HydroNode :: Inspect { f , input : Box :: new (HydroNode :: Unpersist (Box :: new (self . ir_node . into_inner ()))) , })) ,) } else { Stream :: new (self . location , HydroNode :: Inspect { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } } # [doc = " Explicitly \"casts\" the stream to a type with a different ordering"] # [doc = " guarantee. Useful in unsafe code where the ordering cannot be proven"] # [doc = " by the type-system."] # [doc = ""] # [doc = " # Safety"] # [doc = " This function is used as an escape hatch, and any mistakes in the"] # [doc = " provided ordering guarantee will propogate into the guarantees"] # [doc = " for the rest of the program."] pub unsafe fn assume_ordering < O > (self) -> Stream < T , L , B , O > { Stream :: new (self . location , self . ir_node . into_inner ()) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , B , Order > Stream < T , L , B , Order > where Order : MinOrder < NoOrder , Min = NoOrder > , { pub fn fold_commutative < A , I : Fn () -> A + 'a , F : Fn (& mut A , T) > (self , init : impl IntoQuotedMut < 'a , I , L > , comb : impl IntoQuotedMut < 'a , F , L > ,) -> Singleton < A , L , B > { let init = init . splice_fn0_ctx (& self . location) . into () ; let comb = comb . splice_fn2_borrow_mut_ctx (& self . location) . into () ; let mut core = HydroNode :: Fold { init , acc : comb , input : Box :: new (self . ir_node . into_inner ()) , } ; if L :: is_top_level () { core = HydroNode :: Persist (Box :: new (core)) ; } Singleton :: new (self . location , core) } pub fn reduce_commutative < F : Fn (& mut T , T) + 'a > (self , comb : impl IntoQuotedMut < 'a , F , L > ,) -> Optional < T , L , B > { let f = comb . splice_fn2_borrow_mut_ctx (& self . location) . into () ; let mut core = HydroNode :: Reduce { f , input : Box :: new (self . ir_node . into_inner ()) , } ; if L :: is_top_level () { core = HydroNode :: Persist (Box :: new (core)) ; } Optional :: new (self . location , core) } pub fn max (self) -> Optional < T , L , B > where T : Ord , { self . reduce_commutative (q ! (| curr , new | { if new > * curr { * curr = new ; } })) } pub fn max_by_key < K : Ord , F : Fn (& T) -> K + 'a > (self , key : impl IntoQuotedMut < 'a , F , L > + Copy ,) -> Optional < T , L , B > { let f = key . splice_fn1_borrow_ctx (& self . location) ; let wrapped : syn :: Expr = parse_quote ! ({ let key_fn = # f ; move | curr , new | { if key_fn (& new) > key_fn (&* curr) { * curr = new ; } } }) ; let mut core = HydroNode :: Reduce { f : wrapped . into () , input : Box :: new (self . ir_node . into_inner ()) , } ; if L :: is_top_level () { core = HydroNode :: Persist (Box :: new (core)) ; } Optional :: new (self . location , core) } pub fn min (self) -> Optional < T , L , B > where T : Ord , { self . reduce_commutative (q ! (| curr , new | { if new < * curr { * curr = new ; } })) } pub fn count (self) -> Singleton < usize , L , B > { self . fold_commutative (q ! (|| 0usize) , q ! (| count , _ | * count += 1)) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , B > Stream < T , L , B , TotalOrder > { pub fn enumerate (self) -> Stream < (usize , T) , L , B , TotalOrder > { if L :: is_top_level () { Stream :: new (self . location , HydroNode :: Persist (Box :: new (HydroNode :: Enumerate { is_static : true , input : Box :: new (HydroNode :: Unpersist (Box :: new (self . ir_node . into_inner ()))) , })) ,) } else { Stream :: new (self . location , HydroNode :: Enumerate { is_static : false , input : Box :: new (self . ir_node . into_inner ()) , } ,) } } pub fn first (self) -> Optional < T , L , B > { Optional :: new (self . location , self . ir_node . into_inner ()) } pub fn last (self) -> Optional < T , L , B > { self . reduce (q ! (| curr , new | * curr = new)) } pub fn fold < A , I : Fn () -> A + 'a , F : Fn (& mut A , T) > (self , init : impl IntoQuotedMut < 'a , I , L > , comb : impl IntoQuotedMut < 'a , F , L > ,) -> Singleton < A , L , B > { let init = init . splice_fn0_ctx (& self . location) . into () ; let comb = comb . splice_fn2_borrow_mut_ctx (& self . location) . into () ; let mut core = HydroNode :: Fold { init , acc : comb , input : Box :: new (self . ir_node . into_inner ()) , } ; if L :: is_top_level () { core = HydroNode :: Persist (Box :: new (core)) ; } Singleton :: new (self . location , core) } pub fn reduce < F : Fn (& mut T , T) + 'a > (self , comb : impl IntoQuotedMut < 'a , F , L > ,) -> Optional < T , L , B > { let f = comb . splice_fn2_borrow_mut_ctx (& self . location) . into () ; let mut core = HydroNode :: Reduce { f , input : Box :: new (self . ir_node . into_inner ()) , } ; if L :: is_top_level () { core = HydroNode :: Persist (Box :: new (core)) ; } Optional :: new (self . location , core) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > Stream < T , L , Bounded , TotalOrder > { pub fn chain (self , other : Stream < T , L , Bounded , TotalOrder > ,) -> Stream < T , L , Bounded , TotalOrder > { check_matching_location (& self . location , & other . location) ; Stream :: new (self . location , HydroNode :: Chain (Box :: new (self . ir_node . into_inner ()) , Box :: new (other . ir_node . into_inner ()) ,) ,) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick + NoTimestamp > Stream < T , L , Unbounded , NoOrder > { pub fn union (self , other : Stream < T , L , Unbounded , NoOrder > ,) -> Stream < T , L , Unbounded , NoOrder > { let tick = self . location . tick () ; unsafe { self . timestamped (& tick) . tick_batch () . union (other . timestamped (& tick) . tick_batch ()) . all_ticks () . drop_timestamp () } } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , Order > Stream < T , L , Bounded , Order > { pub fn sort (self) -> Stream < T , L , Bounded , TotalOrder > where T : Ord , { Stream :: new (self . location , HydroNode :: Sort (Box :: new (self . ir_node . into_inner ())) ,) } pub fn union < B2 , O2 > (self , other : Stream < T , L , B2 , O2 >) -> Stream < T , L , B2 , Order :: Min > where Order : MinOrder < O2 > , { check_matching_location (& self . location , & other . location) ; Stream :: new (self . location , HydroNode :: Chain (Box :: new (self . ir_node . into_inner ()) , Box :: new (other . ir_node . into_inner ()) ,) ,) } } # [cfg (stageleft_macro)] impl < 'a , K , V1 , L : Location < 'a > , B , Order > Stream < (K , V1) , L , B , Order > { pub fn join < V2 , O2 > (self , n : Stream < (K , V2) , L , B , O2 >) -> Stream < (K , (V1 , V2)) , L , B , NoOrder > where K : Eq + Hash , { check_matching_location (& self . location , & n . location) ; Stream :: new (self . location , HydroNode :: Join (Box :: new (self . ir_node . into_inner ()) , Box :: new (n . ir_node . into_inner ()) ,) ,) } pub fn anti_join < O2 > (self , n : Stream < K , L , Bounded , O2 >) -> Stream < (K , V1) , L , B , Order > where K : Eq + Hash , { check_matching_location (& self . location , & n . location) ; Stream :: new (self . location , HydroNode :: AntiJoin (Box :: new (self . ir_node . into_inner ()) , Box :: new (n . ir_node . into_inner ()) ,) ,) } } # [cfg (stageleft_macro)] impl < 'a , K : Eq + Hash , V , L : Location < 'a > > Stream < (K , V) , Tick < L > , Bounded > { pub fn fold_keyed < A , I : Fn () -> A + 'a , F : Fn (& mut A , V) + 'a > (self , init : impl IntoQuotedMut < 'a , I , Tick < L > > , comb : impl IntoQuotedMut < 'a , F , Tick < L > > ,) -> Stream < (K , A) , Tick < L > , Bounded > { let init = init . splice_fn0_ctx (& self . location) . into () ; let comb = comb . splice_fn2_borrow_mut_ctx (& self . location) . into () ; Stream :: new (self . location , HydroNode :: FoldKeyed { init , acc : comb , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn reduce_keyed < F : Fn (& mut V , V) + 'a > (self , comb : impl IntoQuotedMut < 'a , F , Tick < L > > ,) -> Stream < (K , V) , Tick < L > , Bounded > { let f = comb . splice_fn2_borrow_mut_ctx (& self . location) . into () ; Stream :: new (self . location , HydroNode :: ReduceKeyed { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } } # [cfg (stageleft_macro)] impl < 'a , K : Eq + Hash , V , L : Location < 'a > , Order > Stream < (K , V) , Tick < L > , Bounded , Order > { pub fn fold_keyed_commutative < A , I : Fn () -> A + 'a , F : Fn (& mut A , V) + 'a > (self , init : impl IntoQuotedMut < 'a , I , Tick < L > > , comb : impl IntoQuotedMut < 'a , F , Tick < L > > ,) -> Stream < (K , A) , Tick < L > , Bounded , Order > { let init = init . splice_fn0_ctx (& self . location) . into () ; let comb = comb . splice_fn2_borrow_mut_ctx (& self . location) . into () ; Stream :: new (self . location , HydroNode :: FoldKeyed { init , acc : comb , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn keys (self) -> Stream < K , Tick < L > , Bounded , Order > { self . fold_keyed_commutative (q ! (|| ()) , q ! (| _ , _ | { })) . map (q ! (| (k , _) | k)) } pub fn reduce_keyed_commutative < F : Fn (& mut V , V) + 'a > (self , comb : impl IntoQuotedMut < 'a , F , Tick < L > > ,) -> Stream < (K , V) , Tick < L > , Bounded , Order > { let f = comb . splice_fn2_borrow_mut_ctx (& self . location) . into () ; Stream :: new (self . location , HydroNode :: ReduceKeyed { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick , B , Order > Stream < T , Timestamped < L > , B , Order > { # [doc = " Given a tick, returns a stream corresponding to a batch of elements for that tick."] # [doc = " These batches are guaranteed to be contiguous across ticks and preserve the order"] # [doc = " of the input."] # [doc = ""] # [doc = " # Safety"] # [doc = " The batch boundaries are non-deterministic and may change across executions."] pub unsafe fn tick_batch (self) -> Stream < T , Tick < L > , Bounded , Order > { Stream :: new (self . location . tick , HydroNode :: Unpersist (Box :: new (self . ir_node . into_inner ())) ,) } pub fn drop_timestamp (self) -> Stream < T , L , B , Order > { Stream :: new (self . location . tick . l , self . ir_node . into_inner ()) } pub fn timestamp_source (& self) -> Tick < L > { self . location . tick . clone () } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick + NoTimestamp , B , Order > Stream < T , L , B , Order > { pub fn timestamped (self , tick : & Tick < L >) -> Stream < T , Timestamped < L > , B , Order > { Stream :: new (Timestamped { tick : tick . clone () } , self . ir_node . into_inner () ,) } # [doc = " Given a time interval, returns a stream corresponding to samples taken from the"] # [doc = " stream roughly at that interval. The output will have elements in the same order"] # [doc = " as the input, but with arbitrary elements skipped between samples. There is also"] # [doc = " no guarantee on the exact timing of the samples."] # [doc = ""] # [doc = " # Safety"] # [doc = " The output stream is non-deterministic in which elements are sampled, since this"] # [doc = " is controlled by a clock."] pub unsafe fn sample_every (self , interval : impl QuotedWithContext < 'a , std :: time :: Duration , L > + Copy + 'a ,) -> Stream < T , L , Unbounded , Order > { let samples = unsafe { self . location . source_interval (interval) } ; let tick = self . location . tick () ; unsafe { self . timestamped (& tick) . tick_batch () . continue_if (samples . timestamped (& tick) . tick_batch () . first ()) . all_ticks () . drop_timestamp () } } # [doc = " Given a timeout duration, returns an [`Optional`]  which will have a value if the"] # [doc = " stream has not emitted a value since that duration."] # [doc = ""] # [doc = " # Safety"] # [doc = " Timeout relies on non-deterministic sampling of the stream, so depending on when"] # [doc = " samples take place, timeouts may be non-deterministically generated or missed,"] # [doc = " and the notification of the timeout may be delayed as well. There is also no"] # [doc = " guarantee on how long the [`Optional`] will have a value after the timeout is"] # [doc = " detected based on when the next sample is taken."] pub unsafe fn timeout (self , duration : impl QuotedWithContext < 'a , std :: time :: Duration , Tick < L > > + Copy + 'a ,) -> Optional < () , L , Unbounded > where Order : MinOrder < NoOrder , Min = NoOrder > , { let tick = self . location . tick () ; let latest_received = self . fold_commutative (q ! (|| None) , q ! (| latest , _ | { * latest = Some (Instant :: now ()) ; }) ,) ; unsafe { latest_received . timestamped (& tick) . latest_tick () } . filter_map (q ! (move | latest_received | { if let Some (latest_received) = latest_received { if Instant :: now () . duration_since (latest_received) > duration { Some (()) } else { None } } else { Some (()) } })) . latest () . drop_timestamp () } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick , B , Order > Stream < T , L , B , Order > { pub fn for_each < F : Fn (T) + 'a > (self , f : impl IntoQuotedMut < 'a , F , L >) { let f = f . splice_fn1_ctx (& self . location) . into () ; self . location . flow_state () . borrow_mut () . leaves . as_mut () . expect (FLOW_USED_MESSAGE) . push (HydroLeaf :: ForEach { input : Box :: new (HydroNode :: Unpersist (Box :: new (self . ir_node . into_inner ()))) , f , }) ; } pub fn dest_sink < S : Unpin + futures :: Sink < T > + 'a > (self , sink : impl QuotedWithContext < 'a , S , L > ,) { self . location . flow_state () . borrow_mut () . leaves . as_mut () . expect (FLOW_USED_MESSAGE) . push (HydroLeaf :: DestSink { sink : sink . splice_typed_ctx (& self . location) . into () , input : Box :: new (self . ir_node . into_inner ()) , }) ; } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , Order > Stream < T , Tick < L > , Bounded , Order > { pub fn all_ticks (self) -> Stream < T , Timestamped < L > , Unbounded , Order > { Stream :: new (Timestamped { tick : self . location . clone () , } , HydroNode :: Persist (Box :: new (self . ir_node . into_inner ())) ,) } pub fn persist (self) -> Stream < T , Tick < L > , Bounded , Order > where T : Clone , { Stream :: new (self . location , HydroNode :: Persist (Box :: new (self . ir_node . into_inner ())) ,) } pub fn defer_tick (self) -> Stream < T , Tick < L > , Bounded , Order > { Stream :: new (self . location , HydroNode :: DeferTick (Box :: new (self . ir_node . into_inner ())) ,) } pub fn delta (self) -> Stream < T , Tick < L > , Bounded , Order > { Stream :: new (self . location , HydroNode :: Delta (Box :: new (self . ir_node . into_inner ())) ,) } } pub fn serialize_bincode < T : Serialize > (is_demux : bool) -> syn :: Expr { let root = get_this_crate () ; let t_type : syn :: Type = stageleft :: quote_type :: < T > () ; if is_demux { parse_quote ! { | (id , data) : (# root :: ClusterId < _ >, # t_type) | { (id . raw_id , # root :: runtime_support :: bincode :: serialize ::<# t_type > (& data) . unwrap () . into ()) } } } else { parse_quote ! { | data | { # root :: runtime_support :: bincode :: serialize ::<# t_type > (& data) . unwrap () . into () } } } } pub fn deserialize_bincode < T : DeserializeOwned > (tagged : Option < syn :: Type >) -> syn :: Expr { let root = get_this_crate () ; let t_type : syn :: Type = stageleft :: quote_type :: < T > () ; if let Some (c_type) = tagged { parse_quote ! { | res | { let (id , b) = res . unwrap () ; (# root :: ClusterId ::<# c_type >:: from_raw (id) , # root :: runtime_support :: bincode :: deserialize ::<# t_type > (& b) . unwrap ()) } } } else { parse_quote ! { | res | { # root :: runtime_support :: bincode :: deserialize ::<# t_type > (& res . unwrap ()) . unwrap () } } } } # [cfg (stageleft_macro)] impl < 'a , T , C1 , B , Order > Stream < T , Cluster < 'a , C1 > , B , Order > { pub fn decouple_cluster < C2 : 'a , Tag > (self , other : & Cluster < 'a , C2 > ,) -> Stream < T , Cluster < 'a , C2 > , Unbounded , Order > where Cluster < 'a , C1 > : Location < 'a , Root = Cluster < 'a , C1 > > , Cluster < 'a , C1 > : CanSend < 'a , Cluster < 'a , C2 > , In < T > = (ClusterId < C2 > , T) , Out < T > = (Tag , T) > , T : Clone + Serialize + DeserializeOwned , Order : MinOrder < < Cluster < 'a , C1 > as CanSend < 'a , Cluster < 'a , C2 > > > :: OutStrongestOrder < Order > > , { let sent = self . map (q ! (move | b | (ClusterId :: from_raw (CLUSTER_SELF_ID . raw_id) , b . clone ()))) . send_bincode_interleaved (other) ; unsafe { sent . assume_ordering () } } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick , B , Order > Stream < T , L , B , Order > { pub fn decouple_process < P2 > (self , other : & Process < 'a , P2 > ,) -> Stream < T , Process < 'a , P2 > , Unbounded , Order > where L :: Root : CanSend < 'a , Process < 'a , P2 > , In < T > = T , Out < T > = T > , T : Clone + Serialize + DeserializeOwned , Order : MinOrder < < L :: Root as CanSend < 'a , Process < 'a , P2 > > > :: OutStrongestOrder < Order > , Min = Order , > , { self . send_bincode :: < Process < 'a , P2 > , T > (other) } pub fn send_bincode < L2 : Location < 'a > , CoreType > (self , other : & L2 ,) -> Stream < < L :: Root as CanSend < 'a , L2 > > :: Out < CoreType > , L2 , Unbounded , Order :: Min > where L :: Root : CanSend < 'a , L2 , In < CoreType > = T > , CoreType : Serialize + DeserializeOwned , Order : MinOrder < < L :: Root as CanSend < 'a , L2 > > :: OutStrongestOrder < Order > > , { let serialize_pipeline = Some (serialize_bincode :: < CoreType > (L :: Root :: is_demux ())) ; let deserialize_pipeline = Some (deserialize_bincode :: < CoreType > (L :: Root :: tagged_type ())) ; Stream :: new (other . clone () , HydroNode :: Network { from_location : self . location . root () . id () , from_key : None , to_location : other . id () , to_key : None , serialize_fn : serialize_pipeline . map (| e | e . into ()) , instantiate_fn : DebugInstantiate :: Building () , deserialize_fn : deserialize_pipeline . map (| e | e . into ()) , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn send_bincode_external < L2 : 'a , CoreType > (self , other : & ExternalProcess < L2 > ,) -> ExternalBincodeStream < L :: Out < CoreType > > where L : CanSend < 'a , ExternalProcess < 'a , L2 > , In < CoreType > = T , Out < CoreType > = CoreType > , CoreType : Serialize + DeserializeOwned , { let serialize_pipeline = Some (serialize_bincode :: < CoreType > (L :: is_demux ())) ; let mut flow_state_borrow = self . location . flow_state () . borrow_mut () ; let external_key = flow_state_borrow . next_external_out ; flow_state_borrow . next_external_out += 1 ; let leaves = flow_state_borrow . leaves . as_mut () . expect ("Attempted to add a leaf to a flow that has already been finalized. No leaves can be added after the flow has been compiled()") ; let dummy_f : syn :: Expr = syn :: parse_quote ! (()) ; leaves . push (HydroLeaf :: ForEach { f : dummy_f . into () , input : Box :: new (HydroNode :: Network { from_location : self . location . root () . id () , from_key : None , to_location : other . id () , to_key : Some (external_key) , serialize_fn : serialize_pipeline . map (| e | e . into ()) , instantiate_fn : DebugInstantiate :: Building () , deserialize_fn : None , input : Box :: new (self . ir_node . into_inner ()) , }) , }) ; ExternalBincodeStream { process_id : other . id , port_id : external_key , _phantom : PhantomData , } } pub fn send_bytes < L2 : Location < 'a > > (self , other : & L2 ,) -> Stream < < L :: Root as CanSend < 'a , L2 > > :: Out < Bytes > , L2 , Unbounded , Order :: Min > where L :: Root : CanSend < 'a , L2 , In < Bytes > = T > , Order : MinOrder < < L :: Root as CanSend < 'a , L2 > > :: OutStrongestOrder < Order > > , { let root = get_this_crate () ; Stream :: new (other . clone () , HydroNode :: Network { from_location : self . location . root () . id () , from_key : None , to_location : other . id () , to_key : None , serialize_fn : None , instantiate_fn : DebugInstantiate :: Building () , deserialize_fn : if let Some (c_type) = L :: Root :: tagged_type () { let expr : syn :: Expr = parse_quote ! (| (id , b) | (# root :: ClusterId <# c_type >:: from_raw (id) , b . unwrap () . freeze ())) ; Some (expr . into ()) } else { let expr : syn :: Expr = parse_quote ! (| b | b . unwrap () . freeze ()) ; Some (expr . into ()) } , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn send_bytes_external < L2 : 'a > (self , other : & ExternalProcess < L2 >) -> ExternalBytesPort where L :: Root : CanSend < 'a , ExternalProcess < 'a , L2 > , In < Bytes > = T , Out < Bytes > = Bytes > , { let mut flow_state_borrow = self . location . flow_state () . borrow_mut () ; let external_key = flow_state_borrow . next_external_out ; flow_state_borrow . next_external_out += 1 ; let leaves = flow_state_borrow . leaves . as_mut () . expect ("Attempted to add a leaf to a flow that has already been finalized. No leaves can be added after the flow has been compiled()") ; let dummy_f : syn :: Expr = syn :: parse_quote ! (()) ; leaves . push (HydroLeaf :: ForEach { f : dummy_f . into () , input : Box :: new (HydroNode :: Network { from_location : self . location . root () . id () , from_key : None , to_location : other . id () , to_key : Some (external_key) , serialize_fn : None , instantiate_fn : DebugInstantiate :: Building () , deserialize_fn : None , input : Box :: new (self . ir_node . into_inner ()) , }) , }) ; ExternalBytesPort { process_id : other . id , port_id : external_key , } } pub fn send_bincode_interleaved < L2 : Location < 'a > , Tag , CoreType > (self , other : & L2 ,) -> Stream < CoreType , L2 , Unbounded , Order :: Min > where L :: Root : CanSend < 'a , L2 , In < CoreType > = T , Out < CoreType > = (Tag , CoreType) > , CoreType : Serialize + DeserializeOwned , Order : MinOrder < < L :: Root as CanSend < 'a , L2 > > :: OutStrongestOrder < Order > > , { self . send_bincode :: < L2 , CoreType > (other) . map (q ! (| (_ , b) | b)) } pub fn send_bytes_interleaved < L2 : Location < 'a > , Tag > (self , other : & L2 ,) -> Stream < Bytes , L2 , Unbounded , Order :: Min > where L :: Root : CanSend < 'a , L2 , In < Bytes > = T , Out < Bytes > = (Tag , Bytes) > , Order : MinOrder < < L :: Root as CanSend < 'a , L2 > > :: OutStrongestOrder < Order > > , { self . send_bytes :: < L2 > (other) . map (q ! (| (_ , b) | b)) } # [expect (clippy :: type_complexity , reason = "ordering semantics for broadcast")] pub fn broadcast_bincode < C2 : 'a > (self , other : & Cluster < 'a , C2 > ,) -> Stream < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: Out < T > , Cluster < 'a , C2 > , Unbounded , Order :: Min , > where L :: Root : CanSend < 'a , Cluster < 'a , C2 > , In < T > = (ClusterId < C2 > , T) > , T : Clone + Serialize + DeserializeOwned , Order : MinOrder < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: OutStrongestOrder < Order > > , { let ids = other . members () ; self . flat_map_ordered (q ! (| b | ids . iter () . map (move | id | (:: std :: clone :: Clone :: clone (id) , :: std :: clone :: Clone :: clone (& b))))) . send_bincode (other) } pub fn broadcast_bincode_interleaved < C2 : 'a , Tag > (self , other : & Cluster < 'a , C2 > ,) -> Stream < T , Cluster < 'a , C2 > , Unbounded , Order :: Min > where L :: Root : CanSend < 'a , Cluster < 'a , C2 > , In < T > = (ClusterId < C2 > , T) , Out < T > = (Tag , T) > + 'a , T : Clone + Serialize + DeserializeOwned , Order : MinOrder < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: OutStrongestOrder < Order > > , { self . broadcast_bincode (other) . map (q ! (| (_ , b) | b)) } # [expect (clippy :: type_complexity , reason = "ordering semantics for broadcast")] pub fn broadcast_bytes < C2 : 'a > (self , other : & Cluster < 'a , C2 > ,) -> Stream < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: Out < Bytes > , Cluster < 'a , C2 > , Unbounded , Order :: Min , > where L :: Root : CanSend < 'a , Cluster < 'a , C2 > , In < Bytes > = (ClusterId < C2 > , T) > + 'a , T : Clone , Order : MinOrder < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: OutStrongestOrder < Order > > , { let ids = other . members () ; self . flat_map_ordered (q ! (| b | ids . iter () . map (move | id | (:: std :: clone :: Clone :: clone (id) , :: std :: clone :: Clone :: clone (& b))))) . send_bytes (other) } pub fn broadcast_bytes_interleaved < C2 : 'a , Tag > (self , other : & Cluster < 'a , C2 > ,) -> Stream < Bytes , Cluster < 'a , C2 > , Unbounded , Order :: Min > where L :: Root : CanSend < 'a , Cluster < 'a , C2 > , In < Bytes > = (ClusterId < C2 > , T) , Out < Bytes > = (Tag , Bytes) > + 'a , T : Clone , Order : MinOrder < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: OutStrongestOrder < Order > > , { self . broadcast_bytes (other) . map (q ! (| (_ , b) | b)) } } # [cfg (stageleft_macro)] # [expect (clippy :: type_complexity , reason = "ordering semantics for round-robin")] impl < 'a , T , L : Location < 'a > + NoTick , B > Stream < T , L , B , TotalOrder > { pub fn round_robin_bincode < C2 : 'a > (self , other : & Cluster < 'a , C2 > ,) -> Stream < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: Out < T > , Cluster < 'a , C2 > , Unbounded , < TotalOrder as MinOrder < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: OutStrongestOrder < TotalOrder > , > > :: Min , > where L :: Root : CanSend < 'a , Cluster < 'a , C2 > , In < T > = (ClusterId < C2 > , T) > , T : Clone + Serialize + DeserializeOwned , TotalOrder : MinOrder < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: OutStrongestOrder < TotalOrder > > , { let ids = other . members () ; self . enumerate () . map (q ! (| (i , w) | (ids [i % ids . len ()] , w))) . send_bincode (other) } pub fn round_robin_bincode_interleaved < C2 : 'a , Tag > (self , other : & Cluster < 'a , C2 > ,) -> Stream < T , Cluster < 'a , C2 > , Unbounded , < TotalOrder as MinOrder < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: OutStrongestOrder < TotalOrder > , > > :: Min , > where L :: Root : CanSend < 'a , Cluster < 'a , C2 > , In < T > = (ClusterId < C2 > , T) , Out < T > = (Tag , T) > + 'a , T : Clone + Serialize + DeserializeOwned , TotalOrder : MinOrder < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: OutStrongestOrder < TotalOrder > > , { self . round_robin_bincode (other) . map (q ! (| (_ , b) | b)) } pub fn round_robin_bytes < C2 : 'a > (self , other : & Cluster < 'a , C2 > ,) -> Stream < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: Out < Bytes > , Cluster < 'a , C2 > , Unbounded , < TotalOrder as MinOrder < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: OutStrongestOrder < TotalOrder > , > > :: Min , > where L :: Root : CanSend < 'a , Cluster < 'a , C2 > , In < Bytes > = (ClusterId < C2 > , T) > + 'a , T : Clone , TotalOrder : MinOrder < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: OutStrongestOrder < TotalOrder > > , { let ids = other . members () ; self . enumerate () . map (q ! (| (i , w) | (ids [i % ids . len ()] , w))) . send_bytes (other) } pub fn round_robin_bytes_interleaved < C2 : 'a , Tag > (self , other : & Cluster < 'a , C2 > ,) -> Stream < Bytes , Cluster < 'a , C2 > , Unbounded , < TotalOrder as MinOrder < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: OutStrongestOrder < TotalOrder > , > > :: Min , > where L :: Root : CanSend < 'a , Cluster < 'a , C2 > , In < Bytes > = (ClusterId < C2 > , T) , Out < Bytes > = (Tag , Bytes) > + 'a , T : Clone , TotalOrder : MinOrder < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: OutStrongestOrder < TotalOrder > > , { self . round_robin_bytes (other) . map (q ! (| (_ , b) | b)) } } # [cfg (stageleft_macro)] pub mod tests { pub use hydro_deploy :: Deployment ; pub use hydroflow :: futures :: StreamExt ; pub use serde :: { Deserialize , Serialize } ; pub use stageleft :: q ; pub use crate :: __staged :: location :: Location ; pub use crate :: __staged :: FlowBuilder ; pub struct P1 { } pub struct P2 { } # [derive (Serialize , Deserialize , Debug)] pub struct SendOverNetwork { pub n : u32 , } # [tokio :: test] pub async fn first_ten_distributed () { let mut deployment = Deployment :: new () ; let flow = FlowBuilder :: new () ; let first_node = flow . process :: < P1 > () ; let second_node = flow . process :: < P2 > () ; let external = flow . external_process :: < P2 > () ; let numbers = first_node . source_iter (q ! (0 .. 10)) ; let out_port = numbers . map (q ! (| n | SendOverNetwork { n })) . send_bincode (& second_node) . send_bincode_external (& external) ; let nodes = flow . with_process (& first_node , deployment . Localhost ()) . with_process (& second_node , deployment . Localhost ()) . with_external (& external , deployment . Localhost ()) . deploy (& mut deployment) ; deployment . deploy () . await . unwrap () ; let mut external_out = nodes . connect_source_bincode (out_port) . await ; deployment . start () . await . unwrap () ; for i in 0 .. 10 { assert_eq ! (external_out . next () . await . unwrap () . n , i) ; } } } } pub use stream :: { NoOrder , Stream , TotalOrder } ; pub mod singleton { pub use std :: cell :: RefCell ; pub use std :: marker :: PhantomData ; pub use std :: ops :: Deref ; pub use std :: rc :: Rc ; pub use stageleft :: { q , IntoQuotedMut , QuotedWithContext } ; pub use crate :: __staged :: builder :: FLOW_USED_MESSAGE ; pub use crate :: __staged :: cycle :: { CycleCollection , CycleCollectionWithInitial , CycleComplete , DeferTick , ForwardRefMarker , TickCycleMarker , } ; pub use crate :: __staged :: ir :: { HydroLeaf , HydroNode , TeeNode } ; pub use crate :: __staged :: location :: tick :: { NoTimestamp , Timestamped } ; pub use crate :: __staged :: location :: { check_matching_location , Location , LocationId , NoTick , Tick } ; pub use crate :: __staged :: { Bounded , Optional , Stream , Unbounded } ; pub use crate :: singleton :: Singleton ; # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , B > Singleton < T , L , B > { pub (crate) fn new (location : L , ir_node : HydroNode) -> Self { Singleton { location , ir_node : RefCell :: new (ir_node) , _phantom : PhantomData , } } fn location_kind (& self) -> LocationId { self . location . id () } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > From < Singleton < T , L , Bounded > > for Singleton < T , L , Unbounded > { fn from (singleton : Singleton < T , L , Bounded >) -> Self { Singleton :: new (singleton . location , singleton . ir_node . into_inner ()) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > DeferTick for Singleton < T , Tick < L > , Bounded > { fn defer_tick (self) -> Self { Singleton :: defer_tick (self) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > CycleCollectionWithInitial < 'a , TickCycleMarker > for Singleton < T , Tick < L > , Bounded > { type Location = Tick < L > ; fn create_source (ident : syn :: Ident , initial : Self , location : Tick < L >) -> Self { let location_id = location . id () ; Singleton :: new (location , HydroNode :: Chain (Box :: new (HydroNode :: CycleSource { ident , location_kind : location_id , }) , initial . ir_node . into_inner () . into () ,) ,) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > CycleComplete < 'a , TickCycleMarker > for Singleton < T , Tick < L > , Bounded > { fn complete (self , ident : syn :: Ident , expected_location : LocationId) { assert_eq ! (self . location . id () , expected_location , "locations do not match") ; self . location . flow_state () . borrow_mut () . leaves . as_mut () . expect (FLOW_USED_MESSAGE) . push (HydroLeaf :: CycleSink { ident , location_kind : self . location_kind () , input : Box :: new (self . ir_node . into_inner ()) , }) ; } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > CycleCollection < 'a , ForwardRefMarker > for Singleton < T , Tick < L > , Bounded > { type Location = Tick < L > ; fn create_source (ident : syn :: Ident , location : Tick < L >) -> Self { let location_id = location . id () ; Singleton :: new (location , HydroNode :: CycleSource { ident , location_kind : location_id , } ,) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > CycleComplete < 'a , ForwardRefMarker > for Singleton < T , Tick < L > , Bounded > { fn complete (self , ident : syn :: Ident , expected_location : LocationId) { assert_eq ! (self . location . id () , expected_location , "locations do not match") ; self . location . flow_state () . borrow_mut () . leaves . as_mut () . expect (FLOW_USED_MESSAGE) . push (HydroLeaf :: CycleSink { ident , location_kind : self . location_kind () , input : Box :: new (self . ir_node . into_inner ()) , }) ; } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick , B > CycleCollection < 'a , ForwardRefMarker > for Singleton < T , L , B > { type Location = L ; fn create_source (ident : syn :: Ident , location : L) -> Self { let location_id = location . id () ; Singleton :: new (location , HydroNode :: Persist (Box :: new (HydroNode :: CycleSource { ident , location_kind : location_id , })) ,) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick , B > CycleComplete < 'a , ForwardRefMarker > for Singleton < T , L , B > { fn complete (self , ident : syn :: Ident , expected_location : LocationId) { assert_eq ! (self . location . id () , expected_location , "locations do not match") ; self . location . flow_state () . borrow_mut () . leaves . as_mut () . expect (FLOW_USED_MESSAGE) . push (HydroLeaf :: CycleSink { ident , location_kind : self . location_kind () , input : Box :: new (HydroNode :: Unpersist (Box :: new (self . ir_node . into_inner ()))) , }) ; } } # [cfg (stageleft_macro)] impl < 'a , T : Clone , L : Location < 'a > , B > Clone for Singleton < T , L , B > { fn clone (& self) -> Self { if ! matches ! (self . ir_node . borrow () . deref () , HydroNode :: Tee { .. }) { let orig_ir_node = self . ir_node . replace (HydroNode :: Placeholder) ; * self . ir_node . borrow_mut () = HydroNode :: Tee { inner : TeeNode (Rc :: new (RefCell :: new (orig_ir_node))) , } ; } if let HydroNode :: Tee { inner } = self . ir_node . borrow () . deref () { Singleton { location : self . location . clone () , ir_node : HydroNode :: Tee { inner : TeeNode (inner . 0 . clone ()) , } . into () , _phantom : PhantomData , } } else { unreachable ! () } } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , B > Singleton < T , L , B > { pub fn map < U , F : Fn (T) -> U + 'a > (self , f : impl IntoQuotedMut < 'a , F , L >) -> Singleton < U , L , B > { let f = f . splice_fn1_ctx (& self . location) . into () ; Singleton :: new (self . location , HydroNode :: Map { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn flat_map_ordered < U , I : IntoIterator < Item = U > , F : Fn (T) -> I + 'a > (self , f : impl IntoQuotedMut < 'a , F , L > ,) -> Stream < U , L , B > { let f = f . splice_fn1_ctx (& self . location) . into () ; Stream :: new (self . location , HydroNode :: FlatMap { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn flat_map_unordered < U , I : IntoIterator < Item = U > , F : Fn (T) -> I + 'a > (self , f : impl IntoQuotedMut < 'a , F , L > ,) -> Stream < U , L , B > { let f = f . splice_fn1_ctx (& self . location) . into () ; Stream :: new (self . location , HydroNode :: FlatMap { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn filter < F : Fn (& T) -> bool + 'a > (self , f : impl IntoQuotedMut < 'a , F , L > ,) -> Optional < T , L , B > { let f = f . splice_fn1_borrow_ctx (& self . location) . into () ; Optional :: new (self . location , HydroNode :: Filter { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn filter_map < U , F : Fn (T) -> Option < U > + 'a > (self , f : impl IntoQuotedMut < 'a , F , L > ,) -> Optional < U , L , B > { let f = f . splice_fn1_ctx (& self . location) . into () ; Optional :: new (self . location , HydroNode :: FilterMap { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn zip < Other > (self , other : Other) -> < Self as ZipResult < 'a , Other > > :: Out where Self : ZipResult < 'a , Other , Location = L > , { check_matching_location (& self . location , & Self :: other_location (& other)) ; if L :: is_top_level () { Self :: make (self . location , HydroNode :: Persist (Box :: new (HydroNode :: CrossSingleton (Box :: new (HydroNode :: Unpersist (Box :: new (self . ir_node . into_inner ()))) , Box :: new (HydroNode :: Unpersist (Box :: new (Self :: other_ir_node (other)))) ,))) ,) } else { Self :: make (self . location , HydroNode :: CrossSingleton (Box :: new (self . ir_node . into_inner ()) , Box :: new (Self :: other_ir_node (other)) ,) ,) } } pub fn continue_if < U > (self , signal : Optional < U , L , Bounded >) -> Optional < T , L , Bounded > where Self : ZipResult < 'a , Optional < () , L , Bounded > , Location = L , Out = Optional < (T , ()) , L , Bounded > , > , { self . zip (signal . map (q ! (| _u | ()))) . map (q ! (| (d , _signal) | d)) } pub fn continue_unless < U > (self , other : Optional < U , L , Bounded >) -> Optional < T , L , Bounded > where Singleton < T , L , B > : ZipResult < 'a , Optional < () , L , Bounded > , Location = L , Out = Optional < (T , ()) , L , Bounded > , > , { self . continue_if (other . into_stream () . count () . filter (q ! (| c | * c == 0))) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick , B > Singleton < T , Timestamped < L > , B > { # [doc = " Given a tick, returns a singleton value corresponding to a snapshot of the singleton"] # [doc = " as of that tick. The snapshot at tick `t + 1` is guaranteed to include at least all"] # [doc = " relevant data that contributed to the snapshot at tick `t`."] # [doc = ""] # [doc = " # Safety"] # [doc = " Because this picks a snapshot of a singleton whose value is continuously changing,"] # [doc = " the output singleton has a non-deterministic value since the snapshot can be at an"] # [doc = " arbitrary point in time."] pub unsafe fn latest_tick (self) -> Singleton < T , Tick < L > , Bounded > { Singleton :: new (self . location . tick , HydroNode :: Unpersist (Box :: new (self . ir_node . into_inner ())) ,) } pub fn drop_timestamp (self) -> Optional < T , L , B > { Optional :: new (self . location . tick . l , self . ir_node . into_inner ()) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick , B > Singleton < T , L , B > { pub fn timestamped (self , tick : & Tick < L >) -> Singleton < T , Timestamped < L > , B > { Singleton :: new (Timestamped { tick : tick . clone () } , self . ir_node . into_inner () ,) } # [doc = " Eagerly samples the singleton as fast as possible, returning a stream of snapshots"] # [doc = " with order corresponding to increasing prefixes of data contributing to the singleton."] # [doc = ""] # [doc = " # Safety"] # [doc = " At runtime, the singleton will be arbitrarily sampled as fast as possible, but due"] # [doc = " to non-deterministic batching and arrival of inputs, the output stream is"] # [doc = " non-deterministic."] pub unsafe fn sample_eager (self) -> Stream < T , L , Unbounded > { let tick = self . location . tick () ; unsafe { self . timestamped (& tick) . latest_tick () . all_ticks () . drop_timestamp () } } # [doc = " Given a time interval, returns a stream corresponding to snapshots of the singleton"] # [doc = " value taken at various points in time. Because the input singleton may be"] # [doc = " [`Unbounded`], there are no guarantees on what these snapshots are other than they"] # [doc = " represent the value of the singleton given some prefix of the streams leading up to"] # [doc = " it."] # [doc = ""] # [doc = " # Safety"] # [doc = " The output stream is non-deterministic in which elements are sampled, since this"] # [doc = " is controlled by a clock."] pub unsafe fn sample_every (self , interval : impl QuotedWithContext < 'a , std :: time :: Duration , L > + Copy + 'a ,) -> Stream < T , L , Unbounded > where L : NoTimestamp , { let samples = unsafe { self . location . source_interval (interval) } ; let tick = self . location . tick () ; unsafe { self . timestamped (& tick) . latest_tick () . continue_if (samples . timestamped (& tick) . tick_batch () . first ()) . all_ticks () . drop_timestamp () } } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > Singleton < T , Tick < L > , Bounded > { pub fn all_ticks (self) -> Stream < T , Timestamped < L > , Unbounded > { Stream :: new (Timestamped { tick : self . location , } , HydroNode :: Persist (Box :: new (self . ir_node . into_inner ())) ,) } pub fn latest (self) -> Singleton < T , Timestamped < L > , Unbounded > { Singleton :: new (Timestamped { tick : self . location , } , HydroNode :: Persist (Box :: new (self . ir_node . into_inner ())) ,) } pub fn defer_tick (self) -> Singleton < T , Tick < L > , Bounded > { Singleton :: new (self . location , HydroNode :: DeferTick (Box :: new (self . ir_node . into_inner ())) ,) } pub fn persist (self) -> Stream < T , Tick < L > , Bounded > { Stream :: new (self . location , HydroNode :: Persist (Box :: new (self . ir_node . into_inner ())) ,) } pub fn delta (self) -> Optional < T , Tick < L > , Bounded > { Optional :: new (self . location , HydroNode :: Delta (Box :: new (self . ir_node . into_inner ())) ,) } pub fn into_stream (self) -> Stream < T , Tick < L > , Bounded > { Stream :: new (self . location , self . ir_node . into_inner ()) } } pub use crate :: singleton :: ZipResult ; # [cfg (stageleft_macro)] impl < 'a , T , U : Clone , L : Location < 'a > , B > ZipResult < 'a , Singleton < U , Timestamped < L > , B > > for Singleton < T , Timestamped < L > , B > { type Out = Singleton < (T , U) , Timestamped < L > , B > ; type Location = Timestamped < L > ; fn other_location (other : & Singleton < U , Timestamped < L > , B >) -> Timestamped < L > { other . location . clone () } fn other_ir_node (other : Singleton < U , Timestamped < L > , B >) -> HydroNode { other . ir_node . into_inner () } fn make (location : Timestamped < L > , ir_node : HydroNode) -> Self :: Out { Singleton :: new (location , ir_node) } } # [cfg (stageleft_macro)] impl < 'a , T , U : Clone , L : Location < 'a > , B > ZipResult < 'a , Optional < U , Timestamped < L > , B > > for Singleton < T , Timestamped < L > , B > { type Out = Optional < (T , U) , Timestamped < L > , B > ; type Location = Timestamped < L > ; fn other_location (other : & Optional < U , Timestamped < L > , B >) -> Timestamped < L > { other . location . clone () } fn other_ir_node (other : Optional < U , Timestamped < L > , B >) -> HydroNode { other . ir_node . into_inner () } fn make (location : Timestamped < L > , ir_node : HydroNode) -> Self :: Out { Optional :: new (location , ir_node) } } # [cfg (stageleft_macro)] impl < 'a , T , U : Clone , L : Location < 'a > , B > ZipResult < 'a , Singleton < U , Tick < L > , B > > for Singleton < T , Tick < L > , B > { type Out = Singleton < (T , U) , Tick < L > , B > ; type Location = Tick < L > ; fn other_location (other : & Singleton < U , Tick < L > , B >) -> Tick < L > { other . location . clone () } fn other_ir_node (other : Singleton < U , Tick < L > , B >) -> HydroNode { other . ir_node . into_inner () } fn make (location : Tick < L > , ir_node : HydroNode) -> Self :: Out { Singleton :: new (location , ir_node) } } # [cfg (stageleft_macro)] impl < 'a , T , U : Clone , L : Location < 'a > , B > ZipResult < 'a , Optional < U , Tick < L > , B > > for Singleton < T , Tick < L > , B > { type Out = Optional < (T , U) , Tick < L > , B > ; type Location = Tick < L > ; fn other_location (other : & Optional < U , Tick < L > , B >) -> Tick < L > { other . location . clone () } fn other_ir_node (other : Optional < U , Tick < L > , B >) -> HydroNode { other . ir_node . into_inner () } fn make (location : Tick < L > , ir_node : HydroNode) -> Self :: Out { Optional :: new (location , ir_node) } } } pub use singleton :: Singleton ; pub mod optional { pub use std :: cell :: RefCell ; pub use std :: marker :: PhantomData ; pub use std :: ops :: Deref ; pub use std :: rc :: Rc ; pub use stageleft :: { q , IntoQuotedMut , QuotedWithContext } ; pub use syn :: parse_quote ; pub use crate :: __staged :: builder :: FLOW_USED_MESSAGE ; pub use crate :: __staged :: cycle :: { CycleCollection , CycleComplete , DeferTick , ForwardRefMarker , TickCycleMarker } ; pub use crate :: __staged :: ir :: { HydroLeaf , HydroNode , HydroSource , TeeNode } ; pub use crate :: __staged :: location :: tick :: { NoTimestamp , Timestamped } ; pub use crate :: __staged :: location :: { check_matching_location , LocationId , NoTick } ; pub use crate :: __staged :: singleton :: ZipResult ; pub use crate :: __staged :: stream :: NoOrder ; pub use crate :: __staged :: { Bounded , Location , Singleton , Stream , Tick , Unbounded } ; pub use crate :: optional :: Optional ; # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , B > Optional < T , L , B > { pub (crate) fn new (location : L , ir_node : HydroNode) -> Self { Optional { location , ir_node : RefCell :: new (ir_node) , _phantom : PhantomData , } } pub fn some (singleton : Singleton < T , L , B >) -> Self { Optional :: new (singleton . location , singleton . ir_node . into_inner ()) } fn location_kind (& self) -> LocationId { self . location . id () } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > DeferTick for Optional < T , Tick < L > , Bounded > { fn defer_tick (self) -> Self { Optional :: defer_tick (self) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > CycleCollection < 'a , TickCycleMarker > for Optional < T , Tick < L > , Bounded > { type Location = Tick < L > ; fn create_source (ident : syn :: Ident , location : Tick < L >) -> Self { let location_id = location . id () ; Optional :: new (location , HydroNode :: CycleSource { ident , location_kind : location_id , } ,) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > CycleComplete < 'a , TickCycleMarker > for Optional < T , Tick < L > , Bounded > { fn complete (self , ident : syn :: Ident , expected_location : LocationId) { assert_eq ! (self . location . id () , expected_location , "locations do not match") ; self . location . flow_state () . borrow_mut () . leaves . as_mut () . expect (FLOW_USED_MESSAGE) . push (HydroLeaf :: CycleSink { ident , location_kind : self . location_kind () , input : Box :: new (self . ir_node . into_inner ()) , }) ; } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > CycleCollection < 'a , ForwardRefMarker > for Optional < T , Tick < L > , Bounded > { type Location = Tick < L > ; fn create_source (ident : syn :: Ident , location : Tick < L >) -> Self { let location_id = location . id () ; Optional :: new (location , HydroNode :: CycleSource { ident , location_kind : location_id , } ,) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > CycleComplete < 'a , ForwardRefMarker > for Optional < T , Tick < L > , Bounded > { fn complete (self , ident : syn :: Ident , expected_location : LocationId) { assert_eq ! (self . location . id () , expected_location , "locations do not match") ; self . location . flow_state () . borrow_mut () . leaves . as_mut () . expect (FLOW_USED_MESSAGE) . push (HydroLeaf :: CycleSink { ident , location_kind : self . location_kind () , input : Box :: new (self . ir_node . into_inner ()) , }) ; } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick , B > CycleCollection < 'a , ForwardRefMarker > for Optional < T , L , B > { type Location = L ; fn create_source (ident : syn :: Ident , location : L) -> Self { let location_id = location . id () ; Optional :: new (location , HydroNode :: Persist (Box :: new (HydroNode :: CycleSource { ident , location_kind : location_id , })) ,) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick , B > CycleComplete < 'a , ForwardRefMarker > for Optional < T , L , B > { fn complete (self , ident : syn :: Ident , expected_location : LocationId) { assert_eq ! (self . location . id () , expected_location , "locations do not match") ; self . location . flow_state () . borrow_mut () . leaves . as_mut () . expect (FLOW_USED_MESSAGE) . push (HydroLeaf :: CycleSink { ident , location_kind : self . location_kind () , input : Box :: new (HydroNode :: Unpersist (Box :: new (self . ir_node . into_inner ()))) , }) ; } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > From < Optional < T , L , Bounded > > for Optional < T , L , Unbounded > { fn from (singleton : Optional < T , L , Bounded >) -> Self { Optional :: new (singleton . location , singleton . ir_node . into_inner ()) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , B > From < Singleton < T , L , B > > for Optional < T , L , B > { fn from (singleton : Singleton < T , L , B >) -> Self { Optional :: some (singleton) } } # [cfg (stageleft_macro)] impl < 'a , T : Clone , L : Location < 'a > , B > Clone for Optional < T , L , B > { fn clone (& self) -> Self { if ! matches ! (self . ir_node . borrow () . deref () , HydroNode :: Tee { .. }) { let orig_ir_node = self . ir_node . replace (HydroNode :: Placeholder) ; * self . ir_node . borrow_mut () = HydroNode :: Tee { inner : TeeNode (Rc :: new (RefCell :: new (orig_ir_node))) , } ; } if let HydroNode :: Tee { inner } = self . ir_node . borrow () . deref () { Optional { location : self . location . clone () , ir_node : HydroNode :: Tee { inner : TeeNode (inner . 0 . clone ()) , } . into () , _phantom : PhantomData , } } else { unreachable ! () } } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , B > Optional < T , L , B > { pub fn map < U , F : Fn (T) -> U + 'a > (self , f : impl IntoQuotedMut < 'a , F , L >) -> Optional < U , L , B > { let f = f . splice_fn1_ctx (& self . location) . into () ; Optional :: new (self . location , HydroNode :: Map { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn flat_map_ordered < U , I : IntoIterator < Item = U > , F : Fn (T) -> I + 'a > (self , f : impl IntoQuotedMut < 'a , F , L > ,) -> Stream < U , L , B > { let f = f . splice_fn1_ctx (& self . location) . into () ; Stream :: new (self . location , HydroNode :: FlatMap { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn flat_map_unordered < U , I : IntoIterator < Item = U > , F : Fn (T) -> I + 'a > (self , f : impl IntoQuotedMut < 'a , F , L > ,) -> Stream < U , L , B , NoOrder > { let f = f . splice_fn1_ctx (& self . location) . into () ; Stream :: new (self . location , HydroNode :: FlatMap { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn flatten_ordered < U > (self) -> Stream < U , L , B > where T : IntoIterator < Item = U > , { self . flat_map_ordered (q ! (| v | v)) } pub fn flatten_unordered < U > (self) -> Stream < U , L , B , NoOrder > where T : IntoIterator < Item = U > , { self . flat_map_unordered (q ! (| v | v)) } pub fn filter < F : Fn (& T) -> bool + 'a > (self , f : impl IntoQuotedMut < 'a , F , L > ,) -> Optional < T , L , B > { let f = f . splice_fn1_borrow_ctx (& self . location) . into () ; Optional :: new (self . location , HydroNode :: Filter { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn filter_map < U , F : Fn (T) -> Option < U > + 'a > (self , f : impl IntoQuotedMut < 'a , F , L > ,) -> Optional < U , L , B > { let f = f . splice_fn1_ctx (& self . location) . into () ; Optional :: new (self . location , HydroNode :: FilterMap { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn union (self , other : Optional < T , L , B >) -> Optional < T , L , B > { check_matching_location (& self . location , & other . location) ; if L :: is_top_level () { Optional :: new (self . location , HydroNode :: Persist (Box :: new (HydroNode :: Chain (Box :: new (HydroNode :: Unpersist (Box :: new (self . ir_node . into_inner ()))) , Box :: new (HydroNode :: Unpersist (Box :: new (other . ir_node . into_inner ()))) ,))) ,) } else { Optional :: new (self . location , HydroNode :: Chain (Box :: new (self . ir_node . into_inner ()) , Box :: new (other . ir_node . into_inner ()) ,) ,) } } pub fn zip < O > (self , other : impl Into < Optional < O , L , B > >) -> Optional < (T , O) , L , B > where O : Clone , { let other : Optional < O , L , B > = other . into () ; check_matching_location (& self . location , & other . location) ; if L :: is_top_level () { Optional :: new (self . location , HydroNode :: Persist (Box :: new (HydroNode :: CrossSingleton (Box :: new (HydroNode :: Unpersist (Box :: new (self . ir_node . into_inner ()))) , Box :: new (HydroNode :: Unpersist (Box :: new (other . ir_node . into_inner ()))) ,))) ,) } else { Optional :: new (self . location , HydroNode :: CrossSingleton (Box :: new (self . ir_node . into_inner ()) , Box :: new (other . ir_node . into_inner ()) ,) ,) } } pub fn unwrap_or (self , other : Singleton < T , L , B >) -> Singleton < T , L , B > { check_matching_location (& self . location , & other . location) ; if L :: is_top_level () { Singleton :: new (self . location , HydroNode :: Persist (Box :: new (HydroNode :: Chain (Box :: new (HydroNode :: Unpersist (Box :: new (self . ir_node . into_inner ()))) , Box :: new (HydroNode :: Unpersist (Box :: new (other . ir_node . into_inner ()))) ,))) ,) } else { Singleton :: new (self . location , HydroNode :: Chain (Box :: new (self . ir_node . into_inner ()) , Box :: new (other . ir_node . into_inner ()) ,) ,) } } pub fn into_singleton (self) -> Singleton < Option < T > , L , B > where T : Clone , { let none : syn :: Expr = parse_quote ! ([:: std :: option :: Option :: None]) ; let core_ir = HydroNode :: Persist (Box :: new (HydroNode :: Source { source : HydroSource :: Iter (none . into ()) , location_kind : self . location . id () . root () . clone () , })) ; let none_singleton = if L :: is_top_level () { Singleton :: new (self . location . clone () , HydroNode :: Persist (Box :: new (core_ir))) } else { Singleton :: new (self . location . clone () , core_ir) } ; self . map (q ! (| v | Some (v))) . unwrap_or (none_singleton) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > Optional < T , L , Bounded > { pub fn continue_if < U > (self , signal : Optional < U , L , Bounded >) -> Optional < T , L , Bounded > { self . zip (signal . map (q ! (| _u | ()))) . map (q ! (| (d , _signal) | d)) } pub fn continue_unless < U > (self , other : Optional < U , L , Bounded >) -> Optional < T , L , Bounded > { self . continue_if (other . into_stream () . count () . filter (q ! (| c | * c == 0))) } pub fn then < U > (self , value : Singleton < U , L , Bounded >) -> Optional < U , L , Bounded > where Singleton < U , L , Bounded > : ZipResult < 'a , Optional < () , L , Bounded > , Location = L , Out = Optional < (U , ()) , L , Bounded > , > , { value . continue_if (self) } pub fn into_stream (self) -> Stream < T , L , Bounded > { if L :: is_top_level () { panic ! ("Converting an optional to a stream is not yet supported at the top level") ; } Stream :: new (self . location , self . ir_node . into_inner ()) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick , B > Optional < T , Timestamped < L > , B > { # [doc = " Given a tick, returns a optional value corresponding to a snapshot of the optional"] # [doc = " as of that tick. The snapshot at tick `t + 1` is guaranteed to include at least all"] # [doc = " relevant data that contributed to the snapshot at tick `t`."] # [doc = ""] # [doc = " # Safety"] # [doc = " Because this picks a snapshot of a optional whose value is continuously changing,"] # [doc = " the output optional has a non-deterministic value since the snapshot can be at an"] # [doc = " arbitrary point in time."] pub unsafe fn latest_tick (self) -> Optional < T , Tick < L > , Bounded > { Optional :: new (self . location . tick , HydroNode :: Unpersist (Box :: new (self . ir_node . into_inner ())) ,) } pub fn drop_timestamp (self) -> Optional < T , L , B > { Optional :: new (self . location . tick . l , self . ir_node . into_inner ()) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick , B > Optional < T , L , B > { pub fn timestamped (self , tick : & Tick < L >) -> Optional < T , Timestamped < L > , B > { Optional :: new (Timestamped { tick : tick . clone () } , self . ir_node . into_inner () ,) } # [doc = " Eagerly samples the optional as fast as possible, returning a stream of snapshots"] # [doc = " with order corresponding to increasing prefixes of data contributing to the optional."] # [doc = ""] # [doc = " # Safety"] # [doc = " At runtime, the optional will be arbitrarily sampled as fast as possible, but due"] # [doc = " to non-deterministic batching and arrival of inputs, the output stream is"] # [doc = " non-deterministic."] pub unsafe fn sample_eager (self) -> Stream < T , L , Unbounded > { let tick = self . location . tick () ; unsafe { self . timestamped (& tick) . latest_tick () . all_ticks () . drop_timestamp () } } # [doc = " Given a time interval, returns a stream corresponding to snapshots of the optional"] # [doc = " value taken at various points in time. Because the input optional may be"] # [doc = " [`Unbounded`], there are no guarantees on what these snapshots are other than they"] # [doc = " represent the value of the optional given some prefix of the streams leading up to"] # [doc = " it."] # [doc = ""] # [doc = " # Safety"] # [doc = " The output stream is non-deterministic in which elements are sampled, since this"] # [doc = " is controlled by a clock."] pub unsafe fn sample_every (self , interval : impl QuotedWithContext < 'a , std :: time :: Duration , L > + Copy + 'a ,) -> Stream < T , L , Unbounded > where L : NoTimestamp , { let samples = unsafe { self . location . source_interval (interval) } ; let tick = self . location . tick () ; unsafe { self . timestamped (& tick) . latest_tick () . continue_if (samples . timestamped (& tick) . tick_batch () . first ()) . all_ticks () . drop_timestamp () } } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > Optional < T , Tick < L > , Bounded > { pub fn all_ticks (self) -> Stream < T , Timestamped < L > , Unbounded > { Stream :: new (Timestamped { tick : self . location , } , HydroNode :: Persist (Box :: new (self . ir_node . into_inner ())) ,) } pub fn latest (self) -> Optional < T , Timestamped < L > , Unbounded > { Optional :: new (Timestamped { tick : self . location , } , HydroNode :: Persist (Box :: new (self . ir_node . into_inner ())) ,) } pub fn defer_tick (self) -> Optional < T , Tick < L > , Bounded > { Optional :: new (self . location , HydroNode :: DeferTick (Box :: new (self . ir_node . into_inner ())) ,) } pub fn persist (self) -> Stream < T , Tick < L > , Bounded > { Stream :: new (self . location , HydroNode :: Persist (Box :: new (self . ir_node . into_inner ())) ,) } pub fn delta (self) -> Optional < T , Tick < L > , Bounded > { Optional :: new (self . location , HydroNode :: Delta (Box :: new (self . ir_node . into_inner ())) ,) } } } pub use optional :: Optional ; pub mod location { pub use std :: fmt :: Debug ; pub use std :: marker :: PhantomData ; pub use std :: time :: Duration ; pub use hydroflow :: futures :: stream :: Stream as FuturesStream ; pub use hydroflow :: { tokio , tokio_stream } ; pub use proc_macro2 :: Span ; pub use stageleft :: { q , QuotedWithContext } ; pub use super :: builder :: FlowState ; pub use crate :: __staged :: cycle :: { CycleCollection , ForwardRef , ForwardRefMarker } ; pub use crate :: __staged :: ir :: { HydroNode , HydroSource } ; pub use crate :: __staged :: { Singleton , Stream , Unbounded } ; pub mod external_process { pub use std :: marker :: PhantomData ; pub use hydroflow :: bytes :: Bytes ; pub use serde :: de :: DeserializeOwned ; pub use serde :: Serialize ; pub use super :: { Location , LocationId , NoTick } ; pub use crate :: __staged :: builder :: FlowState ; pub use crate :: __staged :: ir :: { HydroNode , HydroSource } ; pub use crate :: __staged :: staging_util :: Invariant ; pub use crate :: __staged :: { Stream , Unbounded } ; pub use crate :: location :: external_process :: ExternalBytesPort ; pub use crate :: location :: external_process :: ExternalBincodeSink ; pub use crate :: location :: external_process :: ExternalBincodeStream ; pub use crate :: location :: external_process :: ExternalProcess ; # [cfg (stageleft_macro)] impl < P > Clone for ExternalProcess < '_ , P > { fn clone (& self) -> Self { ExternalProcess { id : self . id , flow_state : self . flow_state . clone () , _phantom : PhantomData , } } } # [cfg (stageleft_macro)] impl < 'a , P > Location < 'a > for ExternalProcess < 'a , P > { type Root = Self ; fn root (& self) -> Self :: Root { self . clone () } fn id (& self) -> LocationId { LocationId :: ExternalProcess (self . id) } fn flow_state (& self) -> & FlowState { & self . flow_state } fn is_top_level () -> bool { true } } # [cfg (stageleft_macro)] impl < 'a , P > ExternalProcess < 'a , P > { pub fn source_external_bytes < L : Location < 'a > + NoTick > (& self , to : & L ,) -> (ExternalBytesPort , Stream < Bytes , L , Unbounded >) { let next_external_port_id = { let mut flow_state = self . flow_state . borrow_mut () ; let id = flow_state . next_external_out ; flow_state . next_external_out += 1 ; id } ; let deser_expr : syn :: Expr = syn :: parse_quote ! (| b | b . unwrap () . freeze ()) ; (ExternalBytesPort { process_id : self . id , port_id : next_external_port_id , } , Stream :: new (to . clone () , HydroNode :: Persist (Box :: new (HydroNode :: Network { from_location : LocationId :: ExternalProcess (self . id) , from_key : Some (next_external_port_id) , to_location : to . id () , to_key : None , serialize_fn : None , instantiate_fn : crate :: ir :: DebugInstantiate :: Building () , deserialize_fn : Some (deser_expr . into ()) , input : Box :: new (HydroNode :: Source { source : HydroSource :: ExternalNetwork () , location_kind : LocationId :: ExternalProcess (self . id) , }) , })) ,) ,) } pub fn source_external_bincode < L : Location < 'a > + NoTick , T : Serialize + DeserializeOwned > (& self , to : & L ,) -> (ExternalBincodeSink < T > , Stream < T , L , Unbounded >) { let next_external_port_id = { let mut flow_state = self . flow_state . borrow_mut () ; let id = flow_state . next_external_out ; flow_state . next_external_out += 1 ; id } ; (ExternalBincodeSink { process_id : self . id , port_id : next_external_port_id , _phantom : PhantomData , } , Stream :: new (to . clone () , HydroNode :: Persist (Box :: new (HydroNode :: Network { from_location : LocationId :: ExternalProcess (self . id) , from_key : Some (next_external_port_id) , to_location : to . id () , to_key : None , serialize_fn : None , instantiate_fn : crate :: ir :: DebugInstantiate :: Building () , deserialize_fn : Some (crate :: stream :: deserialize_bincode :: < T > (None) . into ()) , input : Box :: new (HydroNode :: Source { source : HydroSource :: ExternalNetwork () , location_kind : LocationId :: ExternalProcess (self . id) , }) , })) ,) ,) } } } pub use external_process :: ExternalProcess ; pub mod process { pub use std :: marker :: PhantomData ; pub use super :: { Location , LocationId } ; pub use crate :: __staged :: builder :: FlowState ; pub use crate :: __staged :: staging_util :: Invariant ; pub use crate :: location :: process :: Process ; # [cfg (stageleft_macro)] impl < P > Clone for Process < '_ , P > { fn clone (& self) -> Self { Process { id : self . id , flow_state : self . flow_state . clone () , _phantom : PhantomData , } } } # [cfg (stageleft_macro)] impl < 'a , P > Location < 'a > for Process < 'a , P > { type Root = Self ; fn root (& self) -> Self :: Root { self . clone () } fn id (& self) -> LocationId { LocationId :: Process (self . id) } fn flow_state (& self) -> & FlowState { & self . flow_state } fn is_top_level () -> bool { true } } } pub use process :: Process ; pub mod cluster { pub use std :: marker :: PhantomData ; pub use proc_macro2 :: { Span , TokenStream } ; pub use quote :: quote ; pub use stageleft :: runtime_support :: FreeVariableWithContext ; pub use stageleft :: { quote_type , QuotedWithContext } ; pub use super :: { Location , LocationId } ; pub use crate :: __staged :: builder :: FlowState ; pub use crate :: __staged :: staging_util :: { get_this_crate , Invariant } ; pub mod cluster_id { pub use std :: fmt :: { Debug , Display } ; pub use std :: hash :: Hash ; pub use std :: marker :: PhantomData ; pub use serde :: { Deserialize , Serialize } ; pub use crate :: location :: cluster :: cluster_id :: ClusterId ; # [cfg (stageleft_macro)] impl < C > Debug for ClusterId < C > { fn fmt (& self , f : & mut std :: fmt :: Formatter < '_ >) -> std :: fmt :: Result { write ! (f , "ClusterId::<{}>({})" , std :: any :: type_name ::< C > () , self . raw_id) } } # [cfg (stageleft_macro)] impl < C > Display for ClusterId < C > { fn fmt (& self , f : & mut std :: fmt :: Formatter < '_ >) -> std :: fmt :: Result { write ! (f , "ClusterId::<{}>({})" , std :: any :: type_name ::< C > () , self . raw_id) } } # [cfg (stageleft_macro)] impl < C > Clone for ClusterId < C > { fn clone (& self) -> Self { * self } } # [cfg (stageleft_macro)] impl < C > Copy for ClusterId < C > { } # [cfg (stageleft_macro)] impl < C > Serialize for ClusterId < C > { fn serialize < S > (& self , serializer : S) -> Result < S :: Ok , S :: Error > where S : serde :: ser :: Serializer , { self . raw_id . serialize (serializer) } } # [cfg (stageleft_macro)] impl < 'de , C > Deserialize < 'de > for ClusterId < C > { fn deserialize < D > (deserializer : D) -> Result < Self , D :: Error > where D : serde :: de :: Deserializer < 'de > , { u32 :: deserialize (deserializer) . map (| id | ClusterId { raw_id : id , _phantom : PhantomData , }) } } # [cfg (stageleft_macro)] impl < C > PartialEq for ClusterId < C > { fn eq (& self , other : & Self) -> bool { self . raw_id == other . raw_id } } # [cfg (stageleft_macro)] impl < C > Eq for ClusterId < C > { } # [cfg (stageleft_macro)] impl < C > Hash for ClusterId < C > { fn hash < H : std :: hash :: Hasher > (& self , state : & mut H) { self . raw_id . hash (state) } } # [cfg (stageleft_macro)] impl < C > ClusterId < C > { pub fn from_raw (id : u32) -> Self { ClusterId { raw_id : id , _phantom : PhantomData , } } } } pub use cluster_id :: ClusterId ; pub use crate :: location :: cluster :: Cluster ; pub use crate :: location :: cluster :: IsCluster ; # [cfg (stageleft_macro)] impl < C > IsCluster for Cluster < '_ , C > { type Tag = C ; } # [cfg (stageleft_macro)] impl < 'a , C > Cluster < 'a , C > { pub fn members (& self) -> ClusterIds < 'a , C > { ClusterIds { id : self . id , _phantom : PhantomData , } } } # [cfg (stageleft_macro)] impl < C > Clone for Cluster < '_ , C > { fn clone (& self) -> Self { Cluster { id : self . id , flow_state : self . flow_state . clone () , _phantom : PhantomData , } } } # [cfg (stageleft_macro)] impl < 'a , C > Location < 'a > for Cluster < 'a , C > { type Root = Cluster < 'a , C > ; fn root (& self) -> Self :: Root { self . clone () } fn id (& self) -> LocationId { LocationId :: Cluster (self . id) } fn flow_state (& self) -> & FlowState { & self . flow_state } fn is_top_level () -> bool { true } } pub use crate :: location :: cluster :: ClusterIds ; # [cfg (stageleft_macro)] impl < C > Clone for ClusterIds < '_ , C > { fn clone (& self) -> Self { * self } } # [cfg (stageleft_macro)] impl < C > Copy for ClusterIds < '_ , C > { } # [cfg (stageleft_macro)] impl < 'a , C : 'a , Ctx > FreeVariableWithContext < Ctx > for ClusterIds < 'a , C > { type O = & 'a Vec < ClusterId < C > > ; fn to_tokens (self , _ctx : & Ctx) -> (Option < TokenStream > , Option < TokenStream >) where Self : Sized , { let ident = syn :: Ident :: new (& format ! ("__hydro_lang_cluster_ids_{}" , self . id) , Span :: call_site () ,) ; let root = get_this_crate () ; let c_type = quote_type :: < C > () ; (None , Some (quote ! { unsafe { :: std :: mem :: transmute ::< _ , &:: std :: vec :: Vec <# root :: ClusterId <# c_type >>> (# ident) } } ,) ,) } } # [cfg (stageleft_macro)] impl < 'a , C , Ctx > QuotedWithContext < 'a , & 'a Vec < ClusterId < C > > , Ctx > for ClusterIds < 'a , C > { } pub use crate :: location :: cluster :: CLUSTER_SELF_ID ; pub use crate :: location :: cluster :: ClusterSelfId ; # [cfg (stageleft_macro)] impl < 'a , L : Location < 'a > > FreeVariableWithContext < L > for ClusterSelfId < 'a > where < L as Location < 'a > > :: Root : IsCluster , { type O = ClusterId < < < L as Location < 'a > > :: Root as IsCluster > :: Tag > ; fn to_tokens (self , ctx : & L) -> (Option < TokenStream > , Option < TokenStream >) where Self : Sized , { let cluster_id = if let LocationId :: Cluster (id) = ctx . root () . id () { id } else { unreachable ! () } ; let ident = syn :: Ident :: new (& format ! ("__hydro_lang_cluster_self_id_{}" , cluster_id) , Span :: call_site () ,) ; let root = get_this_crate () ; let c_type : syn :: Type = quote_type :: < < < L as Location < 'a > > :: Root as IsCluster > :: Tag > () ; (None , Some (quote ! { # root :: ClusterId ::<# c_type >:: from_raw (# ident) }) ,) } } # [cfg (stageleft_macro)] impl < 'a , L : Location < 'a > > QuotedWithContext < 'a , ClusterId < < < L as Location < 'a > > :: Root as IsCluster > :: Tag > , L > for ClusterSelfId < 'a > where < L as Location < 'a > > :: Root : IsCluster , { } } pub use cluster :: { Cluster , ClusterId } ; pub mod can_send { pub use stageleft :: quote_type ; pub use super :: { Cluster , ClusterId , ExternalProcess , Location , Process } ; pub use crate :: __staged :: stream :: NoOrder ; pub use crate :: location :: can_send :: CanSend ; # [cfg (stageleft_macro)] impl < 'a , P1 , P2 > CanSend < 'a , Process < 'a , P2 > > for Process < 'a , P1 > { type In < T > = T ; type Out < T > = T ; type OutStrongestOrder < InOrder > = InOrder ; fn is_demux () -> bool { false } fn tagged_type () -> Option < syn :: Type > { None } } # [cfg (stageleft_macro)] impl < 'a , P1 , C2 > CanSend < 'a , Cluster < 'a , C2 > > for Process < 'a , P1 > { type In < T > = (ClusterId < C2 > , T) ; type Out < T > = T ; type OutStrongestOrder < InOrder > = InOrder ; fn is_demux () -> bool { true } fn tagged_type () -> Option < syn :: Type > { None } } # [cfg (stageleft_macro)] impl < 'a , C1 , P2 > CanSend < 'a , Process < 'a , P2 > > for Cluster < 'a , C1 > { type In < T > = T ; type Out < T > = (ClusterId < C1 > , T) ; type OutStrongestOrder < InOrder > = NoOrder ; fn is_demux () -> bool { false } fn tagged_type () -> Option < syn :: Type > { Some (quote_type :: < C1 > ()) } } # [cfg (stageleft_macro)] impl < 'a , C1 , C2 > CanSend < 'a , Cluster < 'a , C2 > > for Cluster < 'a , C1 > { type In < T > = (ClusterId < C2 > , T) ; type Out < T > = (ClusterId < C1 > , T) ; type OutStrongestOrder < InOrder > = NoOrder ; fn is_demux () -> bool { true } fn tagged_type () -> Option < syn :: Type > { Some (quote_type :: < C1 > ()) } } # [cfg (stageleft_macro)] impl < 'a , P1 , E2 > CanSend < 'a , ExternalProcess < 'a , E2 > > for Process < 'a , P1 > { type In < T > = T ; type Out < T > = T ; type OutStrongestOrder < InOrder > = InOrder ; fn is_demux () -> bool { false } fn tagged_type () -> Option < syn :: Type > { None } } } pub use can_send :: CanSend ; pub mod tick { pub use std :: marker :: PhantomData ; pub use proc_macro2 :: Span ; pub use sealed :: sealed ; pub use stageleft :: { q , QuotedWithContext } ; pub use super :: { Cluster , Location , LocationId , Process } ; pub use crate :: __staged :: builder :: FlowState ; pub use crate :: __staged :: cycle :: { CycleCollection , CycleCollectionWithInitial , DeferTick , ForwardRef , ForwardRefMarker , TickCycle , TickCycleMarker , } ; pub use crate :: __staged :: ir :: { HydroNode , HydroSource } ; pub use crate :: __staged :: { Bounded , Optional , Singleton , Stream } ; pub use crate :: location :: tick :: NoTick ; # [cfg (stageleft_macro)] # [sealed] impl < T > NoTick for Process < '_ , T > { } # [cfg (stageleft_macro)] # [sealed] impl < T > NoTick for Cluster < '_ , T > { } pub use crate :: location :: tick :: NoTimestamp ; # [cfg (stageleft_macro)] # [sealed] impl < T > NoTimestamp for Process < '_ , T > { } # [cfg (stageleft_macro)] # [sealed] impl < T > NoTimestamp for Cluster < '_ , T > { } # [cfg (stageleft_macro)] # [sealed] impl < 'a , L : Location < 'a > > NoTimestamp for Tick < L > { } pub use crate :: location :: tick :: Timestamped ; # [cfg (stageleft_macro)] impl < 'a , L : Location < 'a > > Location < 'a > for Timestamped < L > { type Root = L :: Root ; fn root (& self) -> Self :: Root { self . tick . root () } fn id (& self) -> LocationId { self . tick . id () } fn flow_state (& self) -> & FlowState { self . tick . flow_state () } fn is_top_level () -> bool { L :: is_top_level () } } # [cfg (stageleft_macro)] # [sealed] impl < L > NoTick for Timestamped < L > { } pub use crate :: location :: tick :: Tick ; # [cfg (stageleft_macro)] impl < 'a , L : Location < 'a > > Location < 'a > for Tick < L > { type Root = L :: Root ; fn root (& self) -> Self :: Root { self . l . root () } fn id (& self) -> LocationId { LocationId :: Tick (self . id , Box :: new (self . l . id ())) } fn flow_state (& self) -> & FlowState { self . l . flow_state () } fn is_top_level () -> bool { false } } # [cfg (stageleft_macro)] impl < 'a , L : Location < 'a > > Tick < L > { pub fn outer (& self) -> & L { & self . l } pub fn spin_batch (& self , batch_size : impl QuotedWithContext < 'a , usize , L > + Copy + 'a ,) -> Stream < () , Self , Bounded > where L : NoTick + NoTimestamp , { let out = self . l . spin () . flat_map_ordered (q ! (move | _ | 0 .. batch_size)) . map (q ! (| _ | ())) . timestamped (self) ; unsafe { out . tick_batch () } } pub fn singleton < T : Clone > (& self , e : impl QuotedWithContext < 'a , T , L > ,) -> Singleton < T , Self , Bounded > where L : NoTick , { unsafe { self . outer () . singleton (e) . timestamped (self) . latest_tick () } } pub fn singleton_first_tick < T : Clone > (& self , e : impl QuotedWithContext < 'a , T , Tick < L > > ,) -> Optional < T , Self , Bounded > where L : NoTick , { let e_arr = q ! ([e]) ; let e = e_arr . splice_untyped_ctx (self) ; Optional :: new (self . clone () , HydroNode :: Source { source : HydroSource :: Iter (e . into ()) , location_kind : self . l . id () , } ,) } pub fn forward_ref < S : CycleCollection < 'a , ForwardRefMarker , Location = Self > > (& self ,) -> (ForwardRef < 'a , S > , S) where L : NoTick , { let next_id = { let on_id = match self . l . id () { LocationId :: Process (id) => id , LocationId :: Cluster (id) => id , LocationId :: Tick (_ , _) => panic ! () , LocationId :: ExternalProcess (_) => panic ! () , } ; let mut flow_state = self . flow_state () . borrow_mut () ; let next_id_entry = flow_state . cycle_counts . entry (on_id) . or_default () ; let id = * next_id_entry ; * next_id_entry += 1 ; id } ; let ident = syn :: Ident :: new (& format ! ("cycle_{}" , next_id) , Span :: call_site ()) ; (ForwardRef { ident : ident . clone () , expected_location : self . id () , _phantom : PhantomData , } , S :: create_source (ident , self . clone ()) ,) } pub fn forward_ref_timestamped < S : CycleCollection < 'a , ForwardRefMarker , Location = Timestamped < L > > , > (& self ,) -> (ForwardRef < 'a , S > , S) { let next_id = { let on_id = match self . l . id () { LocationId :: Process (id) => id , LocationId :: Cluster (id) => id , LocationId :: Tick (_ , _) => panic ! () , LocationId :: ExternalProcess (_) => panic ! () , } ; let mut flow_state = self . flow_state () . borrow_mut () ; let next_id_entry = flow_state . cycle_counts . entry (on_id) . or_default () ; let id = * next_id_entry ; * next_id_entry += 1 ; id } ; let ident = syn :: Ident :: new (& format ! ("cycle_{}" , next_id) , Span :: call_site ()) ; (ForwardRef { ident : ident . clone () , expected_location : self . id () , _phantom : PhantomData , } , S :: create_source (ident , Timestamped { tick : self . clone () }) ,) } pub fn cycle < S : CycleCollection < 'a , TickCycleMarker , Location = Self > + DeferTick > (& self ,) -> (TickCycle < 'a , S > , S) where L : NoTick , { let next_id = { let on_id = match self . l . id () { LocationId :: Process (id) => id , LocationId :: Cluster (id) => id , LocationId :: Tick (_ , _) => panic ! () , LocationId :: ExternalProcess (_) => panic ! () , } ; let mut flow_state = self . flow_state () . borrow_mut () ; let next_id_entry = flow_state . cycle_counts . entry (on_id) . or_default () ; let id = * next_id_entry ; * next_id_entry += 1 ; id } ; let ident = syn :: Ident :: new (& format ! ("cycle_{}" , next_id) , Span :: call_site ()) ; (TickCycle { ident : ident . clone () , expected_location : self . id () , _phantom : PhantomData , } , S :: create_source (ident , self . clone ()) ,) } pub fn cycle_with_initial < S : CycleCollectionWithInitial < 'a , TickCycleMarker , Location = Self > + DeferTick , > (& self , initial : S ,) -> (TickCycle < 'a , S > , S) where L : NoTick , { let next_id = { let on_id = match self . l . id () { LocationId :: Process (id) => id , LocationId :: Cluster (id) => id , LocationId :: Tick (_ , _) => panic ! () , LocationId :: ExternalProcess (_) => panic ! () , } ; let mut flow_state = self . flow_state () . borrow_mut () ; let next_id_entry = flow_state . cycle_counts . entry (on_id) . or_default () ; let id = * next_id_entry ; * next_id_entry += 1 ; id } ; let ident = syn :: Ident :: new (& format ! ("cycle_{}" , next_id) , Span :: call_site ()) ; (TickCycle { ident : ident . clone () , expected_location : self . id () , _phantom : PhantomData , } , S :: create_source (ident , initial , self . clone ()) ,) } } } pub use tick :: { NoTick , Tick , Timestamped } ; pub use crate :: location :: LocationId ; # [cfg (stageleft_macro)] impl LocationId { pub fn root (& self) -> & LocationId { match self { LocationId :: Process (_) => self , LocationId :: Cluster (_) => self , LocationId :: Tick (_ , id) => id . root () , LocationId :: ExternalProcess (_) => self , } } pub fn raw_id (& self) -> usize { match self { LocationId :: Process (id) => * id , LocationId :: Cluster (id) => * id , LocationId :: Tick (_ , _) => panic ! ("cannot get raw id for tick") , LocationId :: ExternalProcess (id) => * id , } } } pub fn check_matching_location < 'a , L : Location < 'a > > (l1 : & L , l2 : & L) { assert_eq ! (l1 . id () , l2 . id () , "locations do not match") ; } pub use crate :: location :: Location ; } pub use location :: cluster :: CLUSTER_SELF_ID ; pub use location :: { Cluster , ClusterId , ExternalProcess , Location , Process , Tick , Timestamped } ; # [cfg (feature = "build")] pub mod deploy { pub use std :: future :: Future ; pub use std :: io :: Error ; pub use std :: pin :: Pin ; pub use hydroflow :: bytes :: Bytes ; pub use hydroflow :: futures :: { Sink , Stream } ; pub use hydroflow_lang :: graph :: HydroflowGraph ; pub use serde :: de :: DeserializeOwned ; pub use serde :: Serialize ; pub use stageleft :: QuotedWithContext ; pub mod macro_runtime { pub use std :: cell :: RefCell ; pub use std :: future :: Future ; pub use std :: pin :: Pin ; pub use std :: rc :: Rc ; pub use hydroflow :: bytes :: Bytes ; pub use hydroflow :: futures :: { Sink , Stream } ; pub use hydroflow :: util :: deploy :: DeployPorts ; pub use hydroflow_lang :: graph :: HydroflowGraph ; pub use stageleft :: { QuotedWithContext , RuntimeData } ; pub use crate :: __staged :: deploy :: { ClusterSpec , Deploy , ExternalSpec , Node , ProcessSpec , RegisterPort } ; pub use crate :: __staged :: deploy_runtime :: HydroflowPlusMeta ; pub use crate :: deploy :: macro_runtime :: DeployRuntime ; # [cfg (stageleft_macro)] impl < 'a > Deploy < 'a > for DeployRuntime { type InstantiateEnv = () ; type CompileEnv = RuntimeData < & 'a DeployPorts < HydroflowPlusMeta > > ; type Process = DeployRuntimeNode ; type Cluster = DeployRuntimeCluster ; type ExternalProcess = DeployRuntimeNode ; type Port = String ; type ExternalRawPort = () ; type Meta = () ; type GraphId = usize ; fn has_trivial_node () -> bool { true } fn trivial_process (_id : usize) -> Self :: Process { DeployRuntimeNode { next_port : Rc :: new (RefCell :: new (0)) , } } fn trivial_cluster (_id : usize) -> Self :: Cluster { DeployRuntimeCluster { next_port : Rc :: new (RefCell :: new (0)) , } } fn allocate_process_port (process : & Self :: Process) -> Self :: Port { process . next_port () } fn allocate_cluster_port (cluster : & Self :: Cluster) -> Self :: Port { cluster . next_port () } fn allocate_external_port (_external : & Self :: ExternalProcess) -> Self :: Port { panic ! () ; } fn o2o_sink_source (env : & Self :: CompileEnv , _p1 : & Self :: Process , p1_port : & Self :: Port , _p2 : & Self :: Process , p2_port : & Self :: Port ,) -> (syn :: Expr , syn :: Expr) { crate :: deploy_runtime :: deploy_o2o (* env , p1_port . as_str () , p2_port . as_str ()) } fn o2o_connect (_p1 : & Self :: Process , _p1_port : & Self :: Port , _p2 : & Self :: Process , _p2_port : & Self :: Port ,) -> Box < dyn FnOnce () > { Box :: new (| | panic ! ()) } fn o2m_sink_source (env : & Self :: CompileEnv , _p1 : & Self :: Process , p1_port : & Self :: Port , _c2 : & Self :: Cluster , c2_port : & Self :: Port ,) -> (syn :: Expr , syn :: Expr) { crate :: deploy_runtime :: deploy_o2m (* env , p1_port . as_str () , c2_port . as_str ()) } fn o2m_connect (_p1 : & Self :: Process , _p1_port : & Self :: Port , _c2 : & Self :: Cluster , _c2_port : & Self :: Port ,) -> Box < dyn FnOnce () > { Box :: new (| | panic ! ()) } fn m2o_sink_source (env : & Self :: CompileEnv , _c1 : & Self :: Cluster , c1_port : & Self :: Port , _p2 : & Self :: Process , p2_port : & Self :: Port ,) -> (syn :: Expr , syn :: Expr) { crate :: deploy_runtime :: deploy_m2o (* env , c1_port . as_str () , p2_port . as_str ()) } fn m2o_connect (_c1 : & Self :: Cluster , _c1_port : & Self :: Port , _p2 : & Self :: Process , _p2_port : & Self :: Port ,) -> Box < dyn FnOnce () > { Box :: new (| | panic ! ()) } fn m2m_sink_source (env : & Self :: CompileEnv , _c1 : & Self :: Cluster , c1_port : & Self :: Port , _c2 : & Self :: Cluster , c2_port : & Self :: Port ,) -> (syn :: Expr , syn :: Expr) { crate :: deploy_runtime :: deploy_m2m (* env , c1_port . as_str () , c2_port . as_str ()) } fn m2m_connect (_c1 : & Self :: Cluster , _c1_port : & Self :: Port , _c2 : & Self :: Cluster , _c2_port : & Self :: Port ,) -> Box < dyn FnOnce () > { Box :: new (| | panic ! ()) } fn e2o_source (_compile_env : & Self :: CompileEnv , _p1 : & Self :: ExternalProcess , _p1_port : & Self :: Port , _p2 : & Self :: Process , _p2_port : & Self :: Port ,) -> syn :: Expr { panic ! () } fn e2o_connect (_p1 : & Self :: ExternalProcess , _p1_port : & Self :: Port , _p2 : & Self :: Process , _p2_port : & Self :: Port ,) -> Box < dyn FnOnce () > { panic ! () } fn o2e_sink (_compile_env : & Self :: CompileEnv , _p1 : & Self :: Process , _p1_port : & Self :: Port , _p2 : & Self :: ExternalProcess , _p2_port : & Self :: Port ,) -> syn :: Expr { panic ! () } fn o2e_connect (_p1 : & Self :: Process , _p1_port : & Self :: Port , _p2 : & Self :: ExternalProcess , _p2_port : & Self :: Port ,) -> Box < dyn FnOnce () > { panic ! () } fn cluster_ids (env : & Self :: CompileEnv , of_cluster : usize ,) -> impl QuotedWithContext < 'a , & 'a Vec < u32 > , () > + Copy + 'a { crate :: deploy_runtime :: cluster_members (* env , of_cluster) } fn cluster_self_id (env : & Self :: CompileEnv) -> impl QuotedWithContext < 'a , u32 , () > + Copy + 'a { crate :: deploy_runtime :: cluster_self_id (* env) } } pub use crate :: deploy :: macro_runtime :: DeployRuntimeNode ; # [cfg (stageleft_macro)] impl < 'a > RegisterPort < 'a , DeployRuntime > for DeployRuntimeNode { fn register (& self , _key : usize , _port : < DeployRuntime as Deploy > :: Port) { panic ! () } fn raw_port (& self , _key : usize) -> < DeployRuntime as Deploy > :: ExternalRawPort { panic ! () } # [expect (clippy :: manual_async_fn , reason = "buggy Clippy lint for lifetime bounds")] fn as_bytes_sink (& self , _key : usize ,) -> impl Future < Output = Pin < Box < dyn Sink < Bytes , Error = std :: io :: Error > > > > + 'a { async { panic ! () } } # [expect (clippy :: manual_async_fn , reason = "buggy Clippy lint for lifetime bounds")] fn as_bincode_sink < T : serde :: Serialize + 'static > (& self , _key : usize ,) -> impl Future < Output = Pin < Box < dyn Sink < T , Error = std :: io :: Error > > > > + 'a { async { panic ! () } } # [expect (clippy :: manual_async_fn , reason = "buggy Clippy lint for lifetime bounds")] fn as_bytes_source (& self , _key : usize ,) -> impl Future < Output = Pin < Box < dyn Stream < Item = Bytes > > > > + 'a { async { panic ! () } } # [expect (clippy :: manual_async_fn , reason = "buggy Clippy lint for lifetime bounds")] fn as_bincode_source < T : serde :: de :: DeserializeOwned + 'static > (& self , _key : usize ,) -> impl Future < Output = Pin < Box < dyn Stream < Item = T > > > > + 'a { async { panic ! () } } } # [cfg (stageleft_macro)] impl Node for DeployRuntimeNode { type Port = String ; type Meta = () ; type InstantiateEnv = () ; fn next_port (& self) -> String { let next_send_port = * self . next_port . borrow () ; * self . next_port . borrow_mut () += 1 ; format ! ("port_{}" , next_send_port) } fn update_meta (& mut self , _meta : & Self :: Meta) { } fn instantiate (& self , _env : & mut Self :: InstantiateEnv , _meta : & mut Self :: Meta , _graph : HydroflowGraph , _extra_stmts : Vec < syn :: Stmt > ,) { panic ! (".deploy() cannot be called on a DeployRuntimeNode") ; } } pub use crate :: deploy :: macro_runtime :: DeployRuntimeCluster ; # [cfg (stageleft_macro)] impl Node for DeployRuntimeCluster { type Port = String ; type Meta = () ; type InstantiateEnv = () ; fn next_port (& self) -> String { let next_send_port = * self . next_port . borrow () ; * self . next_port . borrow_mut () += 1 ; format ! ("port_{}" , next_send_port) } fn update_meta (& mut self , _meta : & Self :: Meta) { } fn instantiate (& self , _env : & mut Self :: InstantiateEnv , _meta : & mut Self :: Meta , _graph : HydroflowGraph , _extra_stmts : Vec < syn :: Stmt > ,) { panic ! (".deploy() cannot be called on a DeployRuntimeCluster") ; } } # [cfg (stageleft_macro)] impl ProcessSpec < '_ , DeployRuntime > for () { fn build (self , _id : usize , _name_hint : & str) -> DeployRuntimeNode { DeployRuntimeNode { next_port : Rc :: new (RefCell :: new (0)) , } } } # [cfg (stageleft_macro)] impl ClusterSpec < '_ , DeployRuntime > for () { fn build (self , _id : usize , _name_hint : & str) -> DeployRuntimeCluster { DeployRuntimeCluster { next_port : Rc :: new (RefCell :: new (0)) , } } } # [cfg (stageleft_macro)] impl ExternalSpec < '_ , DeployRuntime > for () { fn build (self , _id : usize , _name_hint : & str) -> DeployRuntimeNode { panic ! () } } } pub use macro_runtime :: * ; # [cfg (feature = "deploy")] pub mod trybuild { pub use std :: fs ; pub use std :: path :: PathBuf ; pub use hydroflow_lang :: graph :: { partition_graph , HydroflowGraph } ; pub use sha2 :: { Digest , Sha256 } ; pub use stageleft :: internal :: quote ; pub use syn :: visit_mut :: VisitMut ; pub use trybuild_internals_api :: cargo :: { self , Metadata } ; pub use trybuild_internals_api :: env :: Update ; pub use trybuild_internals_api :: run :: { PathDependency , Project } ; pub use trybuild_internals_api :: { dependencies , features , path , Runner } ; pub use super :: trybuild_rewriters :: { ReplaceCrateNameWithStaged , ReplaceCrateWithOrig } ; static IS_TEST : std :: sync :: atomic :: AtomicBool = std :: sync :: atomic :: AtomicBool :: new (false) ; pub fn init_test () { IS_TEST . store (true , std :: sync :: atomic :: Ordering :: Relaxed) ; } pub fn clean_name_hint (name_hint : & str) -> String { name_hint . replace ("::" , "__") . replace (" " , "_") . replace ("," , "_") . replace ("<" , "_") . replace (">" , "") . replace ("(" , "") . replace (")" , "") } pub fn create_graph_trybuild (graph : HydroflowGraph , extra_stmts : Vec < syn :: Stmt > , name_hint : & Option < String > ,) -> (String , (PathBuf , PathBuf , Option < Vec < String > >)) { let source_dir = cargo :: manifest_dir () . unwrap () ; let source_manifest = dependencies :: get_manifest (& source_dir) . unwrap () ; let crate_name = & source_manifest . package . name . to_string () . replace ("-" , "_") ; let is_test = IS_TEST . load (std :: sync :: atomic :: Ordering :: Relaxed) ; let mut generated_code = compile_graph_trybuild (graph , extra_stmts) ; ReplaceCrateNameWithStaged { crate_name : crate_name . clone () , } . visit_file_mut (& mut generated_code) ; let mut inlined_staged = stageleft_tool :: gen_staged_trybuild (& path ! (source_dir / "src" / "lib.rs") , crate_name . clone () , is_test ,) ; ReplaceCrateWithOrig { crate_name : crate_name . clone () , } . visit_file_mut (& mut inlined_staged) ; let source = prettyplease :: unparse (& syn :: parse_quote ! { # generated_code # [allow (unused , ambiguous_glob_reexports , clippy :: suspicious_else_formatting , unexpected_cfgs , reason = "generated code")] pub mod __staged { # inlined_staged } }) ; let hash = format ! ("{:X}" , Sha256 :: digest (& source)) . chars () . take (8) . collect :: < String > () ; let bin_name = if let Some (name_hint) = & name_hint { format ! ("{}_{}" , clean_name_hint (name_hint) , & hash) } else { hash } ; let trybuild_created = create_trybuild (& source , & bin_name , is_test) . unwrap () ; (bin_name , trybuild_created) } pub fn compile_graph_trybuild (graph : HydroflowGraph , extra_stmts : Vec < syn :: Stmt >) -> syn :: File { let partitioned_graph = partition_graph (graph) . expect ("Failed to partition (cycle detected).") ; let mut diagnostics = Vec :: new () ; let tokens = partitioned_graph . as_code (& quote ! { hydro_lang :: hydroflow } , true , quote ! () , & mut diagnostics ,) ; let source_ast : syn :: File = syn :: parse_quote ! { #! [allow (unused_imports , unused_crate_dependencies , missing_docs , non_snake_case)] use hydro_lang ::*; # [allow (unused)] fn __hydro_runtime <'a > (__hydro_lang_trybuild_cli : &'a hydro_lang :: hydroflow :: util :: deploy :: DeployPorts < hydro_lang :: deploy_runtime :: HydroflowPlusMeta >) -> hydro_lang :: hydroflow :: scheduled :: graph :: Hydroflow <'a > { # (# extra_stmts) * # tokens } # [tokio :: main] async fn main () { let ports = hydro_lang :: hydroflow :: util :: deploy :: init_no_ack_start () . await ; let flow = __hydro_runtime (& ports) ; println ! ("ack start") ; hydro_lang :: hydroflow :: util :: deploy :: launch_flow (flow) . await ; } } ; source_ast } pub fn create_trybuild (source : & str , bin : & str , is_test : bool ,) -> Result < (PathBuf , PathBuf , Option < Vec < String > >) , trybuild_internals_api :: error :: Error > { let Metadata { target_directory : target_dir , workspace_root : workspace , packages , } = cargo :: metadata () ? ; let source_dir = cargo :: manifest_dir () ? ; let mut source_manifest = dependencies :: get_manifest (& source_dir) ? ; if ! is_test { source_manifest . dev_dependencies . clear () ; } let mut features = features :: find () ; let path_dependencies = source_manifest . dependencies . iter () . filter_map (| (name , dep) | { let path = dep . path . as_ref () ? ; if packages . iter () . any (| p | & p . name == name) { None } else { Some (PathDependency { name : name . clone () , normalized_path : path . canonicalize () . ok () ? , }) } }) . collect () ; let crate_name = source_manifest . package . name . clone () ; let project_dir = path ! (target_dir / "hydro_trybuild" / crate_name /) ; fs :: create_dir_all (& project_dir) ? ; let project_name = format ! ("{}-hydro-trybuild" , crate_name) ; let mut manifest = Runner :: make_manifest (& workspace , & project_name , & source_dir , & packages , & [] , source_manifest ,) ? ; manifest . features . remove ("stageleft_devel") ; if let Some (enabled_features) = & mut features { enabled_features . retain (| feature | manifest . features . contains_key (feature) || feature == "default") ; manifest . features . get_mut ("default") . iter_mut () . for_each (| v | { v . retain (| f | f != "stageleft_devel") ; }) ; } let project = Project { dir : project_dir , source_dir , target_dir , name : project_name , update : Update :: env () ? , has_pass : false , has_compile_fail : false , features , workspace , path_dependencies , manifest , keep_going : false , } ; let manifest_toml = toml :: to_string (& project . manifest) ? ; fs :: write (path ! (project . dir / "Cargo.toml") , manifest_toml) ? ; fs :: create_dir_all (path ! (project . dir / "src" / "bin")) ? ; let out_path = path ! (project . dir / "src" / "bin" / format ! ("{bin}.rs")) ; if ! out_path . exists () || fs :: read_to_string (& out_path) ? != source { fs :: write (path ! (project . dir / "src" / "bin" / format ! ("{bin}.rs")) , source ,) ? ; } let workspace_cargo_lock = path ! (project . workspace / "Cargo.lock") ; if workspace_cargo_lock . exists () { let _ = fs :: copy (workspace_cargo_lock , path ! (project . dir / "Cargo.lock")) ; } else { let _ = cargo :: cargo (& project) . arg ("generate-lockfile") . status () ; } let workspace_dot_cargo_config_toml = path ! (project . workspace / ".cargo" / "config.toml") ; if workspace_dot_cargo_config_toml . exists () { let dot_cargo_folder = path ! (project . dir / ".cargo") ; fs :: create_dir_all (& dot_cargo_folder) ? ; let _ = fs :: copy (workspace_dot_cargo_config_toml , path ! (dot_cargo_folder / "config.toml") ,) ; } Ok ((project . dir . as_ref () . into () , path ! (project . target_dir / "hydro_trybuild") , project . features ,)) } } # [cfg (feature = "deploy")] # [doc (hidden)] pub mod trybuild_rewriters { pub use syn :: visit_mut :: VisitMut ; pub use crate :: deploy :: trybuild_rewriters :: ReplaceCrateNameWithStaged ; # [cfg (stageleft_macro)] impl VisitMut for ReplaceCrateNameWithStaged { fn visit_type_path_mut (& mut self , i : & mut syn :: TypePath) { if let Some (first) = i . path . segments . first () { if first . ident == self . crate_name { let tail = i . path . segments . iter () . skip (1) . collect :: < Vec < _ > > () ; * i = syn :: parse_quote ! (crate :: __staged # (::# tail) *) ; } } syn :: visit_mut :: visit_type_path_mut (self , i) ; } } pub use crate :: deploy :: trybuild_rewriters :: ReplaceCrateWithOrig ; # [cfg (stageleft_macro)] impl VisitMut for ReplaceCrateWithOrig { fn visit_item_use_mut (& mut self , i : & mut syn :: ItemUse) { if let syn :: UseTree :: Path (p) = & mut i . tree { if p . ident == "crate" { p . ident = syn :: Ident :: new (& self . crate_name , p . ident . span ()) ; i . leading_colon = Some (Default :: default ()) ; } } syn :: visit_mut :: visit_item_use_mut (self , i) ; } } } # [cfg (feature = "deploy")] pub use trybuild :: init_test ; # [cfg (feature = "deploy")] pub mod deploy_graph { pub use std :: cell :: RefCell ; pub use std :: collections :: HashMap ; pub use std :: future :: Future ; pub use std :: io :: Error ; pub use std :: pin :: Pin ; pub use std :: rc :: Rc ; pub use std :: sync :: Arc ; pub use hydro_deploy :: custom_service :: CustomClientPort ; pub use hydro_deploy :: hydroflow_crate :: ports :: { DemuxSink , HydroflowSink , HydroflowSource , TaggedSource , } ; pub use hydro_deploy :: hydroflow_crate :: tracing_options :: TracingOptions ; pub use hydro_deploy :: hydroflow_crate :: HydroflowCrateService ; pub use hydro_deploy :: { CustomService , Deployment , Host , HydroflowCrate } ; pub use hydroflow :: bytes :: Bytes ; pub use hydroflow :: futures :: { Sink , SinkExt , Stream , StreamExt } ; pub use hydroflow :: util :: deploy :: { ConnectedSink , ConnectedSource } ; pub use hydroflow_lang :: graph :: HydroflowGraph ; pub use nameof :: name_of ; pub use serde :: de :: DeserializeOwned ; pub use serde :: Serialize ; pub use stageleft :: { QuotedWithContext , RuntimeData } ; pub use tokio :: sync :: RwLock ; pub use super :: trybuild :: create_graph_trybuild ; pub use super :: { ClusterSpec , Deploy , ExternalSpec , IntoProcessSpec , Node , ProcessSpec , RegisterPort } ; pub use crate :: __staged :: deploy_runtime :: * ; pub use crate :: deploy :: deploy_graph :: HydroDeploy ; # [cfg (stageleft_macro)] impl < 'a > Deploy < 'a > for HydroDeploy { type InstantiateEnv = Deployment ; type CompileEnv = () ; type Process = DeployNode ; type Cluster = DeployCluster ; type ExternalProcess = DeployExternal ; type Meta = HashMap < usize , Vec < u32 > > ; type GraphId = () ; type Port = String ; type ExternalRawPort = CustomClientPort ; fn allocate_process_port (process : & Self :: Process) -> Self :: Port { process . next_port () } fn allocate_cluster_port (cluster : & Self :: Cluster) -> Self :: Port { cluster . next_port () } fn allocate_external_port (external : & Self :: ExternalProcess) -> Self :: Port { external . next_port () } fn o2o_sink_source (_env : & () , _p1 : & Self :: Process , p1_port : & Self :: Port , _p2 : & Self :: Process , p2_port : & Self :: Port ,) -> (syn :: Expr , syn :: Expr) { let p1_port = p1_port . as_str () ; let p2_port = p2_port . as_str () ; deploy_o2o (RuntimeData :: new ("__hydro_lang_trybuild_cli") , p1_port , p2_port ,) } fn o2o_connect (p1 : & Self :: Process , p1_port : & Self :: Port , p2 : & Self :: Process , p2_port : & Self :: Port ,) -> Box < dyn FnOnce () > { let p1 = p1 . clone () ; let p1_port = p1_port . clone () ; let p2 = p2 . clone () ; let p2_port = p2_port . clone () ; Box :: new (move | | { let self_underlying_borrow = p1 . underlying . borrow () ; let self_underlying = self_underlying_borrow . as_ref () . unwrap () ; let source_port = self_underlying . try_read () . unwrap () . get_port (p1_port . clone () , self_underlying) ; let other_underlying_borrow = p2 . underlying . borrow () ; let other_underlying = other_underlying_borrow . as_ref () . unwrap () ; let recipient_port = other_underlying . try_read () . unwrap () . get_port (p2_port . clone () , other_underlying) ; source_port . send_to (& recipient_port) }) } fn o2m_sink_source (_env : & () , _p1 : & Self :: Process , p1_port : & Self :: Port , _c2 : & Self :: Cluster , c2_port : & Self :: Port ,) -> (syn :: Expr , syn :: Expr) { let p1_port = p1_port . as_str () ; let c2_port = c2_port . as_str () ; deploy_o2m (RuntimeData :: new ("__hydro_lang_trybuild_cli") , p1_port , c2_port ,) } fn o2m_connect (p1 : & Self :: Process , p1_port : & Self :: Port , c2 : & Self :: Cluster , c2_port : & Self :: Port ,) -> Box < dyn FnOnce () > { let p1 = p1 . clone () ; let p1_port = p1_port . clone () ; let c2 = c2 . clone () ; let c2_port = c2_port . clone () ; Box :: new (move | | { let self_underlying_borrow = p1 . underlying . borrow () ; let self_underlying = self_underlying_borrow . as_ref () . unwrap () ; let source_port = self_underlying . try_read () . unwrap () . get_port (p1_port . clone () , self_underlying) ; let recipient_port = DemuxSink { demux : c2 . members . borrow () . iter () . enumerate () . map (| (id , c) | { let n = c . underlying . try_read () . unwrap () ; (id as u32 , Arc :: new (n . get_port (c2_port . clone () , & c . underlying)) as Arc < dyn HydroflowSink + 'static > ,) }) . collect () , } ; source_port . send_to (& recipient_port) }) } fn m2o_sink_source (_env : & () , _c1 : & Self :: Cluster , c1_port : & Self :: Port , _p2 : & Self :: Process , p2_port : & Self :: Port ,) -> (syn :: Expr , syn :: Expr) { let c1_port = c1_port . as_str () ; let p2_port = p2_port . as_str () ; deploy_m2o (RuntimeData :: new ("__hydro_lang_trybuild_cli") , c1_port , p2_port ,) } fn m2o_connect (c1 : & Self :: Cluster , c1_port : & Self :: Port , p2 : & Self :: Process , p2_port : & Self :: Port ,) -> Box < dyn FnOnce () > { let c1 = c1 . clone () ; let c1_port = c1_port . clone () ; let p2 = p2 . clone () ; let p2_port = p2_port . clone () ; Box :: new (move | | { let other_underlying_borrow = p2 . underlying . borrow () ; let other_underlying = other_underlying_borrow . as_ref () . unwrap () ; let recipient_port = other_underlying . try_read () . unwrap () . get_port (p2_port . clone () , other_underlying) . merge () ; for (i , node) in c1 . members . borrow () . iter () . enumerate () { let source_port = node . underlying . try_read () . unwrap () . get_port (c1_port . clone () , & node . underlying) ; TaggedSource { source : Arc :: new (source_port) , tag : i as u32 , } . send_to (& recipient_port) ; } }) } fn m2m_sink_source (_env : & () , _c1 : & Self :: Cluster , c1_port : & Self :: Port , _c2 : & Self :: Cluster , c2_port : & Self :: Port ,) -> (syn :: Expr , syn :: Expr) { let c1_port = c1_port . as_str () ; let c2_port = c2_port . as_str () ; deploy_m2m (RuntimeData :: new ("__hydro_lang_trybuild_cli") , c1_port , c2_port ,) } fn m2m_connect (c1 : & Self :: Cluster , c1_port : & Self :: Port , c2 : & Self :: Cluster , c2_port : & Self :: Port ,) -> Box < dyn FnOnce () > { let c1 = c1 . clone () ; let c1_port = c1_port . clone () ; let c2 = c2 . clone () ; let c2_port = c2_port . clone () ; Box :: new (move | | { for (i , sender) in c1 . members . borrow () . iter () . enumerate () { let source_port = sender . underlying . try_read () . unwrap () . get_port (c1_port . clone () , & sender . underlying) ; let recipient_port = DemuxSink { demux : c2 . members . borrow () . iter () . enumerate () . map (| (id , c) | { let n = c . underlying . try_read () . unwrap () ; (id as u32 , Arc :: new (n . get_port (c2_port . clone () , & c . underlying) . merge ()) as Arc < dyn HydroflowSink + 'static > ,) }) . collect () , } ; TaggedSource { source : Arc :: new (source_port) , tag : i as u32 , } . send_to (& recipient_port) ; } }) } fn e2o_source (_compile_env : & Self :: CompileEnv , _p1 : & Self :: ExternalProcess , p1_port : & Self :: Port , _p2 : & Self :: Process , p2_port : & Self :: Port ,) -> syn :: Expr { let p1_port = p1_port . as_str () ; let p2_port = p2_port . as_str () ; deploy_e2o (RuntimeData :: new ("__hydro_lang_trybuild_cli") , p1_port , p2_port ,) } fn e2o_connect (p1 : & Self :: ExternalProcess , p1_port : & Self :: Port , p2 : & Self :: Process , p2_port : & Self :: Port ,) -> Box < dyn FnOnce () > { let p1 = p1 . clone () ; let p1_port = p1_port . clone () ; let p2 = p2 . clone () ; let p2_port = p2_port . clone () ; Box :: new (move | | { let self_underlying_borrow = p1 . underlying . borrow () ; let self_underlying = self_underlying_borrow . as_ref () . unwrap () ; let source_port = self_underlying . try_read () . unwrap () . declare_client (self_underlying) ; let other_underlying_borrow = p2 . underlying . borrow () ; let other_underlying = other_underlying_borrow . as_ref () . unwrap () ; let recipient_port = other_underlying . try_read () . unwrap () . get_port (p2_port . clone () , other_underlying) ; source_port . send_to (& recipient_port) ; p1 . client_ports . borrow_mut () . insert (p1_port . clone () , source_port) ; }) } fn o2e_sink (_compile_env : & Self :: CompileEnv , _p1 : & Self :: Process , p1_port : & Self :: Port , _p2 : & Self :: ExternalProcess , p2_port : & Self :: Port ,) -> syn :: Expr { let p1_port = p1_port . as_str () ; let p2_port = p2_port . as_str () ; deploy_o2e (RuntimeData :: new ("__hydro_lang_trybuild_cli") , p1_port , p2_port ,) } fn o2e_connect (p1 : & Self :: Process , p1_port : & Self :: Port , p2 : & Self :: ExternalProcess , p2_port : & Self :: Port ,) -> Box < dyn FnOnce () > { let p1 = p1 . clone () ; let p1_port = p1_port . clone () ; let p2 = p2 . clone () ; let p2_port = p2_port . clone () ; Box :: new (move | | { let self_underlying_borrow = p1 . underlying . borrow () ; let self_underlying = self_underlying_borrow . as_ref () . unwrap () ; let source_port = self_underlying . try_read () . unwrap () . get_port (p1_port . clone () , self_underlying) ; let other_underlying_borrow = p2 . underlying . borrow () ; let other_underlying = other_underlying_borrow . as_ref () . unwrap () ; let recipient_port = other_underlying . try_read () . unwrap () . declare_client (other_underlying) ; source_port . send_to (& recipient_port) ; p2 . client_ports . borrow_mut () . insert (p2_port . clone () , recipient_port) ; }) } fn cluster_ids (_env : & Self :: CompileEnv , of_cluster : usize ,) -> impl QuotedWithContext < 'a , & 'a Vec < u32 > , () > + Copy + 'a { cluster_members (RuntimeData :: new ("__hydro_lang_trybuild_cli") , of_cluster) } fn cluster_self_id (_env : & Self :: CompileEnv) -> impl QuotedWithContext < 'a , u32 , () > + Copy + 'a { cluster_self_id (RuntimeData :: new ("__hydro_lang_trybuild_cli")) } } pub use crate :: deploy :: deploy_graph :: DeployCrateWrapper ; pub use crate :: deploy :: deploy_graph :: TrybuildHost ; # [cfg (stageleft_macro)] impl From < Arc < dyn Host > > for TrybuildHost { fn from (host : Arc < dyn Host >) -> Self { Self { host , display_name : None , rustflags : None , tracing : None , name_hint : None , cluster_idx : None , } } } # [cfg (stageleft_macro)] impl < H : Host + 'static > From < Arc < H > > for TrybuildHost { fn from (host : Arc < H >) -> Self { Self { host , display_name : None , rustflags : None , tracing : None , name_hint : None , cluster_idx : None , } } } # [cfg (stageleft_macro)] impl TrybuildHost { pub fn new (host : Arc < dyn Host >) -> Self { Self { host , display_name : None , rustflags : None , tracing : None , name_hint : None , cluster_idx : None , } } pub fn display_name (self , display_name : impl Into < String >) -> Self { if self . display_name . is_some () { panic ! ("{} already set" , name_of ! (display_name in Self)) ; } Self { display_name : Some (display_name . into ()) , .. self } } pub fn rustflags (self , rustflags : impl Into < String >) -> Self { if self . rustflags . is_some () { panic ! ("{} already set" , name_of ! (rustflags in Self)) ; } Self { rustflags : Some (rustflags . into ()) , .. self } } pub fn tracing (self , tracing : TracingOptions) -> Self { if self . tracing . is_some () { panic ! ("{} already set" , name_of ! (tracing in Self)) ; } Self { tracing : Some (tracing) , .. self } } } # [cfg (stageleft_macro)] impl IntoProcessSpec < '_ , HydroDeploy > for Arc < dyn Host > { type ProcessSpec = TrybuildHost ; fn into_process_spec (self) -> TrybuildHost { TrybuildHost { host : self , display_name : None , rustflags : None , tracing : None , name_hint : None , cluster_idx : None , } } } # [cfg (stageleft_macro)] impl < H : Host + 'static > IntoProcessSpec < '_ , HydroDeploy > for Arc < H > { type ProcessSpec = TrybuildHost ; fn into_process_spec (self) -> TrybuildHost { TrybuildHost { host : self , display_name : None , rustflags : None , tracing : None , name_hint : None , cluster_idx : None , } } } pub use crate :: deploy :: deploy_graph :: DeployExternal ; # [cfg (stageleft_macro)] impl DeployExternal { pub fn take_port (& self , key : usize) -> CustomClientPort { self . client_ports . borrow_mut () . remove (self . allocated_ports . borrow () . get (& key) . unwrap ()) . unwrap () } } # [cfg (stageleft_macro)] impl < 'a > RegisterPort < 'a , HydroDeploy > for DeployExternal { fn register (& self , key : usize , port : < HydroDeploy as Deploy > :: Port) { self . allocated_ports . borrow_mut () . insert (key , port) ; } fn raw_port (& self , key : usize) -> < HydroDeploy as Deploy > :: ExternalRawPort { self . client_ports . borrow_mut () . remove (self . allocated_ports . borrow () . get (& key) . unwrap ()) . unwrap () } fn as_bytes_sink (& self , key : usize ,) -> impl Future < Output = Pin < Box < dyn Sink < Bytes , Error = Error > > > > + 'a { let port = self . raw_port (key) ; async move { let sink = port . connect () . await . into_sink () ; sink as Pin < Box < dyn Sink < Bytes , Error = Error > > > } } fn as_bincode_sink < T : Serialize + 'static > (& self , key : usize ,) -> impl Future < Output = Pin < Box < dyn Sink < T , Error = Error > > > > + 'a { let port = self . raw_port (key) ; async move { let sink = port . connect () . await . into_sink () ; Box :: pin (sink . with (| item | async move { Ok (bincode :: serialize (& item) . unwrap () . into ()) })) as Pin < Box < dyn Sink < T , Error = Error > > > } } fn as_bytes_source (& self , key : usize ,) -> impl Future < Output = Pin < Box < dyn Stream < Item = Bytes > > > > + 'a { let port = self . raw_port (key) ; async move { let source = port . connect () . await . into_source () ; Box :: pin (source . map (| r | r . unwrap () . freeze ())) as Pin < Box < dyn Stream < Item = Bytes > > > } } fn as_bincode_source < T : DeserializeOwned + 'static > (& self , key : usize ,) -> impl Future < Output = Pin < Box < dyn Stream < Item = T > > > > + 'a { let port = self . raw_port (key) ; async move { let source = port . connect () . await . into_source () ; Box :: pin (source . map (| item | bincode :: deserialize (& item . unwrap ()) . unwrap ())) as Pin < Box < dyn Stream < Item = T > > > } } } # [cfg (stageleft_macro)] impl Node for DeployExternal { type Port = String ; type Meta = HashMap < usize , Vec < u32 > > ; type InstantiateEnv = Deployment ; fn next_port (& self) -> Self :: Port { let next_port = * self . next_port . borrow () ; * self . next_port . borrow_mut () += 1 ; format ! ("port_{}" , next_port) } fn instantiate (& self , env : & mut Self :: InstantiateEnv , _meta : & mut Self :: Meta , _graph : HydroflowGraph , _extra_stmts : Vec < syn :: Stmt > ,) { let service = env . CustomService (self . host . clone () , vec ! []) ; * self . underlying . borrow_mut () = Some (service) ; } fn update_meta (& mut self , _meta : & Self :: Meta) { } } # [cfg (stageleft_macro)] impl ExternalSpec < '_ , HydroDeploy > for Arc < dyn Host > { fn build (self , _id : usize , _name_hint : & str) -> DeployExternal { DeployExternal { next_port : Rc :: new (RefCell :: new (0)) , host : self , underlying : Rc :: new (RefCell :: new (None)) , allocated_ports : Rc :: new (RefCell :: new (HashMap :: new ())) , client_ports : Rc :: new (RefCell :: new (HashMap :: new ())) , } } } # [cfg (stageleft_macro)] impl < H : Host + 'static > ExternalSpec < '_ , HydroDeploy > for Arc < H > { fn build (self , _id : usize , _name_hint : & str) -> DeployExternal { DeployExternal { next_port : Rc :: new (RefCell :: new (0)) , host : self , underlying : Rc :: new (RefCell :: new (None)) , allocated_ports : Rc :: new (RefCell :: new (HashMap :: new ())) , client_ports : Rc :: new (RefCell :: new (HashMap :: new ())) , } } } pub use crate :: deploy :: deploy_graph :: CrateOrTrybuild ; pub use crate :: deploy :: deploy_graph :: DeployNode ; # [cfg (stageleft_macro)] impl DeployCrateWrapper for DeployNode { fn underlying (& self) -> Arc < RwLock < HydroflowCrateService > > { self . underlying . borrow () . as_ref () . unwrap () . clone () } } # [cfg (stageleft_macro)] impl Node for DeployNode { type Port = String ; type Meta = HashMap < usize , Vec < u32 > > ; type InstantiateEnv = Deployment ; fn next_port (& self) -> String { let next_port = * self . next_port . borrow () ; * self . next_port . borrow_mut () += 1 ; format ! ("port_{}" , next_port) } fn update_meta (& mut self , meta : & Self :: Meta) { let underlying_node = self . underlying . borrow () ; let mut n = underlying_node . as_ref () . unwrap () . try_write () . unwrap () ; n . update_meta (HydroflowPlusMeta { clusters : meta . clone () , cluster_id : None , subgraph_id : self . id , }) ; } fn instantiate (& self , env : & mut Self :: InstantiateEnv , _meta : & mut Self :: Meta , graph : HydroflowGraph , extra_stmts : Vec < syn :: Stmt > ,) { let service = match self . service_spec . borrow_mut () . take () . unwrap () { CrateOrTrybuild :: Crate (c) => c , CrateOrTrybuild :: Trybuild (trybuild) => { let (bin_name , (dir , target_dir , features)) = create_graph_trybuild (graph , extra_stmts , & trybuild . name_hint) ; create_trybuild_service (trybuild , & dir , & target_dir , & features , & bin_name) } } ; * self . underlying . borrow_mut () = Some (env . add_service (service)) ; } } pub use crate :: deploy :: deploy_graph :: DeployClusterNode ; # [cfg (stageleft_macro)] impl DeployCrateWrapper for DeployClusterNode { fn underlying (& self) -> Arc < RwLock < HydroflowCrateService > > { self . underlying . clone () } } pub use crate :: deploy :: deploy_graph :: DeployCluster ; # [cfg (stageleft_macro)] impl DeployCluster { pub fn members (& self) -> Vec < DeployClusterNode > { self . members . borrow () . clone () } } # [cfg (stageleft_macro)] impl Node for DeployCluster { type Port = String ; type Meta = HashMap < usize , Vec < u32 > > ; type InstantiateEnv = Deployment ; fn next_port (& self) -> String { let next_port = * self . next_port . borrow () ; * self . next_port . borrow_mut () += 1 ; format ! ("port_{}" , next_port) } fn instantiate (& self , env : & mut Self :: InstantiateEnv , meta : & mut Self :: Meta , graph : HydroflowGraph , extra_stmts : Vec < syn :: Stmt > ,) { let has_trybuild = self . cluster_spec . borrow () . as_ref () . unwrap () . iter () . any (| spec | matches ! (spec , CrateOrTrybuild :: Trybuild { .. })) ; let maybe_trybuild = if has_trybuild { Some (create_graph_trybuild (graph , extra_stmts , & self . name_hint)) } else { None } ; let cluster_nodes = self . cluster_spec . borrow_mut () . take () . unwrap () . into_iter () . map (| spec | { let service = match spec { CrateOrTrybuild :: Crate (c) => c , CrateOrTrybuild :: Trybuild (trybuild) => { let (bin_name , (dir , target_dir , features)) = maybe_trybuild . as_ref () . unwrap () ; create_trybuild_service (trybuild , dir , target_dir , features , bin_name) } } ; env . add_service (service) }) . collect :: < Vec < _ > > () ; meta . insert (self . id , (0 .. (cluster_nodes . len () as u32)) . collect ()) ; * self . members . borrow_mut () = cluster_nodes . into_iter () . map (| n | DeployClusterNode { underlying : n }) . collect () ; } fn update_meta (& mut self , meta : & Self :: Meta) { for (cluster_id , node) in self . members . borrow () . iter () . enumerate () { let mut n = node . underlying . try_write () . unwrap () ; n . update_meta (HydroflowPlusMeta { clusters : meta . clone () , cluster_id : Some (cluster_id as u32) , subgraph_id : self . id , }) ; } } } pub use crate :: deploy :: deploy_graph :: DeployProcessSpec ; # [cfg (stageleft_macro)] impl DeployProcessSpec { pub fn new (t : HydroflowCrate) -> Self { Self (t) } } # [cfg (stageleft_macro)] impl ProcessSpec < '_ , HydroDeploy > for DeployProcessSpec { fn build (self , id : usize , _name_hint : & str) -> DeployNode { DeployNode { id , next_port : Rc :: new (RefCell :: new (0)) , service_spec : Rc :: new (RefCell :: new (Some (CrateOrTrybuild :: Crate (self . 0)))) , underlying : Rc :: new (RefCell :: new (None)) , } } } # [cfg (stageleft_macro)] impl ProcessSpec < '_ , HydroDeploy > for TrybuildHost { fn build (mut self , id : usize , name_hint : & str) -> DeployNode { self . name_hint = Some (format ! ("{} (process {id})" , name_hint)) ; DeployNode { id , next_port : Rc :: new (RefCell :: new (0)) , service_spec : Rc :: new (RefCell :: new (Some (CrateOrTrybuild :: Trybuild (self)))) , underlying : Rc :: new (RefCell :: new (None)) , } } } pub use crate :: deploy :: deploy_graph :: DeployClusterSpec ; # [cfg (stageleft_macro)] impl DeployClusterSpec { pub fn new (crates : Vec < HydroflowCrate >) -> Self { Self (crates) } } # [cfg (stageleft_macro)] impl ClusterSpec < '_ , HydroDeploy > for DeployClusterSpec { fn build (self , id : usize , _name_hint : & str) -> DeployCluster { DeployCluster { id , next_port : Rc :: new (RefCell :: new (0)) , cluster_spec : Rc :: new (RefCell :: new (Some (self . 0 . into_iter () . map (CrateOrTrybuild :: Crate) . collect () ,))) , members : Rc :: new (RefCell :: new (vec ! [])) , name_hint : None , } } } # [cfg (stageleft_macro)] impl < T : Into < TrybuildHost > , I : IntoIterator < Item = T > > ClusterSpec < '_ , HydroDeploy > for I { fn build (self , id : usize , name_hint : & str) -> DeployCluster { let name_hint = format ! ("{} (cluster {id})" , name_hint) ; DeployCluster { id , next_port : Rc :: new (RefCell :: new (0)) , cluster_spec : Rc :: new (RefCell :: new (Some (self . into_iter () . enumerate () . map (| (idx , b) | { let mut b = b . into () ; b . name_hint = Some (name_hint . clone ()) ; b . cluster_idx = Some (idx) ; CrateOrTrybuild :: Trybuild (b) }) . collect () ,))) , members : Rc :: new (RefCell :: new (vec ! [])) , name_hint : Some (name_hint) , } } } pub fn create_trybuild_service (trybuild : TrybuildHost , dir : & std :: path :: PathBuf , target_dir : & std :: path :: PathBuf , features : & Option < Vec < String > > , bin_name : & str ,) -> HydroflowCrate { let mut ret = HydroflowCrate :: new (dir , trybuild . host) . target_dir (target_dir) . bin (bin_name) . no_default_features () ; if let Some (display_name) = trybuild . display_name { ret = ret . display_name (display_name) ; } else if let Some (name_hint) = trybuild . name_hint { if let Some (cluster_idx) = trybuild . cluster_idx { ret = ret . display_name (format ! ("{} / {}" , name_hint , cluster_idx)) ; } else { ret = ret . display_name (name_hint) ; } } if let Some (rustflags) = trybuild . rustflags { ret = ret . rustflags (rustflags) ; } if let Some (tracing) = trybuild . tracing { ret = ret . tracing (tracing) ; } if let Some (features) = features { ret = ret . features (features . clone ()) ; } ret } } # [cfg (feature = "deploy")] pub use deploy_graph :: * ; pub mod in_memory_graph { pub use hydroflow_lang :: graph :: HydroflowGraph ; pub use super :: { LocalDeploy , Node , ProcessSpec } ; pub use crate :: deploy :: in_memory_graph :: SingleProcessGraph ; # [cfg (stageleft_macro)] impl LocalDeploy < '_ > for SingleProcessGraph { type Process = SingleNode ; type Cluster = SingleNode ; type ExternalProcess = SingleNode ; type Meta = () ; type GraphId = () ; fn has_trivial_node () -> bool { true } fn trivial_process (_id : usize) -> Self :: Process { SingleNode { } } fn trivial_cluster (_id : usize) -> Self :: Cluster { SingleNode { } } } # [cfg (stageleft_macro)] impl ProcessSpec < '_ , SingleProcessGraph > for () { fn build (self , _id : usize , _name_hint : & str) -> SingleNode { SingleNode { } } } pub use crate :: deploy :: in_memory_graph :: SingleNode ; # [cfg (stageleft_macro)] impl Node for SingleNode { type Port = () ; type Meta = () ; type InstantiateEnv = () ; fn next_port (& self) { panic ! () ; } fn update_meta (& mut self , _meta : & Self :: Meta) { } fn instantiate (& self , _env : & mut Self :: InstantiateEnv , _meta : & mut Self :: Meta , _graph : HydroflowGraph , _extra_stmts : Vec < syn :: Stmt > ,) { } } pub use crate :: deploy :: in_memory_graph :: MultiGraph ; # [cfg (stageleft_macro)] impl LocalDeploy < '_ > for MultiGraph { type Process = MultiNode ; type Cluster = MultiNode ; type ExternalProcess = MultiNode ; type Meta = () ; type GraphId = usize ; fn has_trivial_node () -> bool { true } fn trivial_process (_id : usize) -> Self :: Process { MultiNode { } } fn trivial_cluster (_id : usize) -> Self :: Cluster { MultiNode { } } } # [cfg (stageleft_macro)] impl ProcessSpec < '_ , MultiGraph > for () { fn build (self , _id : usize , _name_hint : & str) -> MultiNode { MultiNode { } } } pub use crate :: deploy :: in_memory_graph :: MultiNode ; # [cfg (stageleft_macro)] impl Node for MultiNode { type Port = () ; type Meta = () ; type InstantiateEnv = () ; fn next_port (& self) { panic ! () ; } fn update_meta (& mut self , _meta : & Self :: Meta) { } fn instantiate (& self , _env : & mut Self :: InstantiateEnv , _meta : & mut Self :: Meta , _graph : HydroflowGraph , _extra_stmts : Vec < syn :: Stmt > ,) { } } } pub use in_memory_graph :: * ; pub use crate :: deploy :: LocalDeploy ; pub use crate :: deploy :: Deploy ; # [cfg (stageleft_macro)] impl < 'a , T : Deploy < 'a , Process = N , Cluster = C , ExternalProcess = E , Meta = M , GraphId = R > , N : Node < Meta = M > , C : Node < Meta = M > , E : Node < Meta = M > , M : Default , R , > LocalDeploy < 'a > for T { type Process = N ; type Cluster = C ; type ExternalProcess = E ; type Meta = M ; type GraphId = R ; fn has_trivial_node () -> bool { < T as Deploy < 'a > > :: has_trivial_node () } fn trivial_process (id : usize) -> Self :: Process { < T as Deploy < 'a > > :: trivial_process (id) } fn trivial_cluster (id : usize) -> Self :: Cluster { < T as Deploy < 'a > > :: trivial_cluster (id) } } pub use crate :: deploy :: ProcessSpec ; pub use crate :: deploy :: IntoProcessSpec ; # [cfg (stageleft_macro)] impl < 'a , D : LocalDeploy < 'a > + ? Sized , T : ProcessSpec < 'a , D > > IntoProcessSpec < 'a , D > for T { type ProcessSpec = T ; fn into_process_spec (self) -> Self :: ProcessSpec { self } } pub use crate :: deploy :: ClusterSpec ; pub use crate :: deploy :: ExternalSpec ; pub use crate :: deploy :: Node ; pub use crate :: deploy :: RegisterPort ; } pub mod deploy_runtime { pub use std :: collections :: HashMap ; pub use hydroflow :: util :: deploy :: { ConnectedDemux , ConnectedDirect , ConnectedSink , ConnectedSource , ConnectedTagged , DeployPorts , } ; pub use serde :: { Deserialize , Serialize } ; pub use stageleft :: { q , QuotedWithContext , RuntimeData } ; pub use crate :: deploy_runtime :: HydroflowPlusMeta ; pub fn cluster_members (cli : RuntimeData < & DeployPorts < HydroflowPlusMeta > > , of_cluster : usize ,) -> impl QuotedWithContext < & Vec < u32 > , () > + Copy { q ! (cli . meta . clusters . get (& of_cluster) . unwrap ()) } pub fn cluster_self_id (cli : RuntimeData < & DeployPorts < HydroflowPlusMeta > > ,) -> impl QuotedWithContext < u32 , () > + Copy { q ! (cli . meta . cluster_id . expect ("Tried to read Cluster ID on a non-cluster node")) } pub fn deploy_o2o (env : RuntimeData < & DeployPorts < HydroflowPlusMeta > > , p1_port : & str , p2_port : & str ,) -> (syn :: Expr , syn :: Expr) { ({ q ! ({ env . port (p1_port) . connect_local_blocking ::< ConnectedDirect > () . into_sink () }) . splice_untyped_ctx (& ()) } , { q ! ({ env . port (p2_port) . connect_local_blocking ::< ConnectedDirect > () . into_source () }) . splice_untyped_ctx (& ()) } ,) } pub fn deploy_o2m (env : RuntimeData < & DeployPorts < HydroflowPlusMeta > > , p1_port : & str , c2_port : & str ,) -> (syn :: Expr , syn :: Expr) { ({ q ! ({ env . port (p1_port) . connect_local_blocking ::< ConnectedDemux < ConnectedDirect >> () . into_sink () }) . splice_untyped_ctx (& ()) } , { q ! ({ env . port (c2_port) . connect_local_blocking ::< ConnectedDirect > () . into_source () }) . splice_untyped_ctx (& ()) } ,) } pub fn deploy_m2o (env : RuntimeData < & DeployPorts < HydroflowPlusMeta > > , c1_port : & str , p2_port : & str ,) -> (syn :: Expr , syn :: Expr) { ({ q ! ({ env . port (c1_port) . connect_local_blocking ::< ConnectedDirect > () . into_sink () }) . splice_untyped_ctx (& ()) } , { q ! ({ env . port (p2_port) . connect_local_blocking ::< ConnectedTagged < ConnectedDirect >> () . into_source () }) . splice_untyped_ctx (& ()) } ,) } pub fn deploy_m2m (env : RuntimeData < & DeployPorts < HydroflowPlusMeta > > , c1_port : & str , c2_port : & str ,) -> (syn :: Expr , syn :: Expr) { ({ q ! ({ env . port (c1_port) . connect_local_blocking ::< ConnectedDemux < ConnectedDirect >> () . into_sink () }) . splice_untyped_ctx (& ()) } , { q ! ({ env . port (c2_port) . connect_local_blocking ::< ConnectedTagged < ConnectedDirect >> () . into_source () }) . splice_untyped_ctx (& ()) } ,) } pub fn deploy_e2o (env : RuntimeData < & DeployPorts < HydroflowPlusMeta > > , _e1_port : & str , p2_port : & str ,) -> syn :: Expr { q ! ({ env . port (p2_port) . connect_local_blocking ::< ConnectedDirect > () . into_source () }) . splice_untyped_ctx (& ()) } pub fn deploy_o2e (env : RuntimeData < & DeployPorts < HydroflowPlusMeta > > , p1_port : & str , _e2_port : & str ,) -> syn :: Expr { q ! ({ env . port (p1_port) . connect_local_blocking ::< ConnectedDirect > () . into_sink () }) . splice_untyped_ctx (& ()) } } pub mod cycle { pub use crate :: __staged :: location :: { Location , LocationId } ; pub use crate :: __staged :: staging_util :: Invariant ; pub use crate :: cycle :: ForwardRefMarker ; pub use crate :: cycle :: TickCycleMarker ; pub use crate :: cycle :: DeferTick ; pub use crate :: cycle :: CycleComplete ; pub use crate :: cycle :: CycleCollection ; pub use crate :: cycle :: CycleCollectionWithInitial ; pub use crate :: cycle :: ForwardRef ; # [cfg (stageleft_macro)] impl < 'a , S : CycleComplete < 'a , ForwardRefMarker > > ForwardRef < 'a , S > { pub fn complete (self , stream : S) { let ident = self . ident ; S :: complete (stream , ident , self . expected_location) } } pub use crate :: cycle :: TickCycle ; # [cfg (stageleft_macro)] impl < 'a , S : CycleComplete < 'a , TickCycleMarker > + DeferTick > TickCycle < 'a , S > { pub fn complete_next_tick (self , stream : S) { let ident = self . ident ; S :: complete (stream . defer_tick () , ident , self . expected_location) } } } pub mod builder { pub use std :: cell :: RefCell ; pub use std :: collections :: HashMap ; pub use std :: marker :: PhantomData ; pub use std :: rc :: Rc ; # [cfg (feature = "build")] pub use compiled :: CompiledFlow ; # [cfg (feature = "build")] pub use deploy :: { DeployFlow , DeployResult } ; pub use stageleft :: * ; # [cfg (feature = "build")] pub use crate :: __staged :: deploy :: { ClusterSpec , Deploy , ExternalSpec , IntoProcessSpec , LocalDeploy } ; pub use crate :: __staged :: ir :: HydroLeaf ; pub use crate :: __staged :: location :: { Cluster , ExternalProcess , Process } ; pub use crate :: __staged :: staging_util :: Invariant ; # [cfg (feature = "build")] pub mod built { pub use std :: collections :: { BTreeMap , HashMap } ; pub use std :: marker :: PhantomData ; pub use hydroflow_lang :: graph :: { eliminate_extra_unions_tees , HydroflowGraph } ; pub use super :: compiled :: CompiledFlow ; pub use super :: deploy :: { DeployFlow , DeployResult } ; pub use crate :: __staged :: deploy :: { ClusterSpec , Deploy , ExternalSpec , IntoProcessSpec , LocalDeploy } ; pub use crate :: __staged :: ir :: HydroLeaf ; pub use crate :: __staged :: location :: { Cluster , ExternalProcess , Process } ; pub use crate :: __staged :: staging_util :: Invariant ; pub use crate :: builder :: built :: BuiltFlow ; # [cfg (stageleft_macro)] impl Drop for BuiltFlow < '_ > { fn drop (& mut self) { if ! self . used { panic ! ("Dropped BuiltFlow without instantiating, you may have forgotten to call `compile` or `deploy`.") ; } } } pub fn build_inner (ir : & mut Vec < HydroLeaf >) -> BTreeMap < usize , HydroflowGraph > { let mut builders = BTreeMap :: new () ; let mut built_tees = HashMap :: new () ; let mut next_stmt_id = 0 ; for leaf in ir { leaf . emit (& mut builders , & mut built_tees , & mut next_stmt_id) ; } builders . into_iter () . map (| (k , v) | { let (mut flat_graph , _ , _) = v . build () ; eliminate_extra_unions_tees (& mut flat_graph) ; (k , flat_graph) }) . collect () } # [cfg (stageleft_macro)] impl < 'a > BuiltFlow < 'a > { pub fn ir (& self) -> & Vec < HydroLeaf > { & self . ir } pub fn optimize_with (mut self , f : impl FnOnce (Vec < HydroLeaf >) -> Vec < HydroLeaf >) -> Self { self . used = true ; BuiltFlow { ir : f (std :: mem :: take (& mut self . ir)) , processes : std :: mem :: take (& mut self . processes) , clusters : std :: mem :: take (& mut self . clusters) , used : false , _phantom : PhantomData , } } pub fn with_default_optimize < D : LocalDeploy < 'a > > (self) -> DeployFlow < 'a , D > { self . optimize_with (crate :: rewrites :: persist_pullup :: persist_pullup) . into_deploy () } fn into_deploy < D : LocalDeploy < 'a > > (mut self) -> DeployFlow < 'a , D > { self . used = true ; let processes = if D :: has_trivial_node () { self . processes . iter () . map (| id | (* id , D :: trivial_process (* id))) . collect () } else { HashMap :: new () } ; let clusters = if D :: has_trivial_node () { self . clusters . iter () . map (| id | (* id , D :: trivial_cluster (* id))) . collect () } else { HashMap :: new () } ; DeployFlow { ir : std :: mem :: take (& mut self . ir) , nodes : processes , clusters , externals : HashMap :: new () , used : false , _phantom : PhantomData , } } pub fn with_process < P , D : LocalDeploy < 'a > > (self , process : & Process < P > , spec : impl IntoProcessSpec < 'a , D > ,) -> DeployFlow < 'a , D > { self . into_deploy () . with_process (process , spec) } pub fn with_external < P , D : LocalDeploy < 'a > > (self , process : & ExternalProcess < P > , spec : impl ExternalSpec < 'a , D > ,) -> DeployFlow < 'a , D > { self . into_deploy () . with_external (process , spec) } pub fn with_cluster < C , D : LocalDeploy < 'a > > (self , cluster : & Cluster < C > , spec : impl ClusterSpec < 'a , D > ,) -> DeployFlow < 'a , D > { self . into_deploy () . with_cluster (cluster , spec) } pub fn compile < D : Deploy < 'a > > (self , env : & D :: CompileEnv) -> CompiledFlow < 'a , D :: GraphId > { self . into_deploy :: < D > () . compile (env) } pub fn compile_no_network < D : LocalDeploy < 'a > > (self) -> CompiledFlow < 'a , D :: GraphId > { self . into_deploy :: < D > () . compile_no_network () } pub fn deploy < D : Deploy < 'a , CompileEnv = () > > (self , env : & mut D :: InstantiateEnv ,) -> DeployResult < 'a , D > { self . into_deploy :: < D > () . deploy (env) } } } # [cfg (feature = "build")] pub mod compiled { pub use std :: collections :: BTreeMap ; pub use std :: marker :: PhantomData ; pub use hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydroflow_lang :: graph :: { partition_graph , HydroflowGraph } ; pub use proc_macro2 :: TokenStream ; pub use quote :: quote ; pub use stageleft :: runtime_support :: FreeVariableWithContext ; pub use stageleft :: QuotedWithContext ; pub use crate :: __staged :: staging_util :: Invariant ; pub use crate :: builder :: compiled :: CompiledFlow ; # [cfg (stageleft_macro)] impl < ID > CompiledFlow < '_ , ID > { pub fn hydroflow_ir (& self) -> & BTreeMap < usize , HydroflowGraph > { & self . hydroflow_ir } pub fn take_ir (self) -> BTreeMap < usize , HydroflowGraph > { self . hydroflow_ir } } # [cfg (stageleft_macro)] impl < 'a > CompiledFlow < 'a , usize > { pub fn with_dynamic_id (self , id : impl QuotedWithContext < 'a , usize , () > ,) -> CompiledFlowWithId < 'a > { let hydroflow_crate = proc_macro_crate :: crate_name ("hydro_lang") . expect ("hydro_lang should be present in `Cargo.toml`") ; let root = match hydroflow_crate { proc_macro_crate :: FoundCrate :: Itself => quote ! { hydro_lang :: hydroflow } , proc_macro_crate :: FoundCrate :: Name (name) => { let ident = syn :: Ident :: new (& name , proc_macro2 :: Span :: call_site ()) ; quote ! { # ident :: hydroflow } } } ; let mut conditioned_tokens = None ; for (subgraph_id , flat_graph) in self . hydroflow_ir { let partitioned_graph = partition_graph (flat_graph) . expect ("Failed to partition (cycle detected).") ; let mut diagnostics = Vec :: new () ; let tokens = partitioned_graph . as_code (& root , true , quote :: quote ! () , & mut diagnostics) ; let my_extra_stmts = self . extra_stmts . get (& subgraph_id) . cloned () . unwrap_or_default () ; if let Some (conditioned_tokens) = conditioned_tokens . as_mut () { * conditioned_tokens = syn :: parse_quote ! { # conditioned_tokens else if __given_id == # subgraph_id { # (# my_extra_stmts) * # tokens } } ; } else { conditioned_tokens = Some (syn :: parse_quote ! { if __given_id == # subgraph_id { # (# my_extra_stmts) * # tokens } }) ; } } let conditioned_tokens : TokenStream = conditioned_tokens . unwrap () ; let id = id . splice_untyped () ; CompiledFlowWithId { tokens : syn :: parse_quote ! ({ let __given_id = # id ; # conditioned_tokens else { panic ! ("Invalid node id: {}" , __given_id) ; } }) , _phantom : PhantomData , } } } # [cfg (stageleft_macro)] impl < 'a , Ctx > QuotedWithContext < 'a , Hydroflow < 'a > , Ctx > for CompiledFlow < 'a , () > { } # [cfg (stageleft_macro)] impl < 'a , Ctx > FreeVariableWithContext < Ctx > for CompiledFlow < 'a , () > { type O = Hydroflow < 'a > ; fn to_tokens (mut self , _ctx : & Ctx) -> (Option < TokenStream > , Option < TokenStream >) { let hydroflow_crate = proc_macro_crate :: crate_name ("hydro_lang") . expect ("hydro_lang should be present in `Cargo.toml`") ; let root = match hydroflow_crate { proc_macro_crate :: FoundCrate :: Itself => quote ! { hydro_lang :: hydroflow } , proc_macro_crate :: FoundCrate :: Name (name) => { let ident = syn :: Ident :: new (& name , proc_macro2 :: Span :: call_site ()) ; quote ! { # ident :: hydroflow } } } ; if self . hydroflow_ir . len () != 1 { panic ! ("Expected exactly one subgraph in the Hydroflow IR") ; } let flat_graph = self . hydroflow_ir . remove (& 0) . unwrap () ; let partitioned_graph = partition_graph (flat_graph) . expect ("Failed to partition (cycle detected).") ; let mut diagnostics = Vec :: new () ; let tokens = partitioned_graph . as_code (& root , true , quote :: quote ! () , & mut diagnostics) ; (None , Some (tokens)) } } pub use crate :: builder :: compiled :: CompiledFlowWithId ; # [cfg (stageleft_macro)] impl < 'a , Ctx > QuotedWithContext < 'a , Hydroflow < 'a > , Ctx > for CompiledFlowWithId < 'a > { } # [cfg (stageleft_macro)] impl < 'a , Ctx > FreeVariableWithContext < Ctx > for CompiledFlowWithId < 'a > { type O = Hydroflow < 'a > ; fn to_tokens (self , _ctx : & Ctx) -> (Option < TokenStream > , Option < TokenStream >) { (None , Some (self . tokens)) } } } # [cfg (feature = "build")] pub mod deploy { pub use std :: collections :: { BTreeMap , HashMap } ; pub use std :: io :: Error ; pub use std :: marker :: PhantomData ; pub use std :: pin :: Pin ; pub use hydroflow :: bytes :: Bytes ; pub use hydroflow :: futures :: { Sink , Stream } ; pub use proc_macro2 :: Span ; pub use serde :: de :: DeserializeOwned ; pub use serde :: Serialize ; pub use stageleft :: QuotedWithContext ; pub use super :: built :: build_inner ; pub use super :: compiled :: CompiledFlow ; pub use crate :: __staged :: deploy :: { ClusterSpec , Deploy , ExternalSpec , IntoProcessSpec , LocalDeploy , Node , ProcessSpec , RegisterPort , } ; pub use crate :: __staged :: ir :: HydroLeaf ; pub use crate :: __staged :: location :: external_process :: { ExternalBincodeSink , ExternalBincodeStream , ExternalBytesPort , } ; pub use crate :: __staged :: location :: { Cluster , ExternalProcess , Location , LocationId , Process } ; pub use crate :: __staged :: staging_util :: Invariant ; pub use crate :: builder :: deploy :: DeployFlow ; # [cfg (stageleft_macro)] impl < 'a , D : LocalDeploy < 'a > > Drop for DeployFlow < 'a , D > { fn drop (& mut self) { if ! self . used { panic ! ("Dropped DeployFlow without instantiating, you may have forgotten to call `compile` or `deploy`.") ; } } } # [cfg (stageleft_macro)] impl < 'a , D : LocalDeploy < 'a > > DeployFlow < 'a , D > { pub fn ir (& self) -> & Vec < HydroLeaf > { & self . ir } pub fn with_process < P > (mut self , process : & Process < P > , spec : impl IntoProcessSpec < 'a , D > ,) -> Self { let tag_name = std :: any :: type_name :: < P > () . to_string () ; self . nodes . insert (process . id , spec . into_process_spec () . build (process . id , & tag_name) ,) ; self } pub fn with_external < P > (mut self , process : & ExternalProcess < P > , spec : impl ExternalSpec < 'a , D > ,) -> Self { let tag_name = std :: any :: type_name :: < P > () . to_string () ; self . externals . insert (process . id , spec . build (process . id , & tag_name)) ; self } pub fn with_cluster < C > (mut self , cluster : & Cluster < C > , spec : impl ClusterSpec < 'a , D >) -> Self { let tag_name = std :: any :: type_name :: < C > () . to_string () ; self . clusters . insert (cluster . id , spec . build (cluster . id , & tag_name)) ; self } pub fn compile_no_network (mut self) -> CompiledFlow < 'a , D :: GraphId > { self . used = true ; CompiledFlow { hydroflow_ir : build_inner (& mut self . ir) , extra_stmts : BTreeMap :: new () , _phantom : PhantomData , } } } # [cfg (stageleft_macro)] impl < 'a , D : Deploy < 'a > > DeployFlow < 'a , D > { pub fn compile (mut self , env : & D :: CompileEnv) -> CompiledFlow < 'a , D :: GraphId > { self . used = true ; let mut seen_tees : HashMap < _ , _ > = HashMap :: new () ; let mut flow_state_networked : Vec < HydroLeaf > = std :: mem :: take (& mut self . ir) . into_iter () . map (| leaf | { leaf . compile_network :: < D > (env , & mut seen_tees , & self . nodes , & self . clusters , & self . externals ,) }) . collect () ; let extra_stmts = self . extra_stmts (env) ; CompiledFlow { hydroflow_ir : build_inner (& mut flow_state_networked) , extra_stmts , _phantom : PhantomData , } } fn extra_stmts (& self , env : & < D as Deploy < 'a > > :: CompileEnv) -> BTreeMap < usize , Vec < syn :: Stmt > > { let all_locations_count = self . nodes . len () + self . clusters . len () ; let mut extra_stmts : BTreeMap < usize , Vec < syn :: Stmt > > = BTreeMap :: new () ; for & c_id in self . clusters . keys () { let self_id_ident = syn :: Ident :: new (& format ! ("__hydro_lang_cluster_self_id_{}" , c_id) , Span :: call_site () ,) ; let self_id_expr = D :: cluster_self_id (env) . splice_untyped () ; extra_stmts . entry (c_id) . or_default () . push (syn :: parse_quote ! { let # self_id_ident = # self_id_expr ; }) ; for other_location in 0 .. all_locations_count { let other_id_ident = syn :: Ident :: new (& format ! ("__hydro_lang_cluster_ids_{}" , c_id) , Span :: call_site () ,) ; let other_id_expr = D :: cluster_ids (env , c_id) . splice_untyped () ; extra_stmts . entry (other_location) . or_default () . push (syn :: parse_quote ! { let # other_id_ident = # other_id_expr ; }) ; } } extra_stmts } } # [cfg (stageleft_macro)] impl < 'a , D : Deploy < 'a , CompileEnv = () > > DeployFlow < 'a , D > { # [must_use] pub fn deploy (mut self , env : & mut D :: InstantiateEnv) -> DeployResult < 'a , D > { self . used = true ; let mut seen_tees_instantiate : HashMap < _ , _ > = HashMap :: new () ; let mut flow_state_networked : Vec < HydroLeaf > = std :: mem :: take (& mut self . ir) . into_iter () . map (| leaf | { leaf . compile_network :: < D > (& () , & mut seen_tees_instantiate , & self . nodes , & self . clusters , & self . externals ,) }) . collect () ; let mut compiled = build_inner (& mut flow_state_networked) ; let mut extra_stmts = self . extra_stmts (& ()) ; let mut meta = D :: Meta :: default () ; let (mut processes , mut clusters , mut externals) = (std :: mem :: take (& mut self . nodes) . into_iter () . map (| (node_id , node) | { node . instantiate (env , & mut meta , compiled . remove (& node_id) . unwrap () , extra_stmts . remove (& node_id) . unwrap_or_default () ,) ; (node_id , node) }) . collect :: < HashMap < _ , _ > > () , std :: mem :: take (& mut self . clusters) . into_iter () . map (| (cluster_id , cluster) | { cluster . instantiate (env , & mut meta , compiled . remove (& cluster_id) . unwrap () , extra_stmts . remove (& cluster_id) . unwrap_or_default () ,) ; (cluster_id , cluster) }) . collect :: < HashMap < _ , _ > > () , std :: mem :: take (& mut self . externals) . into_iter () . map (| (external_id , external) | { external . instantiate (env , & mut meta , compiled . remove (& external_id) . unwrap () , extra_stmts . remove (& external_id) . unwrap_or_default () ,) ; (external_id , external) }) . collect :: < HashMap < _ , _ > > () ,) ; for node in processes . values_mut () { node . update_meta (& meta) ; } for cluster in clusters . values_mut () { cluster . update_meta (& meta) ; } for external in externals . values_mut () { external . update_meta (& meta) ; } let mut seen_tees_connect = HashMap :: new () ; for leaf in flow_state_networked { leaf . connect_network (& mut seen_tees_connect) ; } DeployResult { processes , clusters , externals , } } } pub use crate :: builder :: deploy :: DeployResult ; # [cfg (stageleft_macro)] impl < 'a , D : Deploy < 'a > > DeployResult < 'a , D > { pub fn get_process < P > (& self , p : & Process < P >) -> & D :: Process { let id = match p . id () { LocationId :: Process (id) => id , _ => panic ! ("Process ID expected") , } ; self . processes . get (& id) . unwrap () } pub fn get_cluster < C > (& self , c : & Cluster < 'a , C >) -> & D :: Cluster { let id = match c . id () { LocationId :: Cluster (id) => id , _ => panic ! ("Cluster ID expected") , } ; self . clusters . get (& id) . unwrap () } pub fn get_external < P > (& self , p : & ExternalProcess < P >) -> & D :: ExternalProcess { self . externals . get (& p . id) . unwrap () } pub fn raw_port (& self , port : ExternalBytesPort) -> D :: ExternalRawPort { self . externals . get (& port . process_id) . unwrap () . raw_port (port . port_id) } pub async fn connect_sink_bytes (& self , port : ExternalBytesPort ,) -> Pin < Box < dyn Sink < Bytes , Error = Error > > > { self . externals . get (& port . process_id) . unwrap () . as_bytes_sink (port . port_id) . await } pub async fn connect_sink_bincode < T : Serialize + DeserializeOwned + 'static > (& self , port : ExternalBincodeSink < T > ,) -> Pin < Box < dyn Sink < T , Error = Error > > > { self . externals . get (& port . process_id) . unwrap () . as_bincode_sink (port . port_id) . await } pub async fn connect_source_bytes (& self , port : ExternalBytesPort ,) -> Pin < Box < dyn Stream < Item = Bytes > > > { self . externals . get (& port . process_id) . unwrap () . as_bytes_source (port . port_id) . await } pub async fn connect_source_bincode < T : Serialize + DeserializeOwned + 'static > (& self , port : ExternalBincodeStream < T > ,) -> Pin < Box < dyn Stream < Item = T > > > { self . externals . get (& port . process_id) . unwrap () . as_bincode_source (port . port_id) . await } } } pub use crate :: builder :: FlowStateInner ; pub type FlowState = Rc < RefCell < FlowStateInner > > ; pub use crate :: builder :: FLOW_USED_MESSAGE ; pub use crate :: builder :: FlowBuilder ; # [cfg (stageleft_macro)] impl Drop for FlowBuilder < '_ > { fn drop (& mut self) { if ! self . finalized { panic ! ("Dropped FlowBuilder without finalizing, you may have forgotten to call `with_default_optimize`, `optimize_with`, or `finalize`.") ; } } } # [cfg (stageleft_macro)] impl QuotedContext for FlowBuilder < '_ > { fn create () -> Self { FlowBuilder :: new () } } # [cfg (stageleft_macro)] impl < 'a > FlowBuilder < 'a > { # [expect (clippy :: new_without_default , reason = "call `new` explicitly, not `default`")] pub fn new () -> FlowBuilder < 'a > { FlowBuilder { flow_state : Rc :: new (RefCell :: new (FlowStateInner { leaves : Some (vec ! []) , next_external_out : 0 , cycle_counts : HashMap :: new () , next_clock_id : 0 , })) , nodes : RefCell :: new (vec ! []) , clusters : RefCell :: new (vec ! []) , next_node_id : RefCell :: new (0) , finalized : false , _phantom : PhantomData , } } # [cfg (feature = "build")] pub fn finalize (mut self) -> built :: BuiltFlow < 'a > { self . finalized = true ; built :: BuiltFlow { ir : self . flow_state . borrow_mut () . leaves . take () . unwrap () , processes : self . nodes . replace (vec ! []) , clusters : self . clusters . replace (vec ! []) , used : false , _phantom : PhantomData , } } # [cfg (feature = "build")] pub fn with_default_optimize < D : LocalDeploy < 'a > > (self) -> DeployFlow < 'a , D > { self . finalize () . with_default_optimize () } # [cfg (feature = "build")] pub fn optimize_with (self , f : impl FnOnce (Vec < HydroLeaf >) -> Vec < HydroLeaf > ,) -> built :: BuiltFlow < 'a > { self . finalize () . optimize_with (f) } pub fn flow_state (& self) -> & FlowState { & self . flow_state } pub fn process < P > (& self) -> Process < 'a , P > { let mut next_node_id = self . next_node_id . borrow_mut () ; let id = * next_node_id ; * next_node_id += 1 ; self . nodes . borrow_mut () . push (id) ; Process { id , flow_state : self . flow_state () . clone () , _phantom : PhantomData , } } pub fn external_process < P > (& self) -> ExternalProcess < 'a , P > { let mut next_node_id = self . next_node_id . borrow_mut () ; let id = * next_node_id ; * next_node_id += 1 ; self . nodes . borrow_mut () . push (id) ; ExternalProcess { id , flow_state : self . flow_state () . clone () , _phantom : PhantomData , } } pub fn cluster < C > (& self) -> Cluster < 'a , C > { let mut next_node_id = self . next_node_id . borrow_mut () ; let id = * next_node_id ; * next_node_id += 1 ; self . clusters . borrow_mut () . push (id) ; Cluster { id , flow_state : self . flow_state () . clone () , _phantom : PhantomData , } } # [cfg (feature = "build")] pub fn with_process < P , D : LocalDeploy < 'a > > (self , process : & Process < P > , spec : impl IntoProcessSpec < 'a , D > ,) -> DeployFlow < 'a , D > { self . with_default_optimize () . with_process (process , spec) } # [cfg (feature = "build")] pub fn with_external < P , D : LocalDeploy < 'a > > (self , process : & ExternalProcess < P > , spec : impl ExternalSpec < 'a , D > ,) -> DeployFlow < 'a , D > { self . with_default_optimize () . with_external (process , spec) } # [cfg (feature = "build")] pub fn with_cluster < C , D : LocalDeploy < 'a > > (self , cluster : & Cluster < C > , spec : impl ClusterSpec < 'a , D > ,) -> DeployFlow < 'a , D > { self . with_default_optimize () . with_cluster (cluster , spec) } # [cfg (feature = "build")] pub fn compile < D : Deploy < 'a > > (self , env : & D :: CompileEnv) -> CompiledFlow < 'a , D :: GraphId > { self . with_default_optimize :: < D > () . compile (env) } # [cfg (feature = "build")] pub fn compile_no_network < D : LocalDeploy < 'a > > (self) -> CompiledFlow < 'a , D :: GraphId > { self . with_default_optimize :: < D > () . compile_no_network () } # [cfg (feature = "build")] pub fn deploy < D : Deploy < 'a , CompileEnv = () > > (self , env : & mut D :: InstantiateEnv ,) -> DeployResult < 'a , D > { self . with_default_optimize () . deploy (env) } } } pub use builder :: FlowBuilder ; pub mod ir { pub use core :: panic ; pub use std :: cell :: RefCell ; # [cfg (feature = "build")] pub use std :: collections :: BTreeMap ; pub use std :: collections :: HashMap ; pub use std :: fmt :: Debug ; pub use std :: ops :: Deref ; pub use std :: rc :: Rc ; # [cfg (feature = "build")] pub use hydroflow_lang :: graph :: FlatGraphBuilder ; # [cfg (feature = "build")] pub use proc_macro2 :: Span ; pub use proc_macro2 :: TokenStream ; pub use quote :: ToTokens ; # [cfg (feature = "build")] pub use syn :: parse_quote ; # [cfg (feature = "build")] pub use crate :: __staged :: deploy :: { Deploy , RegisterPort } ; pub use crate :: __staged :: location :: LocationId ; pub use crate :: ir :: DebugExpr ; # [cfg (stageleft_macro)] impl From < syn :: Expr > for DebugExpr { fn from (expr : syn :: Expr) -> DebugExpr { DebugExpr (expr) } } # [cfg (stageleft_macro)] impl Deref for DebugExpr { type Target = syn :: Expr ; fn deref (& self) -> & Self :: Target { & self . 0 } } # [cfg (stageleft_macro)] impl ToTokens for DebugExpr { fn to_tokens (& self , tokens : & mut TokenStream) { self . 0 . to_tokens (tokens) ; } } # [cfg (stageleft_macro)] impl Debug for DebugExpr { fn fmt (& self , f : & mut std :: fmt :: Formatter < '_ >) -> std :: fmt :: Result { write ! (f , "{}" , self . 0 . to_token_stream ()) } } pub use crate :: ir :: DebugInstantiate ; # [cfg (stageleft_macro)] impl Debug for DebugInstantiate { fn fmt (& self , f : & mut std :: fmt :: Formatter < '_ >) -> std :: fmt :: Result { write ! (f , "<network instantiate>") } } pub use crate :: ir :: HydroSource ; pub use crate :: ir :: HydroLeaf ; # [cfg (stageleft_macro)] impl HydroLeaf { # [cfg (feature = "build")] pub fn compile_network < 'a , D : Deploy < 'a > > (self , compile_env : & D :: CompileEnv , seen_tees : & mut SeenTees , nodes : & HashMap < usize , D :: Process > , clusters : & HashMap < usize , D :: Cluster > , externals : & HashMap < usize , D :: ExternalProcess > ,) -> HydroLeaf { self . transform_children (| n , s | { n . compile_network :: < D > (compile_env , s , nodes , clusters , externals) ; } , seen_tees ,) } pub fn connect_network (self , seen_tees : & mut SeenTees) -> HydroLeaf { self . transform_children (| n , s | { n . connect_network (s) ; } , seen_tees ,) } pub fn transform_children (self , mut transform : impl FnMut (& mut HydroNode , & mut SeenTees) , seen_tees : & mut SeenTees ,) -> HydroLeaf { match self { HydroLeaf :: ForEach { f , mut input } => { transform (& mut input , seen_tees) ; HydroLeaf :: ForEach { f , input } } HydroLeaf :: DestSink { sink , mut input } => { transform (& mut input , seen_tees) ; HydroLeaf :: DestSink { sink , input } } HydroLeaf :: CycleSink { ident , location_kind , mut input , } => { transform (& mut input , seen_tees) ; HydroLeaf :: CycleSink { ident , location_kind , input , } } } } # [cfg (feature = "build")] pub fn emit (& self , graph_builders : & mut BTreeMap < usize , FlatGraphBuilder > , built_tees : & mut HashMap < * const RefCell < HydroNode > , (syn :: Ident , usize) > , next_stmt_id : & mut usize ,) { match self { HydroLeaf :: ForEach { f , input } => { let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; graph_builders . entry (input_location_id) . or_default () . add_statement (parse_quote ! { # input_ident -> for_each (# f) ; }) ; } HydroLeaf :: DestSink { sink , input } => { let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; graph_builders . entry (input_location_id) . or_default () . add_statement (parse_quote ! { # input_ident -> dest_sink (# sink) ; }) ; } HydroLeaf :: CycleSink { ident , location_kind , input , } => { let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; let location_id = match location_kind . root () { LocationId :: Process (id) => id , LocationId :: Cluster (id) => id , LocationId :: Tick (_ , _) => panic ! () , LocationId :: ExternalProcess (_) => panic ! () , } ; assert_eq ! (input_location_id , * location_id , "cycle_sink location mismatch") ; graph_builders . entry (* location_id) . or_default () . add_statement (parse_quote ! { # ident = # input_ident ; }) ; } } } } type PrintedTees = RefCell < Option < (usize , HashMap < * const RefCell < HydroNode > , usize >) > > ; thread_local ! { static PRINTED_TEES : PrintedTees = const { RefCell :: new (None) } ; } pub fn dbg_dedup_tee < T > (f : impl FnOnce () -> T) -> T { PRINTED_TEES . with (| printed_tees | { let mut printed_tees_mut = printed_tees . borrow_mut () ; * printed_tees_mut = Some ((0 , HashMap :: new ())) ; drop (printed_tees_mut) ; let ret = f () ; let mut printed_tees_mut = printed_tees . borrow_mut () ; * printed_tees_mut = None ; ret }) } pub use crate :: ir :: TeeNode ; # [cfg (stageleft_macro)] impl Debug for TeeNode { fn fmt (& self , f : & mut std :: fmt :: Formatter < '_ >) -> std :: fmt :: Result { PRINTED_TEES . with (| printed_tees | { let mut printed_tees_mut_borrow = printed_tees . borrow_mut () ; let printed_tees_mut = printed_tees_mut_borrow . as_mut () ; if let Some (printed_tees_mut) = printed_tees_mut { if let Some (existing) = printed_tees_mut . 1 . get (& (self . 0 . as_ref () as * const RefCell < HydroNode >)) { write ! (f , "<tee {}>" , existing) } else { let next_id = printed_tees_mut . 0 ; printed_tees_mut . 0 += 1 ; printed_tees_mut . 1 . insert (self . 0 . as_ref () as * const RefCell < HydroNode > , next_id) ; drop (printed_tees_mut_borrow) ; write ! (f , "<tee {}>: " , next_id) ? ; Debug :: fmt (& self . 0 . borrow () , f) } } else { drop (printed_tees_mut_borrow) ; write ! (f , "<tee>: ") ? ; Debug :: fmt (& self . 0 . borrow () , f) } }) } } pub use crate :: ir :: HydroNode ; pub type SeenTees = HashMap < * const RefCell < HydroNode > , Rc < RefCell < HydroNode > > > ; # [cfg (stageleft_macro)] impl < 'a > HydroNode { # [cfg (feature = "build")] pub fn compile_network < D : Deploy < 'a > > (& mut self , compile_env : & D :: CompileEnv , seen_tees : & mut SeenTees , nodes : & HashMap < usize , D :: Process > , clusters : & HashMap < usize , D :: Cluster > , externals : & HashMap < usize , D :: ExternalProcess > ,) { self . transform_children (| n , s | n . compile_network :: < D > (compile_env , s , nodes , clusters , externals) , seen_tees ,) ; if let HydroNode :: Network { from_location , from_key , to_location , to_key , instantiate_fn , .. } = self { let (sink_expr , source_expr , connect_fn) = match instantiate_fn { DebugInstantiate :: Building () => instantiate_network :: < D > (from_location , * from_key , to_location , * to_key , nodes , clusters , externals , compile_env ,) , DebugInstantiate :: Finalized (_ , _ , _) => panic ! ("network already finalized") , } ; * instantiate_fn = DebugInstantiate :: Finalized (sink_expr , source_expr , Some (connect_fn)) ; } } pub fn connect_network (& mut self , seen_tees : & mut SeenTees) { self . transform_children (| n , s | n . connect_network (s) , seen_tees) ; if let HydroNode :: Network { instantiate_fn , .. } = self { match instantiate_fn { DebugInstantiate :: Building () => panic ! ("network not built") , DebugInstantiate :: Finalized (_ , _ , connect_fn) => { connect_fn . take () . unwrap () () ; } } } } pub fn transform_bottom_up < C > (& mut self , mut transform : impl FnMut (& mut HydroNode , & mut C) + Copy , seen_tees : & mut SeenTees , ctx : & mut C ,) { self . transform_children (| n , s | n . transform_bottom_up (transform , s , ctx) , seen_tees) ; transform (self , ctx) } # [inline (always)] pub fn transform_children (& mut self , mut transform : impl FnMut (& mut HydroNode , & mut SeenTees) , seen_tees : & mut SeenTees ,) { match self { HydroNode :: Placeholder => { panic ! () ; } HydroNode :: Source { .. } => { } HydroNode :: CycleSource { .. } => { } HydroNode :: Tee { inner } => { if let Some (transformed) = seen_tees . get (& (inner . 0 . as_ref () as * const RefCell < HydroNode >)) { * inner = TeeNode (transformed . clone ()) ; } else { let transformed_cell = Rc :: new (RefCell :: new (HydroNode :: Placeholder)) ; seen_tees . insert (inner . 0 . as_ref () as * const RefCell < HydroNode > , transformed_cell . clone () ,) ; let mut orig = inner . 0 . replace (HydroNode :: Placeholder) ; transform (& mut orig , seen_tees) ; * transformed_cell . borrow_mut () = orig ; * inner = TeeNode (transformed_cell) ; } } HydroNode :: Persist (inner) => transform (inner . as_mut () , seen_tees) , HydroNode :: Unpersist (inner) => transform (inner . as_mut () , seen_tees) , HydroNode :: Delta (inner) => transform (inner . as_mut () , seen_tees) , HydroNode :: Chain (left , right) => { transform (left . as_mut () , seen_tees) ; transform (right . as_mut () , seen_tees) ; } HydroNode :: CrossProduct (left , right) => { transform (left . as_mut () , seen_tees) ; transform (right . as_mut () , seen_tees) ; } HydroNode :: CrossSingleton (left , right) => { transform (left . as_mut () , seen_tees) ; transform (right . as_mut () , seen_tees) ; } HydroNode :: Join (left , right) => { transform (left . as_mut () , seen_tees) ; transform (right . as_mut () , seen_tees) ; } HydroNode :: Difference (left , right) => { transform (left . as_mut () , seen_tees) ; transform (right . as_mut () , seen_tees) ; } HydroNode :: AntiJoin (left , right) => { transform (left . as_mut () , seen_tees) ; transform (right . as_mut () , seen_tees) ; } HydroNode :: Map { input , .. } => { transform (input . as_mut () , seen_tees) ; } HydroNode :: FlatMap { input , .. } => { transform (input . as_mut () , seen_tees) ; } HydroNode :: Filter { input , .. } => { transform (input . as_mut () , seen_tees) ; } HydroNode :: FilterMap { input , .. } => { transform (input . as_mut () , seen_tees) ; } HydroNode :: Sort (input) => { transform (input . as_mut () , seen_tees) ; } HydroNode :: DeferTick (input) => { transform (input . as_mut () , seen_tees) ; } HydroNode :: Enumerate { input , .. } => { transform (input . as_mut () , seen_tees) ; } HydroNode :: Inspect { input , .. } => { transform (input . as_mut () , seen_tees) ; } HydroNode :: Unique (input) => { transform (input . as_mut () , seen_tees) ; } HydroNode :: Fold { input , .. } => { transform (input . as_mut () , seen_tees) ; } HydroNode :: FoldKeyed { input , .. } => { transform (input . as_mut () , seen_tees) ; } HydroNode :: Reduce { input , .. } => { transform (input . as_mut () , seen_tees) ; } HydroNode :: ReduceKeyed { input , .. } => { transform (input . as_mut () , seen_tees) ; } HydroNode :: Network { input , .. } => { transform (input . as_mut () , seen_tees) ; } } } # [cfg (feature = "build")] pub fn emit (& self , graph_builders : & mut BTreeMap < usize , FlatGraphBuilder > , built_tees : & mut HashMap < * const RefCell < HydroNode > , (syn :: Ident , usize) > , next_stmt_id : & mut usize ,) -> (syn :: Ident , usize) { match self { HydroNode :: Placeholder => { panic ! () } HydroNode :: Persist (inner) => { let (inner_ident , location) = inner . emit (graph_builders , built_tees , next_stmt_id) ; let persist_id = * next_stmt_id ; * next_stmt_id += 1 ; let persist_ident = syn :: Ident :: new (& format ! ("stream_{}" , persist_id) , Span :: call_site ()) ; let builder = graph_builders . entry (location) . or_default () ; builder . add_statement (parse_quote ! { # persist_ident = # inner_ident -> persist ::<'static > () ; }) ; (persist_ident , location) } HydroNode :: Unpersist (_) => { panic ! ("Unpersist is a marker node and should have been optimized away. This is likely a compiler bug.") } HydroNode :: Delta (inner) => { let (inner_ident , location) = inner . emit (graph_builders , built_tees , next_stmt_id) ; let delta_id = * next_stmt_id ; * next_stmt_id += 1 ; let delta_ident = syn :: Ident :: new (& format ! ("stream_{}" , delta_id) , Span :: call_site ()) ; let builder = graph_builders . entry (location) . or_default () ; builder . add_statement (parse_quote ! { # delta_ident = # inner_ident -> multiset_delta () ; }) ; (delta_ident , location) } HydroNode :: Source { source , location_kind , } => { let location_id = match location_kind { LocationId :: Process (id) => id , LocationId :: Cluster (id) => id , LocationId :: Tick (_ , _) => panic ! () , LocationId :: ExternalProcess (id) => id , } ; if let HydroSource :: ExternalNetwork () = source { (syn :: Ident :: new ("DUMMY" , Span :: call_site ()) , * location_id) } else { let source_id = * next_stmt_id ; * next_stmt_id += 1 ; let source_ident = syn :: Ident :: new (& format ! ("stream_{}" , source_id) , Span :: call_site ()) ; let source_stmt = match source { HydroSource :: Stream (expr) => { parse_quote ! { # source_ident = source_stream (# expr) ; } } HydroSource :: ExternalNetwork () => { unreachable ! () } HydroSource :: Iter (expr) => { parse_quote ! { # source_ident = source_iter (# expr) ; } } HydroSource :: Spin () => { parse_quote ! { # source_ident = spin () ; } } } ; graph_builders . entry (* location_id) . or_default () . add_statement (source_stmt) ; (source_ident , * location_id) } } HydroNode :: CycleSource { ident , location_kind , } => { let location_id = match location_kind . root () { LocationId :: Process (id) => id , LocationId :: Cluster (id) => id , LocationId :: Tick (_ , _) => panic ! () , LocationId :: ExternalProcess (_) => panic ! () , } ; (ident . clone () , * location_id) } HydroNode :: Tee { inner } => { if let Some (ret) = built_tees . get (& (inner . 0 . as_ref () as * const RefCell < HydroNode >)) { ret . clone () } else { let (inner_ident , inner_location_id) = inner . 0 . borrow () . emit (graph_builders , built_tees , next_stmt_id) ; let tee_id = * next_stmt_id ; * next_stmt_id += 1 ; let tee_ident = syn :: Ident :: new (& format ! ("stream_{}" , tee_id) , Span :: call_site ()) ; let builder = graph_builders . entry (inner_location_id) . or_default () ; builder . add_statement (parse_quote ! { # tee_ident = # inner_ident -> tee () ; }) ; built_tees . insert (inner . 0 . as_ref () as * const RefCell < HydroNode > , (tee_ident . clone () , inner_location_id) ,) ; (tee_ident , inner_location_id) } } HydroNode :: Chain (left , right) => { let (left_ident , left_location_id) = left . emit (graph_builders , built_tees , next_stmt_id) ; let (right_ident , right_location_id) = right . emit (graph_builders , built_tees , next_stmt_id) ; assert_eq ! (left_location_id , right_location_id , "chain inputs must be in the same location") ; let union_id = * next_stmt_id ; * next_stmt_id += 1 ; let chain_ident = syn :: Ident :: new (& format ! ("stream_{}" , union_id) , Span :: call_site ()) ; let builder = graph_builders . entry (left_location_id) . or_default () ; builder . add_statement (parse_quote ! { # chain_ident = chain () ; }) ; builder . add_statement (parse_quote ! { # left_ident -> [0] # chain_ident ; }) ; builder . add_statement (parse_quote ! { # right_ident -> [1] # chain_ident ; }) ; (chain_ident , left_location_id) } HydroNode :: CrossSingleton (left , right) => { let (left_ident , left_location_id) = left . emit (graph_builders , built_tees , next_stmt_id) ; let (right_ident , right_location_id) = right . emit (graph_builders , built_tees , next_stmt_id) ; assert_eq ! (left_location_id , right_location_id , "cross_singleton inputs must be in the same location") ; let union_id = * next_stmt_id ; * next_stmt_id += 1 ; let cross_ident = syn :: Ident :: new (& format ! ("stream_{}" , union_id) , Span :: call_site ()) ; let builder = graph_builders . entry (left_location_id) . or_default () ; builder . add_statement (parse_quote ! { # cross_ident = cross_singleton () ; }) ; builder . add_statement (parse_quote ! { # left_ident -> [input] # cross_ident ; }) ; builder . add_statement (parse_quote ! { # right_ident -> [single] # cross_ident ; }) ; (cross_ident , left_location_id) } HydroNode :: CrossProduct (..) | HydroNode :: Join (..) => { let operator : syn :: Ident = if matches ! (self , HydroNode :: CrossProduct (..)) { parse_quote ! (cross_join_multiset) } else { parse_quote ! (join_multiset) } ; let (HydroNode :: CrossProduct (left , right) | HydroNode :: Join (left , right)) = self else { unreachable ! () } ; let (left_inner , left_was_persist) = if let HydroNode :: Persist (left) = left . as_ref () { (left , true) } else { (left , false) } ; let (right_inner , right_was_persist) = if let HydroNode :: Persist (right) = right . as_ref () { (right , true) } else { (right , false) } ; let (left_ident , left_location_id) = left_inner . emit (graph_builders , built_tees , next_stmt_id) ; let (right_ident , right_location_id) = right_inner . emit (graph_builders , built_tees , next_stmt_id) ; assert_eq ! (left_location_id , right_location_id , "join / cross product inputs must be in the same location") ; let stream_id = * next_stmt_id ; * next_stmt_id += 1 ; let stream_ident = syn :: Ident :: new (& format ! ("stream_{}" , stream_id) , Span :: call_site ()) ; let builder = graph_builders . entry (left_location_id) . or_default () ; match (left_was_persist , right_was_persist) { (true , true) => { builder . add_statement (parse_quote ! { # stream_ident = # operator ::<'static , 'static > () ; }) ; } (true , false) => { builder . add_statement (parse_quote ! { # stream_ident = # operator ::<'static , 'tick > () ; }) ; } (false , true) => { builder . add_statement (parse_quote ! { # stream_ident = # operator ::<'tick , 'static > () ; }) ; } (false , false) => { builder . add_statement (parse_quote ! { # stream_ident = # operator ::<'tick , 'tick > () ; }) ; } } ; builder . add_statement (parse_quote ! { # left_ident -> [0] # stream_ident ; }) ; builder . add_statement (parse_quote ! { # right_ident -> [1] # stream_ident ; }) ; (stream_ident , left_location_id) } HydroNode :: Difference (..) | HydroNode :: AntiJoin (..) => { let operator : syn :: Ident = if matches ! (self , HydroNode :: Difference (..)) { parse_quote ! (difference_multiset) } else { parse_quote ! (anti_join_multiset) } ; let (HydroNode :: Difference (left , right) | HydroNode :: AntiJoin (left , right)) = self else { unreachable ! () } ; let (right , right_was_persist) = if let HydroNode :: Persist (right) = right . as_ref () { (right , true) } else { (right , false) } ; let (left_ident , left_location_id) = left . emit (graph_builders , built_tees , next_stmt_id) ; let (right_ident , right_location_id) = right . emit (graph_builders , built_tees , next_stmt_id) ; assert_eq ! (left_location_id , right_location_id , "difference / anti join inputs must be in the same location") ; let stream_id = * next_stmt_id ; * next_stmt_id += 1 ; let stream_ident = syn :: Ident :: new (& format ! ("stream_{}" , stream_id) , Span :: call_site ()) ; let builder = graph_builders . entry (left_location_id) . or_default () ; if right_was_persist { builder . add_statement (parse_quote ! { # stream_ident = # operator ::<'tick , 'static > () ; }) ; } else { builder . add_statement (parse_quote ! { # stream_ident = # operator ::<'tick , 'tick > () ; }) ; } builder . add_statement (parse_quote ! { # left_ident -> [pos] # stream_ident ; }) ; builder . add_statement (parse_quote ! { # right_ident -> [neg] # stream_ident ; }) ; (stream_ident , left_location_id) } HydroNode :: Map { f , input } => { let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; let map_id = * next_stmt_id ; * next_stmt_id += 1 ; let map_ident = syn :: Ident :: new (& format ! ("stream_{}" , map_id) , Span :: call_site ()) ; let builder = graph_builders . entry (input_location_id) . or_default () ; builder . add_statement (parse_quote ! { # map_ident = # input_ident -> map (# f) ; }) ; (map_ident , input_location_id) } HydroNode :: FlatMap { f , input } => { let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; let flat_map_id = * next_stmt_id ; * next_stmt_id += 1 ; let flat_map_ident = syn :: Ident :: new (& format ! ("stream_{}" , flat_map_id) , Span :: call_site ()) ; let builder = graph_builders . entry (input_location_id) . or_default () ; builder . add_statement (parse_quote ! { # flat_map_ident = # input_ident -> flat_map (# f) ; }) ; (flat_map_ident , input_location_id) } HydroNode :: Filter { f , input } => { let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; let filter_id = * next_stmt_id ; * next_stmt_id += 1 ; let filter_ident = syn :: Ident :: new (& format ! ("stream_{}" , filter_id) , Span :: call_site ()) ; let builder = graph_builders . entry (input_location_id) . or_default () ; builder . add_statement (parse_quote ! { # filter_ident = # input_ident -> filter (# f) ; }) ; (filter_ident , input_location_id) } HydroNode :: FilterMap { f , input } => { let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; let filter_map_id = * next_stmt_id ; * next_stmt_id += 1 ; let filter_map_ident = syn :: Ident :: new (& format ! ("stream_{}" , filter_map_id) , Span :: call_site ()) ; let builder = graph_builders . entry (input_location_id) . or_default () ; builder . add_statement (parse_quote ! { # filter_map_ident = # input_ident -> filter_map (# f) ; }) ; (filter_map_ident , input_location_id) } HydroNode :: Sort (input) => { let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; let sort_id = * next_stmt_id ; * next_stmt_id += 1 ; let sort_ident = syn :: Ident :: new (& format ! ("stream_{}" , sort_id) , Span :: call_site ()) ; let builder = graph_builders . entry (input_location_id) . or_default () ; builder . add_statement (parse_quote ! { # sort_ident = # input_ident -> sort () ; }) ; (sort_ident , input_location_id) } HydroNode :: DeferTick (input) => { let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; let defer_tick_id = * next_stmt_id ; * next_stmt_id += 1 ; let defer_tick_ident = syn :: Ident :: new (& format ! ("stream_{}" , defer_tick_id) , Span :: call_site ()) ; let builder = graph_builders . entry (input_location_id) . or_default () ; builder . add_statement (parse_quote ! { # defer_tick_ident = # input_ident -> defer_tick_lazy () ; }) ; (defer_tick_ident , input_location_id) } HydroNode :: Enumerate { is_static , input } => { let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; let enumerate_id = * next_stmt_id ; * next_stmt_id += 1 ; let enumerate_ident = syn :: Ident :: new (& format ! ("stream_{}" , enumerate_id) , Span :: call_site ()) ; let builder = graph_builders . entry (input_location_id) . or_default () ; if * is_static { builder . add_statement (parse_quote ! { # enumerate_ident = # input_ident -> enumerate ::<'static > () ; }) ; } else { builder . add_statement (parse_quote ! { # enumerate_ident = # input_ident -> enumerate ::<'tick > () ; }) ; } (enumerate_ident , input_location_id) } HydroNode :: Inspect { f , input } => { let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; let inspect_id = * next_stmt_id ; * next_stmt_id += 1 ; let inspect_ident = syn :: Ident :: new (& format ! ("stream_{}" , inspect_id) , Span :: call_site ()) ; let builder = graph_builders . entry (input_location_id) . or_default () ; builder . add_statement (parse_quote ! { # inspect_ident = # input_ident -> inspect (# f) ; }) ; (inspect_ident , input_location_id) } HydroNode :: Unique (input) => { let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; let unique_id = * next_stmt_id ; * next_stmt_id += 1 ; let unique_ident = syn :: Ident :: new (& format ! ("stream_{}" , unique_id) , Span :: call_site ()) ; let builder = graph_builders . entry (input_location_id) . or_default () ; builder . add_statement (parse_quote ! { # unique_ident = # input_ident -> unique ::<'tick > () ; }) ; (unique_ident , input_location_id) } HydroNode :: Fold { .. } | HydroNode :: FoldKeyed { .. } => { let operator : syn :: Ident = if matches ! (self , HydroNode :: Fold { .. }) { parse_quote ! (fold) } else { parse_quote ! (fold_keyed) } ; let (HydroNode :: Fold { init , acc , input } | HydroNode :: FoldKeyed { init , acc , input }) = self else { unreachable ! () } ; let (input , input_was_persist) = if let HydroNode :: Persist (input) = input . as_ref () { (input , true) } else { (input , false) } ; let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; let reduce_id = * next_stmt_id ; * next_stmt_id += 1 ; let fold_ident = syn :: Ident :: new (& format ! ("stream_{}" , reduce_id) , Span :: call_site ()) ; let builder = graph_builders . entry (input_location_id) . or_default () ; if input_was_persist { builder . add_statement (parse_quote ! { # fold_ident = # input_ident -> # operator ::<'static > (# init , # acc) ; }) ; } else { builder . add_statement (parse_quote ! { # fold_ident = # input_ident -> # operator ::<'tick > (# init , # acc) ; }) ; } (fold_ident , input_location_id) } HydroNode :: Reduce { .. } | HydroNode :: ReduceKeyed { .. } => { let operator : syn :: Ident = if matches ! (self , HydroNode :: Reduce { .. }) { parse_quote ! (reduce) } else { parse_quote ! (reduce_keyed) } ; let (HydroNode :: Reduce { f , input } | HydroNode :: ReduceKeyed { f , input }) = self else { unreachable ! () } ; let (input , input_was_persist) = if let HydroNode :: Persist (input) = input . as_ref () { (input , true) } else { (input , false) } ; let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; let reduce_id = * next_stmt_id ; * next_stmt_id += 1 ; let reduce_ident = syn :: Ident :: new (& format ! ("stream_{}" , reduce_id) , Span :: call_site ()) ; let builder = graph_builders . entry (input_location_id) . or_default () ; if input_was_persist { builder . add_statement (parse_quote ! { # reduce_ident = # input_ident -> # operator ::<'static > (# f) ; }) ; } else { builder . add_statement (parse_quote ! { # reduce_ident = # input_ident -> # operator ::<'tick > (# f) ; }) ; } (reduce_ident , input_location_id) } HydroNode :: Network { from_location : _ , from_key : _ , to_location , to_key : _ , serialize_fn : serialize_pipeline , instantiate_fn , deserialize_fn : deserialize_pipeline , input , } => { let (sink_expr , source_expr , _connect_fn) = match instantiate_fn { DebugInstantiate :: Building () => { panic ! ("Expected the network to be finalized") } DebugInstantiate :: Finalized (sink , source , connect_fn) => { (sink , source , connect_fn) } } ; let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; let sender_builder = graph_builders . entry (input_location_id) . or_default () ; if let Some (serialize_pipeline) = serialize_pipeline { sender_builder . add_statement (parse_quote ! { # input_ident -> map (# serialize_pipeline) -> dest_sink (# sink_expr) ; }) ; } else { sender_builder . add_statement (parse_quote ! { # input_ident -> dest_sink (# sink_expr) ; }) ; } let to_id = match to_location { LocationId :: Process (id) => id , LocationId :: Cluster (id) => id , LocationId :: Tick (_ , _) => panic ! () , LocationId :: ExternalProcess (id) => id , } ; let receiver_builder = graph_builders . entry (* to_id) . or_default () ; let receiver_stream_id = * next_stmt_id ; * next_stmt_id += 1 ; let receiver_stream_ident = syn :: Ident :: new (& format ! ("stream_{}" , receiver_stream_id) , Span :: call_site ()) ; if let Some (deserialize_pipeline) = deserialize_pipeline { receiver_builder . add_statement (parse_quote ! { # receiver_stream_ident = source_stream (# source_expr) -> map (# deserialize_pipeline) ; }) ; } else { receiver_builder . add_statement (parse_quote ! { # receiver_stream_ident = source_stream (# source_expr) ; }) ; } (receiver_stream_ident , * to_id) } } } } # [cfg (feature = "build")] # [expect (clippy :: too_many_arguments , reason = "networking internals")] pub fn instantiate_network < 'a , D : Deploy < 'a > > (from_location : & mut LocationId , from_key : Option < usize > , to_location : & mut LocationId , to_key : Option < usize > , nodes : & HashMap < usize , D :: Process > , clusters : & HashMap < usize , D :: Cluster > , externals : & HashMap < usize , D :: ExternalProcess > , compile_env : & D :: CompileEnv ,) -> (syn :: Expr , syn :: Expr , Box < dyn FnOnce () >) { let ((sink , source) , connect_fn) = match (from_location , to_location) { (LocationId :: Process (from) , LocationId :: Process (to)) => { let from_node = nodes . get (from) . unwrap_or_else (| | { panic ! ("A process used in the graph was not instantiated: {}" , from) }) . clone () ; let to_node = nodes . get (to) . unwrap_or_else (| | { panic ! ("A process used in the graph was not instantiated: {}" , to) }) . clone () ; let sink_port = D :: allocate_process_port (& from_node) ; let source_port = D :: allocate_process_port (& to_node) ; (D :: o2o_sink_source (compile_env , & from_node , & sink_port , & to_node , & source_port) , D :: o2o_connect (& from_node , & sink_port , & to_node , & source_port) ,) } (LocationId :: Process (from) , LocationId :: Cluster (to)) => { let from_node = nodes . get (from) . unwrap_or_else (| | { panic ! ("A process used in the graph was not instantiated: {}" , from) }) . clone () ; let to_node = clusters . get (to) . unwrap_or_else (| | { panic ! ("A cluster used in the graph was not instantiated: {}" , to) }) . clone () ; let sink_port = D :: allocate_process_port (& from_node) ; let source_port = D :: allocate_cluster_port (& to_node) ; (D :: o2m_sink_source (compile_env , & from_node , & sink_port , & to_node , & source_port) , D :: o2m_connect (& from_node , & sink_port , & to_node , & source_port) ,) } (LocationId :: Cluster (from) , LocationId :: Process (to)) => { let from_node = clusters . get (from) . unwrap_or_else (| | { panic ! ("A cluster used in the graph was not instantiated: {}" , from) }) . clone () ; let to_node = nodes . get (to) . unwrap_or_else (| | { panic ! ("A process used in the graph was not instantiated: {}" , to) }) . clone () ; let sink_port = D :: allocate_cluster_port (& from_node) ; let source_port = D :: allocate_process_port (& to_node) ; (D :: m2o_sink_source (compile_env , & from_node , & sink_port , & to_node , & source_port) , D :: m2o_connect (& from_node , & sink_port , & to_node , & source_port) ,) } (LocationId :: Cluster (from) , LocationId :: Cluster (to)) => { let from_node = clusters . get (from) . unwrap_or_else (| | { panic ! ("A cluster used in the graph was not instantiated: {}" , from) }) . clone () ; let to_node = clusters . get (to) . unwrap_or_else (| | { panic ! ("A cluster used in the graph was not instantiated: {}" , to) }) . clone () ; let sink_port = D :: allocate_cluster_port (& from_node) ; let source_port = D :: allocate_cluster_port (& to_node) ; (D :: m2m_sink_source (compile_env , & from_node , & sink_port , & to_node , & source_port) , D :: m2m_connect (& from_node , & sink_port , & to_node , & source_port) ,) } (LocationId :: ExternalProcess (from) , LocationId :: Process (to)) => { let from_node = externals . get (from) . unwrap_or_else (| | { panic ! ("A external used in the graph was not instantiated: {}" , from) }) . clone () ; let to_node = nodes . get (to) . unwrap_or_else (| | { panic ! ("A process used in the graph was not instantiated: {}" , to) }) . clone () ; let sink_port = D :: allocate_external_port (& from_node) ; let source_port = D :: allocate_process_port (& to_node) ; from_node . register (from_key . unwrap () , sink_port . clone ()) ; ((parse_quote ! (DUMMY) , D :: e2o_source (compile_env , & from_node , & sink_port , & to_node , & source_port) ,) , D :: e2o_connect (& from_node , & sink_port , & to_node , & source_port) ,) } (LocationId :: ExternalProcess (_from) , LocationId :: Cluster (_to)) => { todo ! ("NYI") } (LocationId :: ExternalProcess (_) , LocationId :: ExternalProcess (_)) => { panic ! ("Cannot send from external to external") } (LocationId :: Process (from) , LocationId :: ExternalProcess (to)) => { let from_node = nodes . get (from) . unwrap_or_else (| | { panic ! ("A process used in the graph was not instantiated: {}" , from) }) . clone () ; let to_node = externals . get (to) . unwrap_or_else (| | { panic ! ("A external used in the graph was not instantiated: {}" , to) }) . clone () ; let sink_port = D :: allocate_process_port (& from_node) ; let source_port = D :: allocate_external_port (& to_node) ; to_node . register (to_key . unwrap () , source_port . clone ()) ; ((D :: o2e_sink (compile_env , & from_node , & sink_port , & to_node , & source_port) , parse_quote ! (DUMMY) ,) , D :: o2e_connect (& from_node , & sink_port , & to_node , & source_port) ,) } (LocationId :: Cluster (_from) , LocationId :: ExternalProcess (_to)) => { todo ! ("NYI") } (LocationId :: Tick (_ , _) , _) => panic ! () , (_ , LocationId :: Tick (_ , _)) => panic ! () , } ; (sink , source , connect_fn) } } pub mod rewrites { pub mod persist_pullup { pub use std :: cell :: RefCell ; pub use std :: collections :: HashSet ; pub use crate :: __staged :: ir :: * ; pub fn persist_pullup_node (node : & mut HydroNode , persist_pulled_tees : & mut HashSet < * const RefCell < HydroNode > > ,) { * node = match_box :: match_box ! { match std :: mem :: replace (node , HydroNode :: Placeholder) { HydroNode :: Unpersist (mb ! (* HydroNode :: Persist (mb ! (* behind_persist)))) => behind_persist , HydroNode :: Delta (mb ! (* HydroNode :: Persist (mb ! (* behind_persist)))) => behind_persist , HydroNode :: Tee { inner } => { if persist_pulled_tees . contains (& (inner . 0 . as_ref () as * const RefCell < HydroNode >)) { HydroNode :: Persist (Box :: new (HydroNode :: Tee { inner : TeeNode (inner . 0 . clone ()) , })) } else if matches ! (* inner . 0 . borrow () , HydroNode :: Persist (_)) { persist_pulled_tees . insert (inner . 0 . as_ref () as * const RefCell < HydroNode >) ; if let HydroNode :: Persist (behind_persist) = inner . 0 . replace (HydroNode :: Placeholder) { * inner . 0 . borrow_mut () = * behind_persist ; } else { unreachable ! () } HydroNode :: Persist (Box :: new (HydroNode :: Tee { inner : TeeNode (inner . 0 . clone ()) , })) } else { HydroNode :: Tee { inner } } } HydroNode :: Map { f , input : mb ! (* HydroNode :: Persist (behind_persist)) , } => HydroNode :: Persist (Box :: new (HydroNode :: Map { f , input : behind_persist , })) , HydroNode :: FilterMap { f , input : mb ! (* HydroNode :: Persist (behind_persist)) , } => HydroNode :: Persist (Box :: new (HydroNode :: FilterMap { f , input : behind_persist , })) , HydroNode :: FlatMap { f , input : mb ! (* HydroNode :: Persist (behind_persist)) , } => HydroNode :: Persist (Box :: new (HydroNode :: FlatMap { f , input : behind_persist , })) , HydroNode :: Filter { f , input : mb ! (* HydroNode :: Persist (behind_persist)) , } => HydroNode :: Persist (Box :: new (HydroNode :: Filter { f , input : behind_persist , })) , HydroNode :: Network { from_location , from_key , to_location , to_key , serialize_fn , instantiate_fn , deserialize_fn , input : mb ! (* HydroNode :: Persist (behind_persist)) , .. } => HydroNode :: Persist (Box :: new (HydroNode :: Network { from_location , from_key , to_location , to_key , serialize_fn , instantiate_fn , deserialize_fn , input : behind_persist , })) , HydroNode :: Chain (mb ! (* HydroNode :: Persist (left)) , mb ! (* HydroNode :: Persist (right))) => { HydroNode :: Persist (Box :: new (HydroNode :: Chain (left , right))) } HydroNode :: CrossProduct (mb ! (* HydroNode :: Persist (left)) , mb ! (* HydroNode :: Persist (right))) => { HydroNode :: Persist (Box :: new (HydroNode :: Delta (Box :: new (HydroNode :: CrossProduct (Box :: new (HydroNode :: Persist (left)) , Box :: new (HydroNode :: Persist (right)) ,) ,)))) } HydroNode :: Join (mb ! (* HydroNode :: Persist (left)) , mb ! (* HydroNode :: Persist (right))) => { HydroNode :: Persist (Box :: new (HydroNode :: Delta (Box :: new (HydroNode :: Join (Box :: new (HydroNode :: Persist (left)) , Box :: new (HydroNode :: Persist (right)) ,))))) } HydroNode :: Unique (mb ! (* HydroNode :: Persist (inner))) => { HydroNode :: Persist (Box :: new (HydroNode :: Delta (Box :: new (HydroNode :: Unique (Box :: new (HydroNode :: Persist (inner)) ,))))) } node => node , } } ; } pub fn persist_pullup (ir : Vec < HydroLeaf >) -> Vec < HydroLeaf > { let mut seen_tees = Default :: default () ; let mut persist_pulled_tees = Default :: default () ; ir . into_iter () . map (| l | { l . transform_children (| n , s | n . transform_bottom_up (persist_pullup_node , s , & mut persist_pulled_tees) , & mut seen_tees ,) }) . collect () } # [cfg (stageleft_macro)] pub mod tests { pub use stageleft :: * ; pub use crate :: __staged :: deploy :: MultiGraph ; pub use crate :: __staged :: location :: Location ; # [test] pub fn persist_pullup_through_map () { let flow = crate :: builder :: FlowBuilder :: new () ; let process = flow . process :: < () > () ; process . source_iter (q ! (0 .. 10)) . map (q ! (| v | v + 1)) . for_each (q ! (| n | println ! ("{}" , n))) ; let built = flow . finalize () ; insta :: assert_debug_snapshot ! (built . ir ()) ; let optimized = built . optimize_with (super :: persist_pullup) ; insta :: assert_debug_snapshot ! (optimized . ir ()) ; for (id , graph) in optimized . compile_no_network :: < MultiGraph > () . hydroflow_ir () { insta :: with_settings ! ({ snapshot_suffix => format ! ("surface_graph_{id}") } , { insta :: assert_snapshot ! (graph . surface_syntax_string ()) ; }) ; } } # [test] pub fn persist_pullup_behind_tee () { let flow = crate :: builder :: FlowBuilder :: new () ; let process = flow . process :: < () > () ; let tick = process . tick () ; let before_tee = unsafe { process . source_iter (q ! (0 .. 10)) . timestamped (& tick) . tick_batch () . persist () } ; before_tee . clone () . map (q ! (| v | v + 1)) . all_ticks () . for_each (q ! (| n | println ! ("{}" , n))) ; before_tee . clone () . map (q ! (| v | v + 1)) . all_ticks () . for_each (q ! (| n | println ! ("{}" , n))) ; let built = flow . finalize () ; insta :: assert_debug_snapshot ! (built . ir ()) ; let optimized = built . optimize_with (super :: persist_pullup) ; insta :: assert_debug_snapshot ! (optimized . ir ()) ; for (id , graph) in optimized . compile_no_network :: < MultiGraph > () . hydroflow_ir () { insta :: with_settings ! ({ snapshot_suffix => format ! ("surface_graph_{id}") } , { insta :: assert_snapshot ! (graph . surface_syntax_string ()) ; }) ; } } } } pub mod profiler { pub use std :: cell :: RefCell ; pub use hydroflow :: futures :: channel :: mpsc :: UnboundedSender ; pub use stageleft :: * ; pub use super :: profiler as myself ; pub use crate :: __staged :: ir :: * ; pub fn increment_counter (count : & mut u64) { * count += 1 ; } pub fn quoted_any_fn < 'a , F : Fn (& usize) + 'a , Q : IntoQuotedMut < 'a , F , () > > (q : Q) -> Q { q } # [doc = " Add a profiling node before each node to count the cardinality of its input"] pub fn add_profiling_node < 'a > (node : & mut HydroNode , counters : RuntimeData < & 'a RefCell < Vec < u64 > > > , counter_queue : RuntimeData < & 'a RefCell < UnboundedSender < (usize , u64) > > > , id : & mut u32 , seen_tees : & mut SeenTees ,) { let my_id = * id ; * id += 1 ; node . transform_children (| node , seen_tees | add_profiling_node (node , counters , counter_queue , id , seen_tees) , seen_tees ,) ; let orig_node = std :: mem :: replace (node , HydroNode :: Placeholder) ; * node = HydroNode :: Inspect { f : quoted_any_fn (q ! ({ counter_queue . borrow () . unbounded_send ((my_id as usize , counters . borrow () [my_id as usize])) . unwrap () ; counters . borrow_mut () [my_id as usize] = 0 ; move | _ | { myself :: increment_counter (& mut counters . borrow_mut () [my_id as usize]) ; } })) . splice_untyped () . into () , input : Box :: new (orig_node) , } } # [doc = " Count the cardinality of each input and periodically output to a file"] pub fn profiling < 'a > (ir : Vec < HydroLeaf > , counters : RuntimeData < & 'a RefCell < Vec < u64 > > > , counter_queue : RuntimeData < & 'a RefCell < UnboundedSender < (usize , u64) > > > ,) -> Vec < HydroLeaf > { let mut id = 0 ; let mut seen_tees = Default :: default () ; ir . into_iter () . map (| l | { l . transform_children (| node , seen_tees | { add_profiling_node (node , counters , counter_queue , & mut id , seen_tees) } , & mut seen_tees ,) }) . collect () } # [cfg (stageleft_macro)] pub mod tests { pub use stageleft :: * ; pub use crate :: __staged :: deploy :: MultiGraph ; pub use crate :: __staged :: location :: Location ; # [test] pub fn profiler_wrapping_all_operators () { let flow = crate :: builder :: FlowBuilder :: new () ; let process = flow . process :: < () > () ; process . source_iter (q ! (0 .. 10)) . map (q ! (| v | v + 1)) . for_each (q ! (| n | println ! ("{}" , n))) ; let built = flow . finalize () ; insta :: assert_debug_snapshot ! (& built . ir ()) ; let counters = RuntimeData :: new ("Fake") ; let counter_queue = RuntimeData :: new ("Fake") ; let pushed_down = built . optimize_with (crate :: rewrites :: persist_pullup :: persist_pullup) . optimize_with (| ir | super :: profiling (ir , counters , counter_queue)) ; insta :: assert_debug_snapshot ! (& pushed_down . ir ()) ; let _ = pushed_down . compile_no_network :: < MultiGraph > () ; } } } pub mod properties { pub use std :: collections :: HashSet ; pub use stageleft :: * ; pub use crate :: __staged :: ir :: { HydroLeaf , HydroNode , SeenTees } ; pub use crate :: rewrites :: properties :: PropertyDatabase ; # [doc = " Allows us to convert the hydroflow datatype for folds to a binary operation for the algebra"] # [doc = " property tests."] # [allow (clippy :: allow_attributes , dead_code , reason = "staged programming")] pub fn convert_hf_to_binary < I , A : Default , F : Fn (& mut A , I) > (f : F) -> impl Fn (I , I) -> A { move | a , b | { let mut acc = Default :: default () ; f (& mut acc , a) ; f (& mut acc , b) ; acc } } # [cfg (stageleft_macro)] impl PropertyDatabase { # [doc = " Tags the expression as commutative."] pub fn add_commutative_tag < 'a , I , A , F : Fn (& mut A , I) , Ctx , Q : QuotedWithContext < 'a , F , Ctx > + Clone , > (& mut self , expr : Q , ctx : & Ctx ,) -> Q { let expr_clone = expr . clone () ; self . commutative . insert (expr_clone . splice_untyped_ctx (ctx)) ; expr } pub fn is_tagged_commutative (& self , expr : & syn :: Expr) -> bool { self . commutative . contains (expr) } } pub fn properties_optimize_node (node : & mut HydroNode , db : & PropertyDatabase , seen_tees : & mut SeenTees) { node . transform_children (| node , seen_tees | properties_optimize_node (node , db , seen_tees) , seen_tees ,) ; match node { HydroNode :: ReduceKeyed { f , .. } if db . is_tagged_commutative (& f . 0) => { dbg ! ("IDENTIFIED COMMUTATIVE OPTIMIZATION for {:?}" , & f) ; } _ => { } } } pub fn properties_optimize (ir : Vec < HydroLeaf > , db : & PropertyDatabase) -> Vec < HydroLeaf > { let mut seen_tees = Default :: default () ; ir . into_iter () . map (| l | { l . transform_children (| node , seen_tees | properties_optimize_node (node , db , seen_tees) , & mut seen_tees ,) }) . collect () } # [cfg (stageleft_macro)] pub mod tests { pub use super :: * ; pub use crate :: __staged :: deploy :: SingleProcessGraph ; pub use crate :: __staged :: location :: Location ; pub use crate :: __staged :: FlowBuilder ; # [test] pub fn test_property_database () { let mut db = PropertyDatabase :: default () ; assert ! (! db . is_tagged_commutative (& (q ! (| a : & mut i32 , b : i32 | * a += b) . splice_untyped_ctx (& ())))) ; let _ = db . add_commutative_tag (q ! (| a : & mut i32 , b : i32 | * a += b) , & ()) ; assert ! (db . is_tagged_commutative (& (q ! (| a : & mut i32 , b : i32 | * a += b) . splice_untyped_ctx (& ())))) ; } # [test] pub fn test_property_optimized () { let flow = FlowBuilder :: new () ; let mut database = PropertyDatabase :: default () ; let process = flow . process :: < () > () ; let tick = process . tick () ; let counter_func = q ! (| count : & mut i32 , _ | * count += 1) ; let _ = database . add_commutative_tag (counter_func , & tick) ; unsafe { process . source_iter (q ! (vec ! [])) . map (q ! (| string : String | (string , ()))) . timestamped (& tick) . tick_batch () } . fold_keyed (q ! (|| 0) , counter_func) . all_ticks () . for_each (q ! (| (string , count) | println ! ("{}: {}" , string , count))) ; let built = flow . optimize_with (| ir | properties_optimize (ir , & database)) . with_default_optimize :: < SingleProcessGraph > () ; insta :: assert_debug_snapshot ! (built . ir ()) ; let _ = built . compile_no_network () ; } } } } pub mod staging_util { pub use std :: marker :: PhantomData ; pub use proc_macro2 :: { Span , TokenStream } ; pub use quote :: quote ; pub type Invariant < 'a , D = () > = PhantomData < (fn (& 'a ()) -> & 'a () , D) > ; pub fn get_this_crate () -> TokenStream { let hydroflow_crate = proc_macro_crate :: crate_name ("hydro_lang") . expect ("hydro_lang should be present in `Cargo.toml`") ; match hydroflow_crate { proc_macro_crate :: FoundCrate :: Itself => quote ! { hydro_lang } , proc_macro_crate :: FoundCrate :: Name (name) => { let ident = syn :: Ident :: new (& name , Span :: call_site ()) ; quote ! { # ident } } } } } # [cfg (stageleft_macro)] # [stageleft :: runtime] # [cfg (test)] mod tests { # [ctor :: ctor] fn init () { crate :: deploy :: init_test () ; } }
\ No newline at end of file diff --git a/doc/src/hydroflow_plus/ir.rs.html b/doc/src/hydro_lang/ir.rs.html similarity index 91% rename from doc/src/hydroflow_plus/ir.rs.html rename to doc/src/hydro_lang/ir.rs.html index 65cd6710f353..677ca97ec1e3 100644 --- a/doc/src/hydroflow_plus/ir.rs.html +++ b/doc/src/hydro_lang/ir.rs.html @@ -1,4 +1,4 @@ -ir.rs - source
1
+ir.rs - source
1
 2
 3
 4
@@ -1372,10 +1372,6 @@
 1372
 1373
 1374
-1375
-1376
-1377
-1378
 
use core::panic;
 use std::cell::RefCell;
 #[cfg(feature = "build")]
@@ -1438,36 +1434,36 @@
     }
 }
 
-/// A source in a Hydroflow+ graph, where data enters the graph.
+/// A source in a Hydro graph, where data enters the graph.
 #[derive(Debug)]
-pub enum HfPlusSource {
+pub enum HydroSource {
     Stream(DebugExpr),
     ExternalNetwork(),
     Iter(DebugExpr),
     Spin(),
 }
 
-/// An leaf in a Hydroflow+ graph, which is an pipeline that doesn't emit
+/// An leaf in a Hydro graph, which is an pipeline that doesn't emit
 /// any downstream values. Traversals over the dataflow graph and
 /// generating Hydroflow IR start from leaves.
 #[derive(Debug)]
-pub enum HfPlusLeaf {
+pub enum HydroLeaf {
     ForEach {
         f: DebugExpr,
-        input: Box<HfPlusNode>,
+        input: Box<HydroNode>,
     },
     DestSink {
         sink: DebugExpr,
-        input: Box<HfPlusNode>,
+        input: Box<HydroNode>,
     },
     CycleSink {
         ident: syn::Ident,
         location_kind: LocationId,
-        input: Box<HfPlusNode>,
+        input: Box<HydroNode>,
     },
 }
 
-impl HfPlusLeaf {
+impl HydroLeaf {
     #[cfg(feature = "build")]
     pub fn compile_network<'a, D: Deploy<'a>>(
         self,
@@ -1476,7 +1472,7 @@
         nodes: &HashMap<usize, D::Process>,
         clusters: &HashMap<usize, D::Cluster>,
         externals: &HashMap<usize, D::ExternalProcess>,
-    ) -> HfPlusLeaf {
+    ) -> HydroLeaf {
         self.transform_children(
             |n, s| {
                 n.compile_network::<D>(compile_env, s, nodes, clusters, externals);
@@ -1485,7 +1481,7 @@
         )
     }
 
-    pub fn connect_network(self, seen_tees: &mut SeenTees) -> HfPlusLeaf {
+    pub fn connect_network(self, seen_tees: &mut SeenTees) -> HydroLeaf {
         self.transform_children(
             |n, s| {
                 n.connect_network(s);
@@ -1496,25 +1492,25 @@
 
     pub fn transform_children(
         self,
-        mut transform: impl FnMut(&mut HfPlusNode, &mut SeenTees),
+        mut transform: impl FnMut(&mut HydroNode, &mut SeenTees),
         seen_tees: &mut SeenTees,
-    ) -> HfPlusLeaf {
+    ) -> HydroLeaf {
         match self {
-            HfPlusLeaf::ForEach { f, mut input } => {
+            HydroLeaf::ForEach { f, mut input } => {
                 transform(&mut input, seen_tees);
-                HfPlusLeaf::ForEach { f, input }
+                HydroLeaf::ForEach { f, input }
             }
-            HfPlusLeaf::DestSink { sink, mut input } => {
+            HydroLeaf::DestSink { sink, mut input } => {
                 transform(&mut input, seen_tees);
-                HfPlusLeaf::DestSink { sink, input }
+                HydroLeaf::DestSink { sink, input }
             }
-            HfPlusLeaf::CycleSink {
+            HydroLeaf::CycleSink {
                 ident,
                 location_kind,
                 mut input,
             } => {
                 transform(&mut input, seen_tees);
-                HfPlusLeaf::CycleSink {
+                HydroLeaf::CycleSink {
                     ident,
                     location_kind,
                     input,
@@ -1527,11 +1523,11 @@
     pub fn emit(
         &self,
         graph_builders: &mut BTreeMap<usize, FlatGraphBuilder>,
-        built_tees: &mut HashMap<*const RefCell<HfPlusNode>, (syn::Ident, usize)>,
+        built_tees: &mut HashMap<*const RefCell<HydroNode>, (syn::Ident, usize)>,
         next_stmt_id: &mut usize,
     ) {
         match self {
-            HfPlusLeaf::ForEach { f, input } => {
+            HydroLeaf::ForEach { f, input } => {
                 let (input_ident, input_location_id) =
                     input.emit(graph_builders, built_tees, next_stmt_id);
 
@@ -1543,7 +1539,7 @@
                     });
             }
 
-            HfPlusLeaf::DestSink { sink, input } => {
+            HydroLeaf::DestSink { sink, input } => {
                 let (input_ident, input_location_id) =
                     input.emit(graph_builders, built_tees, next_stmt_id);
 
@@ -1555,7 +1551,7 @@
                     });
             }
 
-            HfPlusLeaf::CycleSink {
+            HydroLeaf::CycleSink {
                 ident,
                 location_kind,
                 input,
@@ -1586,7 +1582,7 @@
     }
 }
 
-type PrintedTees = RefCell<Option<(usize, HashMap<*const RefCell<HfPlusNode>, usize>)>>;
+type PrintedTees = RefCell<Option<(usize, HashMap<*const RefCell<HydroNode>, usize>)>>;
 thread_local! {
     static PRINTED_TEES: PrintedTees = const { RefCell::new(None) };
 }
@@ -1606,7 +1602,7 @@
     })
 }
 
-pub struct TeeNode(pub Rc<RefCell<HfPlusNode>>);
+pub struct TeeNode(pub Rc<RefCell<HydroNode>>);
 
 impl Debug for TeeNode {
     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
@@ -1617,7 +1613,7 @@
             if let Some(printed_tees_mut) = printed_tees_mut {
                 if let Some(existing) = printed_tees_mut
                     .1
-                    .get(&(self.0.as_ref() as *const RefCell<HfPlusNode>))
+                    .get(&(self.0.as_ref() as *const RefCell<HydroNode>))
                 {
                     write!(f, "<tee {}>", existing)
                 } else {
@@ -1625,7 +1621,7 @@
                     printed_tees_mut.0 += 1;
                     printed_tees_mut
                         .1
-                        .insert(self.0.as_ref() as *const RefCell<HfPlusNode>, next_id);
+                        .insert(self.0.as_ref() as *const RefCell<HydroNode>, next_id);
                     drop(printed_tees_mut_borrow);
                     write!(f, "<tee {}>: ", next_id)?;
                     Debug::fmt(&self.0.borrow(), f)
@@ -1639,14 +1635,14 @@
     }
 }
 
-/// An intermediate node in a Hydroflow+ graph, which consumes data
+/// An intermediate node in a Hydro graph, which consumes data
 /// from upstream nodes and emits data to downstream nodes.
 #[derive(Debug)]
-pub enum HfPlusNode {
+pub enum HydroNode {
     Placeholder,
 
     Source {
-        source: HfPlusSource,
+        source: HydroSource,
         location_kind: LocationId,
     },
 
@@ -1659,65 +1655,65 @@
         inner: TeeNode,
     },
 
-    Persist(Box<HfPlusNode>),
-    Unpersist(Box<HfPlusNode>),
-    Delta(Box<HfPlusNode>),
+    Persist(Box<HydroNode>),
+    Unpersist(Box<HydroNode>),
+    Delta(Box<HydroNode>),
 
-    Chain(Box<HfPlusNode>, Box<HfPlusNode>),
-    CrossProduct(Box<HfPlusNode>, Box<HfPlusNode>),
-    CrossSingleton(Box<HfPlusNode>, Box<HfPlusNode>),
-    Join(Box<HfPlusNode>, Box<HfPlusNode>),
-    Difference(Box<HfPlusNode>, Box<HfPlusNode>),
-    AntiJoin(Box<HfPlusNode>, Box<HfPlusNode>),
+    Chain(Box<HydroNode>, Box<HydroNode>),
+    CrossProduct(Box<HydroNode>, Box<HydroNode>),
+    CrossSingleton(Box<HydroNode>, Box<HydroNode>),
+    Join(Box<HydroNode>, Box<HydroNode>),
+    Difference(Box<HydroNode>, Box<HydroNode>),
+    AntiJoin(Box<HydroNode>, Box<HydroNode>),
 
     Map {
         f: DebugExpr,
-        input: Box<HfPlusNode>,
+        input: Box<HydroNode>,
     },
     FlatMap {
         f: DebugExpr,
-        input: Box<HfPlusNode>,
+        input: Box<HydroNode>,
     },
     Filter {
         f: DebugExpr,
-        input: Box<HfPlusNode>,
+        input: Box<HydroNode>,
     },
     FilterMap {
         f: DebugExpr,
-        input: Box<HfPlusNode>,
+        input: Box<HydroNode>,
     },
 
-    DeferTick(Box<HfPlusNode>),
+    DeferTick(Box<HydroNode>),
     Enumerate {
         is_static: bool,
-        input: Box<HfPlusNode>,
+        input: Box<HydroNode>,
     },
     Inspect {
         f: DebugExpr,
-        input: Box<HfPlusNode>,
+        input: Box<HydroNode>,
     },
 
-    Unique(Box<HfPlusNode>),
+    Unique(Box<HydroNode>),
 
-    Sort(Box<HfPlusNode>),
+    Sort(Box<HydroNode>),
     Fold {
         init: DebugExpr,
         acc: DebugExpr,
-        input: Box<HfPlusNode>,
+        input: Box<HydroNode>,
     },
     FoldKeyed {
         init: DebugExpr,
         acc: DebugExpr,
-        input: Box<HfPlusNode>,
+        input: Box<HydroNode>,
     },
 
     Reduce {
         f: DebugExpr,
-        input: Box<HfPlusNode>,
+        input: Box<HydroNode>,
     },
     ReduceKeyed {
         f: DebugExpr,
-        input: Box<HfPlusNode>,
+        input: Box<HydroNode>,
     },
 
     Network {
@@ -1728,13 +1724,13 @@
         serialize_fn: Option<DebugExpr>,
         instantiate_fn: DebugInstantiate,
         deserialize_fn: Option<DebugExpr>,
-        input: Box<HfPlusNode>,
+        input: Box<HydroNode>,
     },
 }
 
-pub type SeenTees = HashMap<*const RefCell<HfPlusNode>, Rc<RefCell<HfPlusNode>>>;
+pub type SeenTees = HashMap<*const RefCell<HydroNode>, Rc<RefCell<HydroNode>>>;
 
-impl<'a> HfPlusNode {
+impl<'a> HydroNode {
     #[cfg(feature = "build")]
     pub fn compile_network<D: Deploy<'a>>(
         &mut self,
@@ -1749,7 +1745,7 @@
             seen_tees,
         );
 
-        if let HfPlusNode::Network {
+        if let HydroNode::Network {
             from_location,
             from_key,
             to_location,
@@ -1779,7 +1775,7 @@
 
     pub fn connect_network(&mut self, seen_tees: &mut SeenTees) {
         self.transform_children(|n, s| n.connect_network(s), seen_tees);
-        if let HfPlusNode::Network { instantiate_fn, .. } = self {
+        if let HydroNode::Network { instantiate_fn, .. } = self {
             match instantiate_fn {
                 DebugInstantiate::Building() => panic!("network not built"),
 
@@ -1792,7 +1788,7 @@
 
     pub fn transform_bottom_up<C>(
         &mut self,
-        mut transform: impl FnMut(&mut HfPlusNode, &mut C) + Copy,
+        mut transform: impl FnMut(&mut HydroNode, &mut C) + Copy,
         seen_tees: &mut SeenTees,
         ctx: &mut C,
     ) {
@@ -1804,109 +1800,109 @@
     #[inline(always)]
     pub fn transform_children(
         &mut self,
-        mut transform: impl FnMut(&mut HfPlusNode, &mut SeenTees),
+        mut transform: impl FnMut(&mut HydroNode, &mut SeenTees),
         seen_tees: &mut SeenTees,
     ) {
         match self {
-            HfPlusNode::Placeholder => {
+            HydroNode::Placeholder => {
                 panic!();
             }
 
-            HfPlusNode::Source { .. } => {}
+            HydroNode::Source { .. } => {}
 
-            HfPlusNode::CycleSource { .. } => {}
+            HydroNode::CycleSource { .. } => {}
 
-            HfPlusNode::Tee { inner } => {
+            HydroNode::Tee { inner } => {
                 if let Some(transformed) =
-                    seen_tees.get(&(inner.0.as_ref() as *const RefCell<HfPlusNode>))
+                    seen_tees.get(&(inner.0.as_ref() as *const RefCell<HydroNode>))
                 {
                     *inner = TeeNode(transformed.clone());
                 } else {
-                    let transformed_cell = Rc::new(RefCell::new(HfPlusNode::Placeholder));
+                    let transformed_cell = Rc::new(RefCell::new(HydroNode::Placeholder));
                     seen_tees.insert(
-                        inner.0.as_ref() as *const RefCell<HfPlusNode>,
+                        inner.0.as_ref() as *const RefCell<HydroNode>,
                         transformed_cell.clone(),
                     );
-                    let mut orig = inner.0.replace(HfPlusNode::Placeholder);
+                    let mut orig = inner.0.replace(HydroNode::Placeholder);
                     transform(&mut orig, seen_tees);
                     *transformed_cell.borrow_mut() = orig;
                     *inner = TeeNode(transformed_cell);
                 }
             }
 
-            HfPlusNode::Persist(inner) => transform(inner.as_mut(), seen_tees),
-            HfPlusNode::Unpersist(inner) => transform(inner.as_mut(), seen_tees),
-            HfPlusNode::Delta(inner) => transform(inner.as_mut(), seen_tees),
+            HydroNode::Persist(inner) => transform(inner.as_mut(), seen_tees),
+            HydroNode::Unpersist(inner) => transform(inner.as_mut(), seen_tees),
+            HydroNode::Delta(inner) => transform(inner.as_mut(), seen_tees),
 
-            HfPlusNode::Chain(left, right) => {
+            HydroNode::Chain(left, right) => {
                 transform(left.as_mut(), seen_tees);
                 transform(right.as_mut(), seen_tees);
             }
-            HfPlusNode::CrossProduct(left, right) => {
+            HydroNode::CrossProduct(left, right) => {
                 transform(left.as_mut(), seen_tees);
                 transform(right.as_mut(), seen_tees);
             }
-            HfPlusNode::CrossSingleton(left, right) => {
+            HydroNode::CrossSingleton(left, right) => {
                 transform(left.as_mut(), seen_tees);
                 transform(right.as_mut(), seen_tees);
             }
-            HfPlusNode::Join(left, right) => {
+            HydroNode::Join(left, right) => {
                 transform(left.as_mut(), seen_tees);
                 transform(right.as_mut(), seen_tees);
             }
-            HfPlusNode::Difference(left, right) => {
+            HydroNode::Difference(left, right) => {
                 transform(left.as_mut(), seen_tees);
                 transform(right.as_mut(), seen_tees);
             }
-            HfPlusNode::AntiJoin(left, right) => {
+            HydroNode::AntiJoin(left, right) => {
                 transform(left.as_mut(), seen_tees);
                 transform(right.as_mut(), seen_tees);
             }
 
-            HfPlusNode::Map { input, .. } => {
+            HydroNode::Map { input, .. } => {
                 transform(input.as_mut(), seen_tees);
             }
-            HfPlusNode::FlatMap { input, .. } => {
+            HydroNode::FlatMap { input, .. } => {
                 transform(input.as_mut(), seen_tees);
             }
-            HfPlusNode::Filter { input, .. } => {
+            HydroNode::Filter { input, .. } => {
                 transform(input.as_mut(), seen_tees);
             }
-            HfPlusNode::FilterMap { input, .. } => {
+            HydroNode::FilterMap { input, .. } => {
                 transform(input.as_mut(), seen_tees);
             }
-            HfPlusNode::Sort(input) => {
+            HydroNode::Sort(input) => {
                 transform(input.as_mut(), seen_tees);
             }
-            HfPlusNode::DeferTick(input) => {
+            HydroNode::DeferTick(input) => {
                 transform(input.as_mut(), seen_tees);
             }
-            HfPlusNode::Enumerate { input, .. } => {
+            HydroNode::Enumerate { input, .. } => {
                 transform(input.as_mut(), seen_tees);
             }
-            HfPlusNode::Inspect { input, .. } => {
+            HydroNode::Inspect { input, .. } => {
                 transform(input.as_mut(), seen_tees);
             }
 
-            HfPlusNode::Unique(input) => {
+            HydroNode::Unique(input) => {
                 transform(input.as_mut(), seen_tees);
             }
 
-            HfPlusNode::Fold { input, .. } => {
+            HydroNode::Fold { input, .. } => {
                 transform(input.as_mut(), seen_tees);
             }
-            HfPlusNode::FoldKeyed { input, .. } => {
+            HydroNode::FoldKeyed { input, .. } => {
                 transform(input.as_mut(), seen_tees);
             }
 
-            HfPlusNode::Reduce { input, .. } => {
+            HydroNode::Reduce { input, .. } => {
                 transform(input.as_mut(), seen_tees);
             }
-            HfPlusNode::ReduceKeyed { input, .. } => {
+            HydroNode::ReduceKeyed { input, .. } => {
                 transform(input.as_mut(), seen_tees);
             }
 
-            HfPlusNode::Network { input, .. } => {
+            HydroNode::Network { input, .. } => {
                 transform(input.as_mut(), seen_tees);
             }
         }
@@ -1916,15 +1912,15 @@
     pub fn emit(
         &self,
         graph_builders: &mut BTreeMap<usize, FlatGraphBuilder>,
-        built_tees: &mut HashMap<*const RefCell<HfPlusNode>, (syn::Ident, usize)>,
+        built_tees: &mut HashMap<*const RefCell<HydroNode>, (syn::Ident, usize)>,
         next_stmt_id: &mut usize,
     ) -> (syn::Ident, usize) {
         match self {
-            HfPlusNode::Placeholder => {
+            HydroNode::Placeholder => {
                 panic!()
             }
 
-            HfPlusNode::Persist(inner) => {
+            HydroNode::Persist(inner) => {
                 let (inner_ident, location) = inner.emit(graph_builders, built_tees, next_stmt_id);
 
                 let persist_id = *next_stmt_id;
@@ -1941,11 +1937,11 @@
                 (persist_ident, location)
             }
 
-            HfPlusNode::Unpersist(_) => {
+            HydroNode::Unpersist(_) => {
                 panic!("Unpersist is a marker node and should have been optimized away. This is likely a compiler bug.")
             }
 
-            HfPlusNode::Delta(inner) => {
+            HydroNode::Delta(inner) => {
                 let (inner_ident, location) = inner.emit(graph_builders, built_tees, next_stmt_id);
 
                 let delta_id = *next_stmt_id;
@@ -1962,7 +1958,7 @@
                 (delta_ident, location)
             }
 
-            HfPlusNode::Source {
+            HydroNode::Source {
                 source,
                 location_kind,
             } => {
@@ -1973,7 +1969,7 @@
                     LocationId::ExternalProcess(id) => id,
                 };
 
-                if let HfPlusSource::ExternalNetwork() = source {
+                if let HydroSource::ExternalNetwork() = source {
                     (syn::Ident::new("DUMMY", Span::call_site()), *location_id)
                 } else {
                     let source_id = *next_stmt_id;
@@ -1983,23 +1979,23 @@
                         syn::Ident::new(&format!("stream_{}", source_id), Span::call_site());
 
                     let source_stmt = match source {
-                        HfPlusSource::Stream(expr) => {
+                        HydroSource::Stream(expr) => {
                             parse_quote! {
                                 #source_ident = source_stream(#expr);
                             }
                         }
 
-                        HfPlusSource::ExternalNetwork() => {
+                        HydroSource::ExternalNetwork() => {
                             unreachable!()
                         }
 
-                        HfPlusSource::Iter(expr) => {
+                        HydroSource::Iter(expr) => {
                             parse_quote! {
                                 #source_ident = source_iter(#expr);
                             }
                         }
 
-                        HfPlusSource::Spin() => {
+                        HydroSource::Spin() => {
                             parse_quote! {
                                 #source_ident = spin();
                             }
@@ -2015,7 +2011,7 @@
                 }
             }
 
-            HfPlusNode::CycleSource {
+            HydroNode::CycleSource {
                 ident,
                 location_kind,
             } => {
@@ -2029,8 +2025,8 @@
                 (ident.clone(), *location_id)
             }
 
-            HfPlusNode::Tee { inner } => {
-                if let Some(ret) = built_tees.get(&(inner.0.as_ref() as *const RefCell<HfPlusNode>))
+            HydroNode::Tee { inner } => {
+                if let Some(ret) = built_tees.get(&(inner.0.as_ref() as *const RefCell<HydroNode>))
                 {
                     ret.clone()
                 } else {
@@ -2052,7 +2048,7 @@
                     });
 
                     built_tees.insert(
-                        inner.0.as_ref() as *const RefCell<HfPlusNode>,
+                        inner.0.as_ref() as *const RefCell<HydroNode>,
                         (tee_ident.clone(), inner_location_id),
                     );
 
@@ -2060,7 +2056,7 @@
                 }
             }
 
-            HfPlusNode::Chain(left, right) => {
+            HydroNode::Chain(left, right) => {
                 let (left_ident, left_location_id) =
                     left.emit(graph_builders, built_tees, next_stmt_id);
                 let (right_ident, right_location_id) =
@@ -2093,7 +2089,7 @@
                 (chain_ident, left_location_id)
             }
 
-            HfPlusNode::CrossSingleton(left, right) => {
+            HydroNode::CrossSingleton(left, right) => {
                 let (left_ident, left_location_id) =
                     left.emit(graph_builders, built_tees, next_stmt_id);
                 let (right_ident, right_location_id) =
@@ -2126,27 +2122,27 @@
                 (cross_ident, left_location_id)
             }
 
-            HfPlusNode::CrossProduct(..) | HfPlusNode::Join(..) => {
-                let operator: syn::Ident = if matches!(self, HfPlusNode::CrossProduct(..)) {
+            HydroNode::CrossProduct(..) | HydroNode::Join(..) => {
+                let operator: syn::Ident = if matches!(self, HydroNode::CrossProduct(..)) {
                     parse_quote!(cross_join_multiset)
                 } else {
                     parse_quote!(join_multiset)
                 };
 
-                let (HfPlusNode::CrossProduct(left, right) | HfPlusNode::Join(left, right)) = self
+                let (HydroNode::CrossProduct(left, right) | HydroNode::Join(left, right)) = self
                 else {
                     unreachable!()
                 };
 
-                let (left_inner, left_was_persist) =
-                    if let HfPlusNode::Persist(left) = left.as_ref() {
-                        (left, true)
-                    } else {
-                        (left, false)
-                    };
+                let (left_inner, left_was_persist) = if let HydroNode::Persist(left) = left.as_ref()
+                {
+                    (left, true)
+                } else {
+                    (left, false)
+                };
 
                 let (right_inner, right_was_persist) =
-                    if let HfPlusNode::Persist(right) = right.as_ref() {
+                    if let HydroNode::Persist(right) = right.as_ref() {
                         (right, true)
                     } else {
                         (right, false)
@@ -2204,21 +2200,19 @@
                 (stream_ident, left_location_id)
             }
 
-            HfPlusNode::Difference(..) | HfPlusNode::AntiJoin(..) => {
-                let operator: syn::Ident = if matches!(self, HfPlusNode::Difference(..)) {
+            HydroNode::Difference(..) | HydroNode::AntiJoin(..) => {
+                let operator: syn::Ident = if matches!(self, HydroNode::Difference(..)) {
                     parse_quote!(difference_multiset)
                 } else {
                     parse_quote!(anti_join_multiset)
                 };
 
-                let (HfPlusNode::Difference(left, right) | HfPlusNode::AntiJoin(left, right)) =
-                    self
+                let (HydroNode::Difference(left, right) | HydroNode::AntiJoin(left, right)) = self
                 else {
                     unreachable!()
                 };
 
-                let (right, right_was_persist) = if let HfPlusNode::Persist(right) = right.as_ref()
-                {
+                let (right, right_was_persist) = if let HydroNode::Persist(right) = right.as_ref() {
                     (right, true)
                 } else {
                     (right, false)
@@ -2263,7 +2257,7 @@
                 (stream_ident, left_location_id)
             }
 
-            HfPlusNode::Map { f, input } => {
+            HydroNode::Map { f, input } => {
                 let (input_ident, input_location_id) =
                     input.emit(graph_builders, built_tees, next_stmt_id);
 
@@ -2280,7 +2274,7 @@
                 (map_ident, input_location_id)
             }
 
-            HfPlusNode::FlatMap { f, input } => {
+            HydroNode::FlatMap { f, input } => {
                 let (input_ident, input_location_id) =
                     input.emit(graph_builders, built_tees, next_stmt_id);
 
@@ -2298,7 +2292,7 @@
                 (flat_map_ident, input_location_id)
             }
 
-            HfPlusNode::Filter { f, input } => {
+            HydroNode::Filter { f, input } => {
                 let (input_ident, input_location_id) =
                     input.emit(graph_builders, built_tees, next_stmt_id);
 
@@ -2316,7 +2310,7 @@
                 (filter_ident, input_location_id)
             }
 
-            HfPlusNode::FilterMap { f, input } => {
+            HydroNode::FilterMap { f, input } => {
                 let (input_ident, input_location_id) =
                     input.emit(graph_builders, built_tees, next_stmt_id);
 
@@ -2334,7 +2328,7 @@
                 (filter_map_ident, input_location_id)
             }
 
-            HfPlusNode::Sort(input) => {
+            HydroNode::Sort(input) => {
                 let (input_ident, input_location_id) =
                     input.emit(graph_builders, built_tees, next_stmt_id);
 
@@ -2351,7 +2345,7 @@
                 (sort_ident, input_location_id)
             }
 
-            HfPlusNode::DeferTick(input) => {
+            HydroNode::DeferTick(input) => {
                 let (input_ident, input_location_id) =
                     input.emit(graph_builders, built_tees, next_stmt_id);
 
@@ -2369,7 +2363,7 @@
                 (defer_tick_ident, input_location_id)
             }
 
-            HfPlusNode::Enumerate { is_static, input } => {
+            HydroNode::Enumerate { is_static, input } => {
                 let (input_ident, input_location_id) =
                     input.emit(graph_builders, built_tees, next_stmt_id);
 
@@ -2394,7 +2388,7 @@
                 (enumerate_ident, input_location_id)
             }
 
-            HfPlusNode::Inspect { f, input } => {
+            HydroNode::Inspect { f, input } => {
                 let (input_ident, input_location_id) =
                     input.emit(graph_builders, built_tees, next_stmt_id);
 
@@ -2412,7 +2406,7 @@
                 (inspect_ident, input_location_id)
             }
 
-            HfPlusNode::Unique(input) => {
+            HydroNode::Unique(input) => {
                 let (input_ident, input_location_id) =
                     input.emit(graph_builders, built_tees, next_stmt_id);
 
@@ -2430,21 +2424,20 @@
                 (unique_ident, input_location_id)
             }
 
-            HfPlusNode::Fold { .. } | HfPlusNode::FoldKeyed { .. } => {
-                let operator: syn::Ident = if matches!(self, HfPlusNode::Fold { .. }) {
+            HydroNode::Fold { .. } | HydroNode::FoldKeyed { .. } => {
+                let operator: syn::Ident = if matches!(self, HydroNode::Fold { .. }) {
                     parse_quote!(fold)
                 } else {
                     parse_quote!(fold_keyed)
                 };
 
-                let (HfPlusNode::Fold { init, acc, input }
-                | HfPlusNode::FoldKeyed { init, acc, input }) = self
+                let (HydroNode::Fold { init, acc, input }
+                | HydroNode::FoldKeyed { init, acc, input }) = self
                 else {
                     unreachable!()
                 };
 
-                let (input, input_was_persist) = if let HfPlusNode::Persist(input) = input.as_ref()
-                {
+                let (input, input_was_persist) = if let HydroNode::Persist(input) = input.as_ref() {
                     (input, true)
                 } else {
                     (input, false)
@@ -2473,20 +2466,19 @@
                 (fold_ident, input_location_id)
             }
 
-            HfPlusNode::Reduce { .. } | HfPlusNode::ReduceKeyed { .. } => {
-                let operator: syn::Ident = if matches!(self, HfPlusNode::Reduce { .. }) {
+            HydroNode::Reduce { .. } | HydroNode::ReduceKeyed { .. } => {
+                let operator: syn::Ident = if matches!(self, HydroNode::Reduce { .. }) {
                     parse_quote!(reduce)
                 } else {
                     parse_quote!(reduce_keyed)
                 };
 
-                let (HfPlusNode::Reduce { f, input } | HfPlusNode::ReduceKeyed { f, input }) = self
+                let (HydroNode::Reduce { f, input } | HydroNode::ReduceKeyed { f, input }) = self
                 else {
                     unreachable!()
                 };
 
-                let (input, input_was_persist) = if let HfPlusNode::Persist(input) = input.as_ref()
-                {
+                let (input, input_was_persist) = if let HydroNode::Persist(input) = input.as_ref() {
                     (input, true)
                 } else {
                     (input, false)
@@ -2515,7 +2507,7 @@
                 (reduce_ident, input_location_id)
             }
 
-            HfPlusNode::Network {
+            HydroNode::Network {
                 from_location: _,
                 from_key: _,
                 to_location,
diff --git a/doc/src/hydroflow_plus/lib.rs.html b/doc/src/hydro_lang/lib.rs.html
similarity index 63%
rename from doc/src/hydroflow_plus/lib.rs.html
rename to doc/src/hydro_lang/lib.rs.html
index c2ac521e01c1..aa901de732a8 100644
--- a/doc/src/hydroflow_plus/lib.rs.html
+++ b/doc/src/hydro_lang/lib.rs.html
@@ -1,4 +1,4 @@
-lib.rs - source
1
+lib.rs - source
1
 2
 3
 4
diff --git a/doc/src/hydroflow_plus/location/can_send.rs.html b/doc/src/hydro_lang/location/can_send.rs.html
similarity index 77%
rename from doc/src/hydroflow_plus/location/can_send.rs.html
rename to doc/src/hydro_lang/location/can_send.rs.html
index 58a926716af2..56e0fd608098 100644
--- a/doc/src/hydroflow_plus/location/can_send.rs.html
+++ b/doc/src/hydro_lang/location/can_send.rs.html
@@ -1,4 +1,4 @@
-can_send.rs - source
1
+can_send.rs - source
1
 2
 3
 4
diff --git a/doc/src/hydroflow_plus/location/cluster/cluster_id.rs.html b/doc/src/hydro_lang/location/cluster/cluster_id.rs.html
similarity index 75%
rename from doc/src/hydroflow_plus/location/cluster/cluster_id.rs.html
rename to doc/src/hydro_lang/location/cluster/cluster_id.rs.html
index 94894616901b..dedd70a4b16f 100644
--- a/doc/src/hydroflow_plus/location/cluster/cluster_id.rs.html
+++ b/doc/src/hydro_lang/location/cluster/cluster_id.rs.html
@@ -1,4 +1,4 @@
-cluster_id.rs - source
1
+cluster_id.rs - source
1
 2
 3
 4
diff --git a/doc/src/hydroflow_plus/location/cluster/mod.rs.html b/doc/src/hydro_lang/location/cluster/mod.rs.html
similarity index 84%
rename from doc/src/hydroflow_plus/location/cluster/mod.rs.html
rename to doc/src/hydro_lang/location/cluster/mod.rs.html
index d51686e89180..046d72f6246e 100644
--- a/doc/src/hydroflow_plus/location/cluster/mod.rs.html
+++ b/doc/src/hydro_lang/location/cluster/mod.rs.html
@@ -1,4 +1,4 @@
-mod.rs - source
1
+mod.rs - source
1
 2
 3
 4
@@ -235,7 +235,7 @@
         Self: Sized,
     {
         let ident = syn::Ident::new(
-            &format!("__hydroflow_plus_cluster_ids_{}", self.id),
+            &format!("__hydro_lang_cluster_ids_{}", self.id),
             Span::call_site(),
         );
         let root = get_this_crate();
@@ -277,7 +277,7 @@
         };
 
         let ident = syn::Ident::new(
-            &format!("__hydroflow_plus_cluster_self_id_{}", cluster_id),
+            &format!("__hydro_lang_cluster_self_id_{}", cluster_id),
             Span::call_site(),
         );
         let root = get_this_crate();
diff --git a/doc/src/hydroflow_plus/location/external_process.rs.html b/doc/src/hydro_lang/location/external_process.rs.html
similarity index 84%
rename from doc/src/hydroflow_plus/location/external_process.rs.html
rename to doc/src/hydro_lang/location/external_process.rs.html
index 9160526e35d5..5e44b4b9c073 100644
--- a/doc/src/hydroflow_plus/location/external_process.rs.html
+++ b/doc/src/hydro_lang/location/external_process.rs.html
@@ -1,4 +1,4 @@
-external_process.rs - source
1
+external_process.rs - source
1
 2
 3
 4
@@ -171,7 +171,7 @@
 
 use super::{Location, LocationId, NoTick};
 use crate::builder::FlowState;
-use crate::ir::{HfPlusNode, HfPlusSource};
+use crate::ir::{HydroNode, HydroSource};
 use crate::staging_util::Invariant;
 use crate::{Stream, Unbounded};
 
@@ -275,7 +275,7 @@
             },
             Stream::new(
                 to.clone(),
-                HfPlusNode::Persist(Box::new(HfPlusNode::Network {
+                HydroNode::Persist(Box::new(HydroNode::Network {
                     from_location: LocationId::ExternalProcess(self.id),
                     from_key: Some(next_external_port_id),
                     to_location: to.id(),
@@ -283,8 +283,8 @@
                     serialize_fn: None,
                     instantiate_fn: crate::ir::DebugInstantiate::Building(),
                     deserialize_fn: Some(deser_expr.into()),
-                    input: Box::new(HfPlusNode::Source {
-                        source: HfPlusSource::ExternalNetwork(),
+                    input: Box::new(HydroNode::Source {
+                        source: HydroSource::ExternalNetwork(),
                         location_kind: LocationId::ExternalProcess(self.id),
                     }),
                 })),
@@ -311,7 +311,7 @@
             },
             Stream::new(
                 to.clone(),
-                HfPlusNode::Persist(Box::new(HfPlusNode::Network {
+                HydroNode::Persist(Box::new(HydroNode::Network {
                     from_location: LocationId::ExternalProcess(self.id),
                     from_key: Some(next_external_port_id),
                     to_location: to.id(),
@@ -319,8 +319,8 @@
                     serialize_fn: None,
                     instantiate_fn: crate::ir::DebugInstantiate::Building(),
                     deserialize_fn: Some(crate::stream::deserialize_bincode::<T>(None).into()),
-                    input: Box::new(HfPlusNode::Source {
-                        source: HfPlusSource::ExternalNetwork(),
+                    input: Box::new(HydroNode::Source {
+                        source: HydroSource::ExternalNetwork(),
                         location_kind: LocationId::ExternalProcess(self.id),
                     }),
                 })),
diff --git a/doc/src/hydroflow_plus/location/mod.rs.html b/doc/src/hydro_lang/location/mod.rs.html
similarity index 87%
rename from doc/src/hydroflow_plus/location/mod.rs.html
rename to doc/src/hydro_lang/location/mod.rs.html
index a57e3e6c08c8..b3483af8c09c 100644
--- a/doc/src/hydroflow_plus/location/mod.rs.html
+++ b/doc/src/hydro_lang/location/mod.rs.html
@@ -1,4 +1,4 @@
-mod.rs - source
1
+mod.rs - source
1
 2
 3
 4
@@ -236,8 +236,6 @@
 236
 237
 238
-239
-240
 
use std::fmt::Debug;
 use std::marker::PhantomData;
 use std::time::Duration;
@@ -249,7 +247,7 @@
 
 use super::builder::FlowState;
 use crate::cycle::{CycleCollection, ForwardRef, ForwardRefMarker};
-use crate::ir::{HfPlusNode, HfPlusSource};
+use crate::ir::{HydroNode, HydroSource};
 use crate::{Singleton, Stream, Unbounded};
 
 pub mod external_process;
@@ -328,8 +326,8 @@
     {
         Stream::new(
             self.clone(),
-            HfPlusNode::Persist(Box::new(HfPlusNode::Source {
-                source: HfPlusSource::Spin(),
+            HydroNode::Persist(Box::new(HydroNode::Source {
+                source: HydroSource::Spin(),
                 location_kind: self.id(),
             })),
         )
@@ -346,8 +344,8 @@
 
         Stream::new(
             self.clone(),
-            HfPlusNode::Persist(Box::new(HfPlusNode::Source {
-                source: HfPlusSource::Stream(e.into()),
+            HydroNode::Persist(Box::new(HydroNode::Source {
+                source: HydroSource::Stream(e.into()),
                 location_kind: self.id(),
             })),
         )
@@ -366,8 +364,8 @@
 
         Stream::new(
             self.clone(),
-            HfPlusNode::Persist(Box::new(HfPlusNode::Source {
-                source: HfPlusSource::Iter(e.into()),
+            HydroNode::Persist(Box::new(HydroNode::Source {
+                source: HydroSource::Iter(e.into()),
                 location_kind: self.id(),
             })),
         )
@@ -391,12 +389,10 @@
         // so that it grows every tick
         Singleton::new(
             self.clone(),
-            HfPlusNode::Persist(Box::new(HfPlusNode::Persist(Box::new(
-                HfPlusNode::Source {
-                    source: HfPlusSource::Iter(e.into()),
-                    location_kind: self.id(),
-                },
-            )))),
+            HydroNode::Persist(Box::new(HydroNode::Persist(Box::new(HydroNode::Source {
+                source: HydroSource::Iter(e.into()),
+                location_kind: self.id(),
+            })))),
         )
     }
 
diff --git a/doc/src/hydroflow_plus/location/process.rs.html b/doc/src/hydro_lang/location/process.rs.html
similarity index 62%
rename from doc/src/hydroflow_plus/location/process.rs.html
rename to doc/src/hydro_lang/location/process.rs.html
index 96814a82ba5a..aff20b5b3795 100644
--- a/doc/src/hydroflow_plus/location/process.rs.html
+++ b/doc/src/hydro_lang/location/process.rs.html
@@ -1,4 +1,4 @@
-process.rs - source
1
+process.rs - source
1
 2
 3
 4
diff --git a/doc/src/hydroflow_plus/location/tick.rs.html b/doc/src/hydro_lang/location/tick.rs.html
similarity index 91%
rename from doc/src/hydroflow_plus/location/tick.rs.html
rename to doc/src/hydro_lang/location/tick.rs.html
index ac8d6db872b1..a9e1fb3888c2 100644
--- a/doc/src/hydroflow_plus/location/tick.rs.html
+++ b/doc/src/hydro_lang/location/tick.rs.html
@@ -1,4 +1,4 @@
-tick.rs - source
1
+tick.rs - source
1
 2
 3
 4
@@ -292,7 +292,7 @@
     CycleCollection, CycleCollectionWithInitial, DeferTick, ForwardRef, ForwardRefMarker,
     TickCycle, TickCycleMarker,
 };
-use crate::ir::{HfPlusNode, HfPlusSource};
+use crate::ir::{HydroNode, HydroSource};
 use crate::{Bounded, Optional, Singleton, Stream};
 
 #[sealed]
@@ -417,8 +417,8 @@
 
         Optional::new(
             self.clone(),
-            HfPlusNode::Source {
-                source: HfPlusSource::Iter(e.into()),
+            HydroNode::Source {
+                source: HydroSource::Iter(e.into()),
                 location_kind: self.l.id(),
             },
         )
diff --git a/doc/src/hydroflow_plus/optional.rs.html b/doc/src/hydro_lang/optional.rs.html
similarity index 88%
rename from doc/src/hydroflow_plus/optional.rs.html
rename to doc/src/hydro_lang/optional.rs.html
index 393bc3a30307..de4946aee4bc 100644
--- a/doc/src/hydroflow_plus/optional.rs.html
+++ b/doc/src/hydro_lang/optional.rs.html
@@ -1,4 +1,4 @@
-optional.rs - source
1
+optional.rs - source
1
 2
 3
 4
@@ -519,9 +519,6 @@
 519
 520
 521
-522
-523
-524
 
use std::cell::RefCell;
 use std::marker::PhantomData;
 use std::ops::Deref;
@@ -532,7 +529,7 @@
 
 use crate::builder::FLOW_USED_MESSAGE;
 use crate::cycle::{CycleCollection, CycleComplete, DeferTick, ForwardRefMarker, TickCycleMarker};
-use crate::ir::{HfPlusLeaf, HfPlusNode, HfPlusSource, TeeNode};
+use crate::ir::{HydroLeaf, HydroNode, HydroSource, TeeNode};
 use crate::location::tick::{NoTimestamp, Timestamped};
 use crate::location::{check_matching_location, LocationId, NoTick};
 use crate::singleton::ZipResult;
@@ -541,13 +538,13 @@
 
 pub struct Optional<T, L, B> {
     pub(crate) location: L,
-    pub(crate) ir_node: RefCell<HfPlusNode>,
+    pub(crate) ir_node: RefCell<HydroNode>,
 
     _phantom: PhantomData<(T, L, B)>,
 }
 
 impl<'a, T, L: Location<'a>, B> Optional<T, L, B> {
-    pub(crate) fn new(location: L, ir_node: HfPlusNode) -> Self {
+    pub(crate) fn new(location: L, ir_node: HydroNode) -> Self {
         Optional {
             location,
             ir_node: RefCell::new(ir_node),
@@ -579,7 +576,7 @@
         let location_id = location.id();
         Optional::new(
             location,
-            HfPlusNode::CycleSource {
+            HydroNode::CycleSource {
                 ident,
                 location_kind: location_id,
             },
@@ -600,7 +597,7 @@
             .leaves
             .as_mut()
             .expect(FLOW_USED_MESSAGE)
-            .push(HfPlusLeaf::CycleSink {
+            .push(HydroLeaf::CycleSink {
                 ident,
                 location_kind: self.location_kind(),
                 input: Box::new(self.ir_node.into_inner()),
@@ -617,7 +614,7 @@
         let location_id = location.id();
         Optional::new(
             location,
-            HfPlusNode::CycleSource {
+            HydroNode::CycleSource {
                 ident,
                 location_kind: location_id,
             },
@@ -638,7 +635,7 @@
             .leaves
             .as_mut()
             .expect(FLOW_USED_MESSAGE)
-            .push(HfPlusLeaf::CycleSink {
+            .push(HydroLeaf::CycleSink {
                 ident,
                 location_kind: self.location_kind(),
                 input: Box::new(self.ir_node.into_inner()),
@@ -655,7 +652,7 @@
         let location_id = location.id();
         Optional::new(
             location,
-            HfPlusNode::Persist(Box::new(HfPlusNode::CycleSource {
+            HydroNode::Persist(Box::new(HydroNode::CycleSource {
                 ident,
                 location_kind: location_id,
             })),
@@ -676,10 +673,10 @@
             .leaves
             .as_mut()
             .expect(FLOW_USED_MESSAGE)
-            .push(HfPlusLeaf::CycleSink {
+            .push(HydroLeaf::CycleSink {
                 ident,
                 location_kind: self.location_kind(),
-                input: Box::new(HfPlusNode::Unpersist(Box::new(self.ir_node.into_inner()))),
+                input: Box::new(HydroNode::Unpersist(Box::new(self.ir_node.into_inner()))),
             });
     }
 }
@@ -698,17 +695,17 @@
 
 impl<'a, T: Clone, L: Location<'a>, B> Clone for Optional<T, L, B> {
     fn clone(&self) -> Self {
-        if !matches!(self.ir_node.borrow().deref(), HfPlusNode::Tee { .. }) {
-            let orig_ir_node = self.ir_node.replace(HfPlusNode::Placeholder);
-            *self.ir_node.borrow_mut() = HfPlusNode::Tee {
+        if !matches!(self.ir_node.borrow().deref(), HydroNode::Tee { .. }) {
+            let orig_ir_node = self.ir_node.replace(HydroNode::Placeholder);
+            *self.ir_node.borrow_mut() = HydroNode::Tee {
                 inner: TeeNode(Rc::new(RefCell::new(orig_ir_node))),
             };
         }
 
-        if let HfPlusNode::Tee { inner } = self.ir_node.borrow().deref() {
+        if let HydroNode::Tee { inner } = self.ir_node.borrow().deref() {
             Optional {
                 location: self.location.clone(),
-                ir_node: HfPlusNode::Tee {
+                ir_node: HydroNode::Tee {
                     inner: TeeNode(inner.0.clone()),
                 }
                 .into(),
@@ -725,7 +722,7 @@
         let f = f.splice_fn1_ctx(&self.location).into();
         Optional::new(
             self.location,
-            HfPlusNode::Map {
+            HydroNode::Map {
                 f,
                 input: Box::new(self.ir_node.into_inner()),
             },
@@ -739,7 +736,7 @@
         let f = f.splice_fn1_ctx(&self.location).into();
         Stream::new(
             self.location,
-            HfPlusNode::FlatMap {
+            HydroNode::FlatMap {
                 f,
                 input: Box::new(self.ir_node.into_inner()),
             },
@@ -753,7 +750,7 @@
         let f = f.splice_fn1_ctx(&self.location).into();
         Stream::new(
             self.location,
-            HfPlusNode::FlatMap {
+            HydroNode::FlatMap {
                 f,
                 input: Box::new(self.ir_node.into_inner()),
             },
@@ -781,7 +778,7 @@
         let f = f.splice_fn1_borrow_ctx(&self.location).into();
         Optional::new(
             self.location,
-            HfPlusNode::Filter {
+            HydroNode::Filter {
                 f,
                 input: Box::new(self.ir_node.into_inner()),
             },
@@ -795,7 +792,7 @@
         let f = f.splice_fn1_ctx(&self.location).into();
         Optional::new(
             self.location,
-            HfPlusNode::FilterMap {
+            HydroNode::FilterMap {
                 f,
                 input: Box::new(self.ir_node.into_inner()),
             },
@@ -808,15 +805,15 @@
         if L::is_top_level() {
             Optional::new(
                 self.location,
-                HfPlusNode::Persist(Box::new(HfPlusNode::Chain(
-                    Box::new(HfPlusNode::Unpersist(Box::new(self.ir_node.into_inner()))),
-                    Box::new(HfPlusNode::Unpersist(Box::new(other.ir_node.into_inner()))),
+                HydroNode::Persist(Box::new(HydroNode::Chain(
+                    Box::new(HydroNode::Unpersist(Box::new(self.ir_node.into_inner()))),
+                    Box::new(HydroNode::Unpersist(Box::new(other.ir_node.into_inner()))),
                 ))),
             )
         } else {
             Optional::new(
                 self.location,
-                HfPlusNode::Chain(
+                HydroNode::Chain(
                     Box::new(self.ir_node.into_inner()),
                     Box::new(other.ir_node.into_inner()),
                 ),
@@ -834,15 +831,15 @@
         if L::is_top_level() {
             Optional::new(
                 self.location,
-                HfPlusNode::Persist(Box::new(HfPlusNode::CrossSingleton(
-                    Box::new(HfPlusNode::Unpersist(Box::new(self.ir_node.into_inner()))),
-                    Box::new(HfPlusNode::Unpersist(Box::new(other.ir_node.into_inner()))),
+                HydroNode::Persist(Box::new(HydroNode::CrossSingleton(
+                    Box::new(HydroNode::Unpersist(Box::new(self.ir_node.into_inner()))),
+                    Box::new(HydroNode::Unpersist(Box::new(other.ir_node.into_inner()))),
                 ))),
             )
         } else {
             Optional::new(
                 self.location,
-                HfPlusNode::CrossSingleton(
+                HydroNode::CrossSingleton(
                     Box::new(self.ir_node.into_inner()),
                     Box::new(other.ir_node.into_inner()),
                 ),
@@ -856,15 +853,15 @@
         if L::is_top_level() {
             Singleton::new(
                 self.location,
-                HfPlusNode::Persist(Box::new(HfPlusNode::Chain(
-                    Box::new(HfPlusNode::Unpersist(Box::new(self.ir_node.into_inner()))),
-                    Box::new(HfPlusNode::Unpersist(Box::new(other.ir_node.into_inner()))),
+                HydroNode::Persist(Box::new(HydroNode::Chain(
+                    Box::new(HydroNode::Unpersist(Box::new(self.ir_node.into_inner()))),
+                    Box::new(HydroNode::Unpersist(Box::new(other.ir_node.into_inner()))),
                 ))),
             )
         } else {
             Singleton::new(
                 self.location,
-                HfPlusNode::Chain(
+                HydroNode::Chain(
                     Box::new(self.ir_node.into_inner()),
                     Box::new(other.ir_node.into_inner()),
                 ),
@@ -877,16 +874,13 @@
         T: Clone,
     {
         let none: syn::Expr = parse_quote!([::std::option::Option::None]);
-        let core_ir = HfPlusNode::Persist(Box::new(HfPlusNode::Source {
-            source: HfPlusSource::Iter(none.into()),
+        let core_ir = HydroNode::Persist(Box::new(HydroNode::Source {
+            source: HydroSource::Iter(none.into()),
             location_kind: self.location.id().root().clone(),
         }));
 
         let none_singleton = if L::is_top_level() {
-            Singleton::new(
-                self.location.clone(),
-                HfPlusNode::Persist(Box::new(core_ir)),
-            )
+            Singleton::new(self.location.clone(), HydroNode::Persist(Box::new(core_ir)))
         } else {
             Singleton::new(self.location.clone(), core_ir)
         };
@@ -937,7 +931,7 @@
     pub unsafe fn latest_tick(self) -> Optional<T, Tick<L>, Bounded> {
         Optional::new(
             self.location.tick,
-            HfPlusNode::Unpersist(Box::new(self.ir_node.into_inner())),
+            HydroNode::Unpersist(Box::new(self.ir_node.into_inner())),
         )
     }
 
@@ -1012,7 +1006,7 @@
             Timestamped {
                 tick: self.location,
             },
-            HfPlusNode::Persist(Box::new(self.ir_node.into_inner())),
+            HydroNode::Persist(Box::new(self.ir_node.into_inner())),
         )
     }
 
@@ -1021,28 +1015,28 @@
             Timestamped {
                 tick: self.location,
             },
-            HfPlusNode::Persist(Box::new(self.ir_node.into_inner())),
+            HydroNode::Persist(Box::new(self.ir_node.into_inner())),
         )
     }
 
     pub fn defer_tick(self) -> Optional<T, Tick<L>, Bounded> {
         Optional::new(
             self.location,
-            HfPlusNode::DeferTick(Box::new(self.ir_node.into_inner())),
+            HydroNode::DeferTick(Box::new(self.ir_node.into_inner())),
         )
     }
 
     pub fn persist(self) -> Stream<T, Tick<L>, Bounded> {
         Stream::new(
             self.location,
-            HfPlusNode::Persist(Box::new(self.ir_node.into_inner())),
+            HydroNode::Persist(Box::new(self.ir_node.into_inner())),
         )
     }
 
     pub fn delta(self) -> Optional<T, Tick<L>, Bounded> {
         Optional::new(
             self.location,
-            HfPlusNode::Delta(Box::new(self.ir_node.into_inner())),
+            HydroNode::Delta(Box::new(self.ir_node.into_inner())),
         )
     }
 }
diff --git a/doc/src/hydro_lang/rewrites/mod.rs.html b/doc/src/hydro_lang/rewrites/mod.rs.html
new file mode 100644
index 000000000000..781bb913db8c
--- /dev/null
+++ b/doc/src/hydro_lang/rewrites/mod.rs.html
@@ -0,0 +1,7 @@
+mod.rs - source
1
+2
+3
+
pub mod persist_pullup;
+pub mod profiler;
+pub mod properties;
+
\ No newline at end of file diff --git a/doc/src/hydroflow_plus/rewrites/persist_pullup.rs.html b/doc/src/hydro_lang/rewrites/persist_pullup.rs.html similarity index 71% rename from doc/src/hydroflow_plus/rewrites/persist_pullup.rs.html rename to doc/src/hydro_lang/rewrites/persist_pullup.rs.html index f54512b45411..b0361fabfaa5 100644 --- a/doc/src/hydroflow_plus/rewrites/persist_pullup.rs.html +++ b/doc/src/hydro_lang/rewrites/persist_pullup.rs.html @@ -1,4 +1,4 @@ -persist_pullup.rs - source
1
+persist_pullup.rs - source
1
 2
 3
 4
@@ -211,71 +211,71 @@
 use crate::ir::*;
 
 fn persist_pullup_node(
-    node: &mut HfPlusNode,
-    persist_pulled_tees: &mut HashSet<*const RefCell<HfPlusNode>>,
+    node: &mut HydroNode,
+    persist_pulled_tees: &mut HashSet<*const RefCell<HydroNode>>,
 ) {
     *node = match_box::match_box! {
-        match std::mem::replace(node, HfPlusNode::Placeholder) {
-            HfPlusNode::Unpersist(mb!(* HfPlusNode::Persist(mb!(* behind_persist)))) => behind_persist,
+        match std::mem::replace(node, HydroNode::Placeholder) {
+            HydroNode::Unpersist(mb!(* HydroNode::Persist(mb!(* behind_persist)))) => behind_persist,
 
-            HfPlusNode::Delta(mb!(* HfPlusNode::Persist(mb!(* behind_persist)))) => behind_persist,
+            HydroNode::Delta(mb!(* HydroNode::Persist(mb!(* behind_persist)))) => behind_persist,
 
-            HfPlusNode::Tee { inner } => {
-                if persist_pulled_tees.contains(&(inner.0.as_ref() as *const RefCell<HfPlusNode>)) {
-                    HfPlusNode::Persist(Box::new(HfPlusNode::Tee {
+            HydroNode::Tee { inner } => {
+                if persist_pulled_tees.contains(&(inner.0.as_ref() as *const RefCell<HydroNode>)) {
+                    HydroNode::Persist(Box::new(HydroNode::Tee {
                         inner: TeeNode(inner.0.clone()),
                     }))
-                } else if matches!(*inner.0.borrow(), HfPlusNode::Persist(_)) {
-                    persist_pulled_tees.insert(inner.0.as_ref() as *const RefCell<HfPlusNode>);
-                    if let HfPlusNode::Persist(behind_persist) =
-                        inner.0.replace(HfPlusNode::Placeholder)
+                } else if matches!(*inner.0.borrow(), HydroNode::Persist(_)) {
+                    persist_pulled_tees.insert(inner.0.as_ref() as *const RefCell<HydroNode>);
+                    if let HydroNode::Persist(behind_persist) =
+                        inner.0.replace(HydroNode::Placeholder)
                     {
                         *inner.0.borrow_mut() = *behind_persist;
                     } else {
                         unreachable!()
                     }
 
-                    HfPlusNode::Persist(Box::new(HfPlusNode::Tee {
+                    HydroNode::Persist(Box::new(HydroNode::Tee {
                         inner: TeeNode(inner.0.clone()),
                     }))
                 } else {
-                    HfPlusNode::Tee { inner }
+                    HydroNode::Tee { inner }
                 }
             }
 
-            HfPlusNode::Map {
+            HydroNode::Map {
                 f,
-                input: mb!(* HfPlusNode::Persist(behind_persist)),
-            } => HfPlusNode::Persist(Box::new(HfPlusNode::Map {
+                input: mb!(* HydroNode::Persist(behind_persist)),
+            } => HydroNode::Persist(Box::new(HydroNode::Map {
                 f,
                 input: behind_persist,
             })),
 
-            HfPlusNode::FilterMap {
+            HydroNode::FilterMap {
                 f,
-                input: mb!(* HfPlusNode::Persist(behind_persist)),
-            } => HfPlusNode::Persist(Box::new(HfPlusNode::FilterMap {
+                input: mb!(* HydroNode::Persist(behind_persist)),
+            } => HydroNode::Persist(Box::new(HydroNode::FilterMap {
                 f,
                 input: behind_persist,
             })),
 
-            HfPlusNode::FlatMap {
+            HydroNode::FlatMap {
                 f,
-                input: mb!(* HfPlusNode::Persist(behind_persist)),
-            } => HfPlusNode::Persist(Box::new(HfPlusNode::FlatMap {
+                input: mb!(* HydroNode::Persist(behind_persist)),
+            } => HydroNode::Persist(Box::new(HydroNode::FlatMap {
                 f,
                 input: behind_persist,
             })),
 
-            HfPlusNode::Filter {
+            HydroNode::Filter {
                 f,
-                input: mb!(* HfPlusNode::Persist(behind_persist)),
-            } => HfPlusNode::Persist(Box::new(HfPlusNode::Filter {
+                input: mb!(* HydroNode::Persist(behind_persist)),
+            } => HydroNode::Persist(Box::new(HydroNode::Filter {
                 f,
                 input: behind_persist,
             })),
 
-            HfPlusNode::Network {
+            HydroNode::Network {
                 from_location,
                 from_key,
                 to_location,
@@ -283,9 +283,9 @@
                 serialize_fn,
                 instantiate_fn,
                 deserialize_fn,
-                input: mb!(* HfPlusNode::Persist(behind_persist)),
+                input: mb!(* HydroNode::Persist(behind_persist)),
                 ..
-            } => HfPlusNode::Persist(Box::new(HfPlusNode::Network {
+            } => HydroNode::Persist(Box::new(HydroNode::Network {
                 from_location,
                 from_key,
                 to_location,
@@ -296,29 +296,29 @@
                 input: behind_persist,
             })),
 
-            HfPlusNode::Chain(mb!(* HfPlusNode::Persist(left)), mb!(* HfPlusNode::Persist(right))) => {
-                HfPlusNode::Persist(Box::new(HfPlusNode::Chain(left, right)))
+            HydroNode::Chain(mb!(* HydroNode::Persist(left)), mb!(* HydroNode::Persist(right))) => {
+                HydroNode::Persist(Box::new(HydroNode::Chain(left, right)))
             }
 
-            HfPlusNode::CrossProduct(mb!(* HfPlusNode::Persist(left)), mb!(* HfPlusNode::Persist(right))) => {
-                HfPlusNode::Persist(Box::new(HfPlusNode::Delta(Box::new(
-                    HfPlusNode::CrossProduct(
-                        Box::new(HfPlusNode::Persist(left)),
-                        Box::new(HfPlusNode::Persist(right)),
+            HydroNode::CrossProduct(mb!(* HydroNode::Persist(left)), mb!(* HydroNode::Persist(right))) => {
+                HydroNode::Persist(Box::new(HydroNode::Delta(Box::new(
+                    HydroNode::CrossProduct(
+                        Box::new(HydroNode::Persist(left)),
+                        Box::new(HydroNode::Persist(right)),
                     ),
                 ))))
             }
 
-            HfPlusNode::Join(mb!(* HfPlusNode::Persist(left)), mb!(* HfPlusNode::Persist(right))) => {
-                HfPlusNode::Persist(Box::new(HfPlusNode::Delta(Box::new(HfPlusNode::Join(
-                    Box::new(HfPlusNode::Persist(left)),
-                    Box::new(HfPlusNode::Persist(right)),
+            HydroNode::Join(mb!(* HydroNode::Persist(left)), mb!(* HydroNode::Persist(right))) => {
+                HydroNode::Persist(Box::new(HydroNode::Delta(Box::new(HydroNode::Join(
+                    Box::new(HydroNode::Persist(left)),
+                    Box::new(HydroNode::Persist(right)),
                 )))))
             }
 
-            HfPlusNode::Unique(mb!(* HfPlusNode::Persist(inner))) => {
-                HfPlusNode::Persist(Box::new(HfPlusNode::Delta(Box::new(HfPlusNode::Unique(
-                    Box::new(HfPlusNode::Persist(inner)),
+            HydroNode::Unique(mb!(* HydroNode::Persist(inner))) => {
+                HydroNode::Persist(Box::new(HydroNode::Delta(Box::new(HydroNode::Unique(
+                    Box::new(HydroNode::Persist(inner)),
                 )))))
             }
 
@@ -327,7 +327,7 @@
     };
 }
 
-pub fn persist_pullup(ir: Vec<HfPlusLeaf>) -> Vec<HfPlusLeaf> {
+pub fn persist_pullup(ir: Vec<HydroLeaf>) -> Vec<HydroLeaf> {
     let mut seen_tees = Default::default();
     let mut persist_pulled_tees = Default::default();
     ir.into_iter()
diff --git a/doc/src/hydroflow_plus/rewrites/profiler.rs.html b/doc/src/hydro_lang/rewrites/profiler.rs.html
similarity index 79%
rename from doc/src/hydroflow_plus/rewrites/profiler.rs.html
rename to doc/src/hydro_lang/rewrites/profiler.rs.html
index 0cfc2ddebdcb..fdf11a9a5dc7 100644
--- a/doc/src/hydroflow_plus/rewrites/profiler.rs.html
+++ b/doc/src/hydro_lang/rewrites/profiler.rs.html
@@ -1,4 +1,4 @@
-profiler.rs - source
1
+profiler.rs - source
1
 2
 3
 4
@@ -125,7 +125,7 @@
 
 /// Add a profiling node before each node to count the cardinality of its input
 fn add_profiling_node<'a>(
-    node: &mut HfPlusNode,
+    node: &mut HydroNode,
     counters: RuntimeData<&'a RefCell<Vec<u64>>>,
     counter_queue: RuntimeData<&'a RefCell<UnboundedSender<(usize, u64)>>>,
     id: &mut u32,
@@ -138,8 +138,8 @@
         |node, seen_tees| add_profiling_node(node, counters, counter_queue, id, seen_tees),
         seen_tees,
     );
-    let orig_node = std::mem::replace(node, HfPlusNode::Placeholder);
-    *node = HfPlusNode::Inspect {
+    let orig_node = std::mem::replace(node, HydroNode::Placeholder);
+    *node = HydroNode::Inspect {
         f: quoted_any_fn(q!({
             // Put counters on queue
             counter_queue
@@ -159,10 +159,10 @@
 
 /// Count the cardinality of each input and periodically output to a file
 pub fn profiling<'a>(
-    ir: Vec<HfPlusLeaf>,
+    ir: Vec<HydroLeaf>,
     counters: RuntimeData<&'a RefCell<Vec<u64>>>,
     counter_queue: RuntimeData<&'a RefCell<UnboundedSender<(usize, u64)>>>,
-) -> Vec<HfPlusLeaf> {
+) -> Vec<HydroLeaf> {
     let mut id = 0;
     let mut seen_tees = Default::default();
     ir.into_iter()
diff --git a/doc/src/hydroflow_plus/rewrites/properties.rs.html b/doc/src/hydro_lang/rewrites/properties.rs.html
similarity index 79%
rename from doc/src/hydroflow_plus/rewrites/properties.rs.html
rename to doc/src/hydro_lang/rewrites/properties.rs.html
index 7d6762916b0a..9779cd91cf0e 100644
--- a/doc/src/hydroflow_plus/rewrites/properties.rs.html
+++ b/doc/src/hydro_lang/rewrites/properties.rs.html
@@ -1,4 +1,4 @@
-properties.rs - source
1
+properties.rs - source
1
 2
 3
 4
@@ -137,15 +137,11 @@
 137
 138
 139
-140
-141
-142
-143
 
use std::collections::HashSet;
 
 use stageleft::*;
 
-use crate::ir::{HfPlusLeaf, HfPlusNode, SeenTees};
+use crate::ir::{HydroLeaf, HydroNode, SeenTees};
 
 /// Structure for tracking expressions known to have particular algebraic properties.
 ///
@@ -202,24 +198,20 @@
 // Dataflow graph optimization rewrite rules based on algebraic property tags
 // TODO add a test that verifies the space of possible graphs after rewrites is correct for each property
 
-fn properties_optimize_node(
-    node: &mut HfPlusNode,
-    db: &PropertyDatabase,
-    seen_tees: &mut SeenTees,
-) {
+fn properties_optimize_node(node: &mut HydroNode, db: &PropertyDatabase, seen_tees: &mut SeenTees) {
     node.transform_children(
         |node, seen_tees| properties_optimize_node(node, db, seen_tees),
         seen_tees,
     );
     match node {
-        HfPlusNode::ReduceKeyed { f, .. } if db.is_tagged_commutative(&f.0) => {
+        HydroNode::ReduceKeyed { f, .. } if db.is_tagged_commutative(&f.0) => {
             dbg!("IDENTIFIED COMMUTATIVE OPTIMIZATION for {:?}", &f);
         }
         _ => {}
     }
 }
 
-pub fn properties_optimize(ir: Vec<HfPlusLeaf>, db: &PropertyDatabase) -> Vec<HfPlusLeaf> {
+pub fn properties_optimize(ir: Vec<HydroLeaf>, db: &PropertyDatabase) -> Vec<HydroLeaf> {
     let mut seen_tees = Default::default();
     ir.into_iter()
         .map(|l| {
diff --git a/doc/src/hydroflow_plus/runtime_context.rs.html b/doc/src/hydro_lang/runtime_context.rs.html
similarity index 72%
rename from doc/src/hydroflow_plus/runtime_context.rs.html
rename to doc/src/hydro_lang/runtime_context.rs.html
index 99e38ce55beb..ff20366e8dbe 100644
--- a/doc/src/hydroflow_plus/runtime_context.rs.html
+++ b/doc/src/hydro_lang/runtime_context.rs.html
@@ -1,4 +1,4 @@
-runtime_context.rs - source
1
+runtime_context.rs - source
1
 2
 3
 4
diff --git a/doc/src/hydroflow_plus/singleton.rs.html b/doc/src/hydro_lang/singleton.rs.html
similarity index 89%
rename from doc/src/hydroflow_plus/singleton.rs.html
rename to doc/src/hydro_lang/singleton.rs.html
index bcdbd78851b1..52ac18deb287 100644
--- a/doc/src/hydroflow_plus/singleton.rs.html
+++ b/doc/src/hydro_lang/singleton.rs.html
@@ -1,4 +1,4 @@
-singleton.rs - source
1
+singleton.rs - source
1
 2
 3
 4
@@ -534,20 +534,20 @@
     CycleCollection, CycleCollectionWithInitial, CycleComplete, DeferTick, ForwardRefMarker,
     TickCycleMarker,
 };
-use crate::ir::{HfPlusLeaf, HfPlusNode, TeeNode};
+use crate::ir::{HydroLeaf, HydroNode, TeeNode};
 use crate::location::tick::{NoTimestamp, Timestamped};
 use crate::location::{check_matching_location, Location, LocationId, NoTick, Tick};
 use crate::{Bounded, Optional, Stream, Unbounded};
 
 pub struct Singleton<T, L, B> {
     pub(crate) location: L,
-    pub(crate) ir_node: RefCell<HfPlusNode>,
+    pub(crate) ir_node: RefCell<HydroNode>,
 
     _phantom: PhantomData<(T, L, B)>,
 }
 
 impl<'a, T, L: Location<'a>, B> Singleton<T, L, B> {
-    pub(crate) fn new(location: L, ir_node: HfPlusNode) -> Self {
+    pub(crate) fn new(location: L, ir_node: HydroNode) -> Self {
         Singleton {
             location,
             ir_node: RefCell::new(ir_node),
@@ -581,8 +581,8 @@
         let location_id = location.id();
         Singleton::new(
             location,
-            HfPlusNode::Chain(
-                Box::new(HfPlusNode::CycleSource {
+            HydroNode::Chain(
+                Box::new(HydroNode::CycleSource {
                     ident,
                     location_kind: location_id,
                 }),
@@ -605,7 +605,7 @@
             .leaves
             .as_mut()
             .expect(FLOW_USED_MESSAGE)
-            .push(HfPlusLeaf::CycleSink {
+            .push(HydroLeaf::CycleSink {
                 ident,
                 location_kind: self.location_kind(),
                 input: Box::new(self.ir_node.into_inner()),
@@ -622,7 +622,7 @@
         let location_id = location.id();
         Singleton::new(
             location,
-            HfPlusNode::CycleSource {
+            HydroNode::CycleSource {
                 ident,
                 location_kind: location_id,
             },
@@ -645,7 +645,7 @@
             .leaves
             .as_mut()
             .expect(FLOW_USED_MESSAGE)
-            .push(HfPlusLeaf::CycleSink {
+            .push(HydroLeaf::CycleSink {
                 ident,
                 location_kind: self.location_kind(),
                 input: Box::new(self.ir_node.into_inner()),
@@ -662,7 +662,7 @@
         let location_id = location.id();
         Singleton::new(
             location,
-            HfPlusNode::Persist(Box::new(HfPlusNode::CycleSource {
+            HydroNode::Persist(Box::new(HydroNode::CycleSource {
                 ident,
                 location_kind: location_id,
             })),
@@ -685,27 +685,27 @@
             .leaves
             .as_mut()
             .expect(FLOW_USED_MESSAGE)
-            .push(HfPlusLeaf::CycleSink {
+            .push(HydroLeaf::CycleSink {
                 ident,
                 location_kind: self.location_kind(),
-                input: Box::new(HfPlusNode::Unpersist(Box::new(self.ir_node.into_inner()))),
+                input: Box::new(HydroNode::Unpersist(Box::new(self.ir_node.into_inner()))),
             });
     }
 }
 
 impl<'a, T: Clone, L: Location<'a>, B> Clone for Singleton<T, L, B> {
     fn clone(&self) -> Self {
-        if !matches!(self.ir_node.borrow().deref(), HfPlusNode::Tee { .. }) {
-            let orig_ir_node = self.ir_node.replace(HfPlusNode::Placeholder);
-            *self.ir_node.borrow_mut() = HfPlusNode::Tee {
+        if !matches!(self.ir_node.borrow().deref(), HydroNode::Tee { .. }) {
+            let orig_ir_node = self.ir_node.replace(HydroNode::Placeholder);
+            *self.ir_node.borrow_mut() = HydroNode::Tee {
                 inner: TeeNode(Rc::new(RefCell::new(orig_ir_node))),
             };
         }
 
-        if let HfPlusNode::Tee { inner } = self.ir_node.borrow().deref() {
+        if let HydroNode::Tee { inner } = self.ir_node.borrow().deref() {
             Singleton {
                 location: self.location.clone(),
-                ir_node: HfPlusNode::Tee {
+                ir_node: HydroNode::Tee {
                     inner: TeeNode(inner.0.clone()),
                 }
                 .into(),
@@ -722,7 +722,7 @@
         let f = f.splice_fn1_ctx(&self.location).into();
         Singleton::new(
             self.location,
-            HfPlusNode::Map {
+            HydroNode::Map {
                 f,
                 input: Box::new(self.ir_node.into_inner()),
             },
@@ -736,7 +736,7 @@
         let f = f.splice_fn1_ctx(&self.location).into();
         Stream::new(
             self.location,
-            HfPlusNode::FlatMap {
+            HydroNode::FlatMap {
                 f,
                 input: Box::new(self.ir_node.into_inner()),
             },
@@ -750,7 +750,7 @@
         let f = f.splice_fn1_ctx(&self.location).into();
         Stream::new(
             self.location,
-            HfPlusNode::FlatMap {
+            HydroNode::FlatMap {
                 f,
                 input: Box::new(self.ir_node.into_inner()),
             },
@@ -764,7 +764,7 @@
         let f = f.splice_fn1_borrow_ctx(&self.location).into();
         Optional::new(
             self.location,
-            HfPlusNode::Filter {
+            HydroNode::Filter {
                 f,
                 input: Box::new(self.ir_node.into_inner()),
             },
@@ -778,7 +778,7 @@
         let f = f.splice_fn1_ctx(&self.location).into();
         Optional::new(
             self.location,
-            HfPlusNode::FilterMap {
+            HydroNode::FilterMap {
                 f,
                 input: Box::new(self.ir_node.into_inner()),
             },
@@ -794,15 +794,15 @@
         if L::is_top_level() {
             Self::make(
                 self.location,
-                HfPlusNode::Persist(Box::new(HfPlusNode::CrossSingleton(
-                    Box::new(HfPlusNode::Unpersist(Box::new(self.ir_node.into_inner()))),
-                    Box::new(HfPlusNode::Unpersist(Box::new(Self::other_ir_node(other)))),
+                HydroNode::Persist(Box::new(HydroNode::CrossSingleton(
+                    Box::new(HydroNode::Unpersist(Box::new(self.ir_node.into_inner()))),
+                    Box::new(HydroNode::Unpersist(Box::new(Self::other_ir_node(other)))),
                 ))),
             )
         } else {
             Self::make(
                 self.location,
-                HfPlusNode::CrossSingleton(
+                HydroNode::CrossSingleton(
                     Box::new(self.ir_node.into_inner()),
                     Box::new(Self::other_ir_node(other)),
                 ),
@@ -847,7 +847,7 @@
     pub unsafe fn latest_tick(self) -> Singleton<T, Tick<L>, Bounded> {
         Singleton::new(
             self.location.tick,
-            HfPlusNode::Unpersist(Box::new(self.ir_node.into_inner())),
+            HydroNode::Unpersist(Box::new(self.ir_node.into_inner())),
         )
     }
 
@@ -922,7 +922,7 @@
             Timestamped {
                 tick: self.location,
             },
-            HfPlusNode::Persist(Box::new(self.ir_node.into_inner())),
+            HydroNode::Persist(Box::new(self.ir_node.into_inner())),
         )
     }
 
@@ -931,28 +931,28 @@
             Timestamped {
                 tick: self.location,
             },
-            HfPlusNode::Persist(Box::new(self.ir_node.into_inner())),
+            HydroNode::Persist(Box::new(self.ir_node.into_inner())),
         )
     }
 
     pub fn defer_tick(self) -> Singleton<T, Tick<L>, Bounded> {
         Singleton::new(
             self.location,
-            HfPlusNode::DeferTick(Box::new(self.ir_node.into_inner())),
+            HydroNode::DeferTick(Box::new(self.ir_node.into_inner())),
         )
     }
 
     pub fn persist(self) -> Stream<T, Tick<L>, Bounded> {
         Stream::new(
             self.location,
-            HfPlusNode::Persist(Box::new(self.ir_node.into_inner())),
+            HydroNode::Persist(Box::new(self.ir_node.into_inner())),
         )
     }
 
     pub fn delta(self) -> Optional<T, Tick<L>, Bounded> {
         Optional::new(
             self.location,
-            HfPlusNode::Delta(Box::new(self.ir_node.into_inner())),
+            HydroNode::Delta(Box::new(self.ir_node.into_inner())),
         )
     }
 
@@ -966,9 +966,9 @@
     type Location;
 
     fn other_location(other: &Other) -> Self::Location;
-    fn other_ir_node(other: Other) -> HfPlusNode;
+    fn other_ir_node(other: Other) -> HydroNode;
 
-    fn make(location: Self::Location, ir_node: HfPlusNode) -> Self::Out;
+    fn make(location: Self::Location, ir_node: HydroNode) -> Self::Out;
 }
 
 impl<'a, T, U: Clone, L: Location<'a>, B> ZipResult<'a, Singleton<U, Timestamped<L>, B>>
@@ -981,11 +981,11 @@
         other.location.clone()
     }
 
-    fn other_ir_node(other: Singleton<U, Timestamped<L>, B>) -> HfPlusNode {
+    fn other_ir_node(other: Singleton<U, Timestamped<L>, B>) -> HydroNode {
         other.ir_node.into_inner()
     }
 
-    fn make(location: Timestamped<L>, ir_node: HfPlusNode) -> Self::Out {
+    fn make(location: Timestamped<L>, ir_node: HydroNode) -> Self::Out {
         Singleton::new(location, ir_node)
     }
 }
@@ -1000,11 +1000,11 @@
         other.location.clone()
     }
 
-    fn other_ir_node(other: Optional<U, Timestamped<L>, B>) -> HfPlusNode {
+    fn other_ir_node(other: Optional<U, Timestamped<L>, B>) -> HydroNode {
         other.ir_node.into_inner()
     }
 
-    fn make(location: Timestamped<L>, ir_node: HfPlusNode) -> Self::Out {
+    fn make(location: Timestamped<L>, ir_node: HydroNode) -> Self::Out {
         Optional::new(location, ir_node)
     }
 }
@@ -1019,11 +1019,11 @@
         other.location.clone()
     }
 
-    fn other_ir_node(other: Singleton<U, Tick<L>, B>) -> HfPlusNode {
+    fn other_ir_node(other: Singleton<U, Tick<L>, B>) -> HydroNode {
         other.ir_node.into_inner()
     }
 
-    fn make(location: Tick<L>, ir_node: HfPlusNode) -> Self::Out {
+    fn make(location: Tick<L>, ir_node: HydroNode) -> Self::Out {
         Singleton::new(location, ir_node)
     }
 }
@@ -1038,11 +1038,11 @@
         other.location.clone()
     }
 
-    fn other_ir_node(other: Optional<U, Tick<L>, B>) -> HfPlusNode {
+    fn other_ir_node(other: Optional<U, Tick<L>, B>) -> HydroNode {
         other.ir_node.into_inner()
     }
 
-    fn make(location: Tick<L>, ir_node: HfPlusNode) -> Self::Out {
+    fn make(location: Tick<L>, ir_node: HydroNode) -> Self::Out {
         Optional::new(location, ir_node)
     }
 }
diff --git a/doc/src/hydro_lang/staging_util.rs.html b/doc/src/hydro_lang/staging_util.rs.html
new file mode 100644
index 000000000000..ca5750d3f447
--- /dev/null
+++ b/doc/src/hydro_lang/staging_util.rs.html
@@ -0,0 +1,37 @@
+staging_util.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+
use std::marker::PhantomData;
+
+use proc_macro2::{Span, TokenStream};
+use quote::quote;
+
+pub type Invariant<'a, D = ()> = PhantomData<(fn(&'a ()) -> &'a (), D)>;
+
+pub fn get_this_crate() -> TokenStream {
+    let hydroflow_crate = proc_macro_crate::crate_name("hydro_lang")
+        .expect("hydro_lang should be present in `Cargo.toml`");
+    match hydroflow_crate {
+        proc_macro_crate::FoundCrate::Itself => quote! { hydro_lang },
+        proc_macro_crate::FoundCrate::Name(name) => {
+            let ident = syn::Ident::new(&name, Span::call_site());
+            quote! { #ident }
+        }
+    }
+}
+
\ No newline at end of file diff --git a/doc/src/hydroflow_plus/stream.rs.html b/doc/src/hydro_lang/stream.rs.html similarity index 95% rename from doc/src/hydroflow_plus/stream.rs.html rename to doc/src/hydro_lang/stream.rs.html index 6fedca51310e..b597416eb4a2 100644 --- a/doc/src/hydroflow_plus/stream.rs.html +++ b/doc/src/hydro_lang/stream.rs.html @@ -1,4 +1,4 @@ -stream.rs - source
1
+stream.rs - source
1
 2
 3
 4
@@ -1392,7 +1392,7 @@
 
 use crate::builder::FLOW_USED_MESSAGE;
 use crate::cycle::{CycleCollection, CycleComplete, DeferTick, ForwardRefMarker, TickCycleMarker};
-use crate::ir::{DebugInstantiate, HfPlusLeaf, HfPlusNode, TeeNode};
+use crate::ir::{DebugInstantiate, HydroLeaf, HydroNode, TeeNode};
 use crate::location::cluster::CLUSTER_SELF_ID;
 use crate::location::external_process::{ExternalBincodeStream, ExternalBytesPort};
 use crate::location::tick::{NoTimestamp, Timestamped};
@@ -1447,7 +1447,7 @@
 ///   or [`NoOrder`] (default is [`TotalOrder`])
 pub struct Stream<T, L, B, Order = TotalOrder> {
     location: L,
-    pub(crate) ir_node: RefCell<HfPlusNode>,
+    pub(crate) ir_node: RefCell<HydroNode>,
 
     _phantom: PhantomData<(T, L, B, Order)>,
 }
@@ -1483,7 +1483,7 @@
         let location_id = location.id();
         Stream::new(
             location,
-            HfPlusNode::CycleSource {
+            HydroNode::CycleSource {
                 ident,
                 location_kind: location_id,
             },
@@ -1506,7 +1506,7 @@
             .leaves
             .as_mut()
             .expect(FLOW_USED_MESSAGE)
-            .push(HfPlusLeaf::CycleSink {
+            .push(HydroLeaf::CycleSink {
                 ident,
                 location_kind: self.location_kind(),
                 input: Box::new(self.ir_node.into_inner()),
@@ -1523,7 +1523,7 @@
         let location_id = location.id();
         Stream::new(
             location,
-            HfPlusNode::Persist(Box::new(HfPlusNode::CycleSource {
+            HydroNode::Persist(Box::new(HydroNode::CycleSource {
                 ident,
                 location_kind: location_id,
             })),
@@ -1546,16 +1546,16 @@
             .leaves
             .as_mut()
             .expect(FLOW_USED_MESSAGE)
-            .push(HfPlusLeaf::CycleSink {
+            .push(HydroLeaf::CycleSink {
                 ident,
                 location_kind: self.location_kind(),
-                input: Box::new(HfPlusNode::Unpersist(Box::new(self.ir_node.into_inner()))),
+                input: Box::new(HydroNode::Unpersist(Box::new(self.ir_node.into_inner()))),
             });
     }
 }
 
 impl<'a, T, L: Location<'a>, B, Order> Stream<T, L, B, Order> {
-    pub(crate) fn new(location: L, ir_node: HfPlusNode) -> Self {
+    pub(crate) fn new(location: L, ir_node: HydroNode) -> Self {
         Stream {
             location,
             ir_node: RefCell::new(ir_node),
@@ -1566,17 +1566,17 @@
 
 impl<'a, T: Clone, L: Location<'a>, B, Order> Clone for Stream<T, L, B, Order> {
     fn clone(&self) -> Self {
-        if !matches!(self.ir_node.borrow().deref(), HfPlusNode::Tee { .. }) {
-            let orig_ir_node = self.ir_node.replace(HfPlusNode::Placeholder);
-            *self.ir_node.borrow_mut() = HfPlusNode::Tee {
+        if !matches!(self.ir_node.borrow().deref(), HydroNode::Tee { .. }) {
+            let orig_ir_node = self.ir_node.replace(HydroNode::Placeholder);
+            *self.ir_node.borrow_mut() = HydroNode::Tee {
                 inner: TeeNode(Rc::new(RefCell::new(orig_ir_node))),
             };
         }
 
-        if let HfPlusNode::Tee { inner } = self.ir_node.borrow().deref() {
+        if let HydroNode::Tee { inner } = self.ir_node.borrow().deref() {
             Stream {
                 location: self.location.clone(),
-                ir_node: HfPlusNode::Tee {
+                ir_node: HydroNode::Tee {
                     inner: TeeNode(inner.0.clone()),
                 }
                 .into(),
@@ -1596,7 +1596,7 @@
         let f = f.splice_fn1_ctx(&self.location).into();
         Stream::new(
             self.location,
-            HfPlusNode::Map {
+            HydroNode::Map {
                 f,
                 input: Box::new(self.ir_node.into_inner()),
             },
@@ -1617,7 +1617,7 @@
         let f = f.splice_fn1_ctx(&self.location).into();
         Stream::new(
             self.location,
-            HfPlusNode::FlatMap {
+            HydroNode::FlatMap {
                 f,
                 input: Box::new(self.ir_node.into_inner()),
             },
@@ -1631,7 +1631,7 @@
         let f = f.splice_fn1_ctx(&self.location).into();
         Stream::new(
             self.location,
-            HfPlusNode::FlatMap {
+            HydroNode::FlatMap {
                 f,
                 input: Box::new(self.ir_node.into_inner()),
             },
@@ -1659,7 +1659,7 @@
         let f = f.splice_fn1_borrow_ctx(&self.location).into();
         Stream::new(
             self.location,
-            HfPlusNode::Filter {
+            HydroNode::Filter {
                 f,
                 input: Box::new(self.ir_node.into_inner()),
             },
@@ -1673,7 +1673,7 @@
         let f = f.splice_fn1_ctx(&self.location).into();
         Stream::new(
             self.location,
-            HfPlusNode::FilterMap {
+            HydroNode::FilterMap {
                 f,
                 input: Box::new(self.ir_node.into_inner()),
             },
@@ -1692,7 +1692,7 @@
 
         Stream::new(
             self.location,
-            HfPlusNode::CrossSingleton(
+            HydroNode::CrossSingleton(
                 Box::new(self.ir_node.into_inner()),
                 Box::new(other.ir_node.into_inner()),
             ),
@@ -1719,7 +1719,7 @@
 
         Stream::new(
             self.location,
-            HfPlusNode::CrossProduct(
+            HydroNode::CrossProduct(
                 Box::new(self.ir_node.into_inner()),
                 Box::new(other.ir_node.into_inner()),
             ),
@@ -1732,7 +1732,7 @@
     {
         Stream::new(
             self.location,
-            HfPlusNode::Unique(Box::new(self.ir_node.into_inner())),
+            HydroNode::Unique(Box::new(self.ir_node.into_inner())),
         )
     }
 
@@ -1744,7 +1744,7 @@
 
         Stream::new(
             self.location,
-            HfPlusNode::Difference(
+            HydroNode::Difference(
                 Box::new(self.ir_node.into_inner()),
                 Box::new(other.ir_node.into_inner()),
             ),
@@ -1760,15 +1760,15 @@
         if L::is_top_level() {
             Stream::new(
                 self.location,
-                HfPlusNode::Persist(Box::new(HfPlusNode::Inspect {
+                HydroNode::Persist(Box::new(HydroNode::Inspect {
                     f,
-                    input: Box::new(HfPlusNode::Unpersist(Box::new(self.ir_node.into_inner()))),
+                    input: Box::new(HydroNode::Unpersist(Box::new(self.ir_node.into_inner()))),
                 })),
             )
         } else {
             Stream::new(
                 self.location,
-                HfPlusNode::Inspect {
+                HydroNode::Inspect {
                     f,
                     input: Box::new(self.ir_node.into_inner()),
                 },
@@ -1801,7 +1801,7 @@
         let init = init.splice_fn0_ctx(&self.location).into();
         let comb = comb.splice_fn2_borrow_mut_ctx(&self.location).into();
 
-        let mut core = HfPlusNode::Fold {
+        let mut core = HydroNode::Fold {
             init,
             acc: comb,
             input: Box::new(self.ir_node.into_inner()),
@@ -1811,7 +1811,7 @@
             // top-level (possibly unbounded) singletons are represented as
             // a stream which produces all values from all ticks every tick,
             // so Unpersist will always give the lastest aggregation
-            core = HfPlusNode::Persist(Box::new(core));
+            core = HydroNode::Persist(Box::new(core));
         }
 
         Singleton::new(self.location, core)
@@ -1822,13 +1822,13 @@
         comb: impl IntoQuotedMut<'a, F, L>,
     ) -> Optional<T, L, B> {
         let f = comb.splice_fn2_borrow_mut_ctx(&self.location).into();
-        let mut core = HfPlusNode::Reduce {
+        let mut core = HydroNode::Reduce {
             f,
             input: Box::new(self.ir_node.into_inner()),
         };
 
         if L::is_top_level() {
-            core = HfPlusNode::Persist(Box::new(core));
+            core = HydroNode::Persist(Box::new(core));
         }
 
         Optional::new(self.location, core)
@@ -1860,13 +1860,13 @@
             }
         });
 
-        let mut core = HfPlusNode::Reduce {
+        let mut core = HydroNode::Reduce {
             f: wrapped.into(),
             input: Box::new(self.ir_node.into_inner()),
         };
 
         if L::is_top_level() {
-            core = HfPlusNode::Persist(Box::new(core));
+            core = HydroNode::Persist(Box::new(core));
         }
 
         Optional::new(self.location, core)
@@ -1893,15 +1893,15 @@
         if L::is_top_level() {
             Stream::new(
                 self.location,
-                HfPlusNode::Persist(Box::new(HfPlusNode::Enumerate {
+                HydroNode::Persist(Box::new(HydroNode::Enumerate {
                     is_static: true,
-                    input: Box::new(HfPlusNode::Unpersist(Box::new(self.ir_node.into_inner()))),
+                    input: Box::new(HydroNode::Unpersist(Box::new(self.ir_node.into_inner()))),
                 })),
             )
         } else {
             Stream::new(
                 self.location,
-                HfPlusNode::Enumerate {
+                HydroNode::Enumerate {
                     is_static: false,
                     input: Box::new(self.ir_node.into_inner()),
                 },
@@ -1925,7 +1925,7 @@
         let init = init.splice_fn0_ctx(&self.location).into();
         let comb = comb.splice_fn2_borrow_mut_ctx(&self.location).into();
 
-        let mut core = HfPlusNode::Fold {
+        let mut core = HydroNode::Fold {
             init,
             acc: comb,
             input: Box::new(self.ir_node.into_inner()),
@@ -1935,7 +1935,7 @@
             // top-level (possibly unbounded) singletons are represented as
             // a stream which produces all values from all ticks every tick,
             // so Unpersist will always give the lastest aggregation
-            core = HfPlusNode::Persist(Box::new(core));
+            core = HydroNode::Persist(Box::new(core));
         }
 
         Singleton::new(self.location, core)
@@ -1946,13 +1946,13 @@
         comb: impl IntoQuotedMut<'a, F, L>,
     ) -> Optional<T, L, B> {
         let f = comb.splice_fn2_borrow_mut_ctx(&self.location).into();
-        let mut core = HfPlusNode::Reduce {
+        let mut core = HydroNode::Reduce {
             f,
             input: Box::new(self.ir_node.into_inner()),
         };
 
         if L::is_top_level() {
-            core = HfPlusNode::Persist(Box::new(core));
+            core = HydroNode::Persist(Box::new(core));
         }
 
         Optional::new(self.location, core)
@@ -1968,7 +1968,7 @@
 
         Stream::new(
             self.location,
-            HfPlusNode::Chain(
+            HydroNode::Chain(
                 Box::new(self.ir_node.into_inner()),
                 Box::new(other.ir_node.into_inner()),
             ),
@@ -2001,7 +2001,7 @@
     {
         Stream::new(
             self.location,
-            HfPlusNode::Sort(Box::new(self.ir_node.into_inner())),
+            HydroNode::Sort(Box::new(self.ir_node.into_inner())),
         )
     }
 
@@ -2013,7 +2013,7 @@
 
         Stream::new(
             self.location,
-            HfPlusNode::Chain(
+            HydroNode::Chain(
                 Box::new(self.ir_node.into_inner()),
                 Box::new(other.ir_node.into_inner()),
             ),
@@ -2030,7 +2030,7 @@
 
         Stream::new(
             self.location,
-            HfPlusNode::Join(
+            HydroNode::Join(
                 Box::new(self.ir_node.into_inner()),
                 Box::new(n.ir_node.into_inner()),
             ),
@@ -2045,7 +2045,7 @@
 
         Stream::new(
             self.location,
-            HfPlusNode::AntiJoin(
+            HydroNode::AntiJoin(
                 Box::new(self.ir_node.into_inner()),
                 Box::new(n.ir_node.into_inner()),
             ),
@@ -2064,7 +2064,7 @@
 
         Stream::new(
             self.location,
-            HfPlusNode::FoldKeyed {
+            HydroNode::FoldKeyed {
                 init,
                 acc: comb,
                 input: Box::new(self.ir_node.into_inner()),
@@ -2080,7 +2080,7 @@
 
         Stream::new(
             self.location,
-            HfPlusNode::ReduceKeyed {
+            HydroNode::ReduceKeyed {
                 f,
                 input: Box::new(self.ir_node.into_inner()),
             },
@@ -2099,7 +2099,7 @@
 
         Stream::new(
             self.location,
-            HfPlusNode::FoldKeyed {
+            HydroNode::FoldKeyed {
                 init,
                 acc: comb,
                 input: Box::new(self.ir_node.into_inner()),
@@ -2120,7 +2120,7 @@
 
         Stream::new(
             self.location,
-            HfPlusNode::ReduceKeyed {
+            HydroNode::ReduceKeyed {
                 f,
                 input: Box::new(self.ir_node.into_inner()),
             },
@@ -2138,7 +2138,7 @@
     pub unsafe fn tick_batch(self) -> Stream<T, Tick<L>, Bounded, Order> {
         Stream::new(
             self.location.tick,
-            HfPlusNode::Unpersist(Box::new(self.ir_node.into_inner())),
+            HydroNode::Unpersist(Box::new(self.ir_node.into_inner())),
         )
     }
 
@@ -2242,8 +2242,8 @@
             .leaves
             .as_mut()
             .expect(FLOW_USED_MESSAGE)
-            .push(HfPlusLeaf::ForEach {
-                input: Box::new(HfPlusNode::Unpersist(Box::new(self.ir_node.into_inner()))),
+            .push(HydroLeaf::ForEach {
+                input: Box::new(HydroNode::Unpersist(Box::new(self.ir_node.into_inner()))),
                 f,
             });
     }
@@ -2258,7 +2258,7 @@
             .leaves
             .as_mut()
             .expect(FLOW_USED_MESSAGE)
-            .push(HfPlusLeaf::DestSink {
+            .push(HydroLeaf::DestSink {
                 sink: sink.splice_typed_ctx(&self.location).into(),
                 input: Box::new(self.ir_node.into_inner()),
             });
@@ -2271,7 +2271,7 @@
             Timestamped {
                 tick: self.location.clone(),
             },
-            HfPlusNode::Persist(Box::new(self.ir_node.into_inner())),
+            HydroNode::Persist(Box::new(self.ir_node.into_inner())),
         )
     }
 
@@ -2281,21 +2281,21 @@
     {
         Stream::new(
             self.location,
-            HfPlusNode::Persist(Box::new(self.ir_node.into_inner())),
+            HydroNode::Persist(Box::new(self.ir_node.into_inner())),
         )
     }
 
     pub fn defer_tick(self) -> Stream<T, Tick<L>, Bounded, Order> {
         Stream::new(
             self.location,
-            HfPlusNode::DeferTick(Box::new(self.ir_node.into_inner())),
+            HydroNode::DeferTick(Box::new(self.ir_node.into_inner())),
         )
     }
 
     pub fn delta(self) -> Stream<T, Tick<L>, Bounded, Order> {
         Stream::new(
             self.location,
-            HfPlusNode::Delta(Box::new(self.ir_node.into_inner())),
+            HydroNode::Delta(Box::new(self.ir_node.into_inner())),
         )
     }
 }
@@ -2399,7 +2399,7 @@
 
         Stream::new(
             other.clone(),
-            HfPlusNode::Network {
+            HydroNode::Network {
                 from_location: self.location.root().id(),
                 from_key: None,
                 to_location: other.id(),
@@ -2432,9 +2432,9 @@
 
         let dummy_f: syn::Expr = syn::parse_quote!(());
 
-        leaves.push(HfPlusLeaf::ForEach {
+        leaves.push(HydroLeaf::ForEach {
             f: dummy_f.into(),
-            input: Box::new(HfPlusNode::Network {
+            input: Box::new(HydroNode::Network {
                 from_location: self.location.root().id(),
                 from_key: None,
                 to_location: other.id(),
@@ -2464,7 +2464,7 @@
         let root = get_this_crate();
         Stream::new(
             other.clone(),
-            HfPlusNode::Network {
+            HydroNode::Network {
                 from_location: self.location.root().id(),
                 from_key: None,
                 to_location: other.id(),
@@ -2495,9 +2495,9 @@
 
         let dummy_f: syn::Expr = syn::parse_quote!(());
 
-        leaves.push(HfPlusLeaf::ForEach {
+        leaves.push(HydroLeaf::ForEach {
             f: dummy_f.into(),
-            input: Box::new(HfPlusNode::Network {
+            input: Box::new(HydroNode::Network {
                 from_location: self.location.root().id(),
                 from_key: None,
                 to_location: other.id(),
diff --git a/doc/src/hydro_std/home/runner/work/hydroflow/hydroflow/target/debug/build/hydro_std-4cd7777ccf0024f3/out/lib_pub.rs.html b/doc/src/hydro_std/home/runner/work/hydroflow/hydroflow/target/debug/build/hydro_std-4cd7777ccf0024f3/out/lib_pub.rs.html
new file mode 100644
index 000000000000..1314a6346f32
--- /dev/null
+++ b/doc/src/hydro_std/home/runner/work/hydroflow/hydroflow/target/debug/build/hydro_std-4cd7777ccf0024f3/out/lib_pub.rs.html
@@ -0,0 +1,2 @@
+lib_pub.rs - source
1
+
pub mod quorum { pub use std :: hash :: Hash ; pub use hydro_lang :: * ; pub use location :: NoTick ; # [expect (clippy :: type_complexity , reason = "stream types with ordering")] pub fn collect_quorum_with_response < 'a , L : Location < 'a > + NoTick , Order , K : Clone + Eq + Hash , V : Clone , E : Clone , > (responses : Stream < (K , Result < V , E >) , Timestamped < L > , Unbounded , Order > , min : usize , max : usize ,) -> (Stream < (K , V) , Timestamped < L > , Unbounded , Order > , Stream < (K , E) , Timestamped < L > , Unbounded , Order > ,) { let tick = responses . timestamp_source () ; let (not_all_complete_cycle , not_all) = tick . cycle :: < Stream < _ , _ , _ , Order > > () ; let current_responses = not_all . union (unsafe { responses . clone () . tick_batch () }) ; let count_per_key = current_responses . clone () . fold_keyed_commutative (q ! (move || (0 , 0)) , q ! (move | accum , value | { if value . is_ok () { accum . 0 += 1 ; } else { accum . 1 += 1 ; } }) ,) ; let not_reached_min_count = count_per_key . clone () . filter_map (q ! (move | (key , (success , _error)) | if success < min { Some (key) } else { None })) ; let reached_min_count = count_per_key . clone () . filter_map (q ! (move | (key , (success , _error)) | if success >= min { Some (key) } else { None })) ; let just_reached_quorum = if max == min { not_all_complete_cycle . complete_next_tick (current_responses . clone () . anti_join (reached_min_count)) ; current_responses . anti_join (not_reached_min_count) } else { let (min_but_not_max_complete_cycle , min_but_not_max) = tick . cycle () ; let received_from_all = count_per_key . filter_map (q ! (move | (key , (success , error)) | if (success + error) >= max { Some (key) } else { None })) ; min_but_not_max_complete_cycle . complete_next_tick (reached_min_count . filter_not_in (received_from_all . clone ())) ; not_all_complete_cycle . complete_next_tick (current_responses . clone () . anti_join (received_from_all)) ; current_responses . anti_join (not_reached_min_count) . anti_join (min_but_not_max) } ; (just_reached_quorum . filter_map (q ! (move | (key , res) | match res { Ok (v) => Some ((key , v)) , Err (_) => None , })) . all_ticks () , responses . filter_map (q ! (move | (key , res) | match res { Ok (_) => None , Err (e) => Some ((key , e)) , })) ,) } # [expect (clippy :: type_complexity , reason = "stream types with ordering")] pub fn collect_quorum < 'a , L : Location < 'a > + NoTick , Order , K : Clone + Eq + Hash , E : Clone > (responses : Stream < (K , Result < () , E >) , Timestamped < L > , Unbounded , Order > , min : usize , max : usize ,) -> (Stream < K , Timestamped < L > , Unbounded , Order > , Stream < (K , E) , Timestamped < L > , Unbounded , Order > ,) { let tick = responses . timestamp_source () ; let (not_all_complete_cycle , not_all) = tick . cycle :: < Stream < _ , _ , _ , Order > > () ; let current_responses = not_all . union (unsafe { responses . clone () . tick_batch () }) ; let count_per_key = current_responses . clone () . fold_keyed_commutative (q ! (move || (0 , 0)) , q ! (move | accum , value | { if value . is_ok () { accum . 0 += 1 ; } else { accum . 1 += 1 ; } }) ,) ; let reached_min_count = count_per_key . clone () . filter_map (q ! (move | (key , (success , _error)) | if success >= min { Some (key) } else { None })) ; let just_reached_quorum = if max == min { not_all_complete_cycle . complete_next_tick (current_responses . clone () . anti_join (reached_min_count . clone ()) ,) ; reached_min_count } else { let (min_but_not_max_complete_cycle , min_but_not_max) = tick . cycle () ; let received_from_all = count_per_key . filter_map (q ! (move | (key , (success , error)) | if (success + error) >= max { Some (key) } else { None })) ; min_but_not_max_complete_cycle . complete_next_tick (reached_min_count . clone () . filter_not_in (received_from_all . clone ()) ,) ; not_all_complete_cycle . complete_next_tick (current_responses . anti_join (received_from_all)) ; reached_min_count . filter_not_in (min_but_not_max) } ; (just_reached_quorum . all_ticks () , responses . filter_map (q ! (move | (key , res) | match res { Ok (_) => None , Err (e) => Some ((key , e)) , })) ,) } } pub mod request_response { pub use std :: hash :: Hash ; pub use hydro_lang :: * ; pub use location :: NoTick ; type JoinResponses < K , M , V , L > = Stream < (K , (M , V)) , Timestamped < L > , Unbounded , NoOrder > ; # [doc = " Given an incoming stream of request-response responses, joins with metadata generated"] # [doc = " at request time that is stored in-memory."] # [doc = ""] # [doc = " The metadata must be generated in the same or a previous tick than the response,"] # [doc = " typically at request time. Only one response element should be produced with a given"] # [doc = " key, same for the metadata stream."] pub fn join_responses < 'a , K : Clone + Eq + Hash , M : Clone , V : Clone , L : Location < 'a > + NoTick > (tick : & Tick < L > , responses : Stream < (K , V) , Timestamped < L > , Unbounded , NoOrder > , metadata : Stream < (K , M) , Tick < L > , Bounded , NoOrder > ,) -> JoinResponses < K , M , V , L > { let (remaining_to_join_complete_cycle , remaining_to_join) = tick . cycle :: < Stream < _ , _ , _ , NoOrder > > () ; let remaining_and_new : Stream < (K , M) , Tick < L > , Bounded , _ > = remaining_to_join . union (metadata) ; let responses = unsafe { responses . tick_batch () } ; let joined_this_tick = remaining_and_new . clone () . join (responses . clone ()) . map (q ! (| (key , (meta , resp)) | (key , (meta , resp)))) ; remaining_to_join_complete_cycle . complete_next_tick (remaining_and_new . anti_join (responses . map (q ! (| (key , _) | key)))) ; joined_this_tick . all_ticks () } } # [cfg (stageleft_macro)] # [stageleft :: runtime] # [cfg (test)] mod tests { # [ctor :: ctor] fn init () { hydro_lang :: deploy :: init_test () ; } }
\ No newline at end of file diff --git a/doc/src/hydro_std/lib.rs.html b/doc/src/hydro_std/lib.rs.html new file mode 100644 index 000000000000..175f5fd1e682 --- /dev/null +++ b/doc/src/hydro_std/lib.rs.html @@ -0,0 +1,27 @@ +lib.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+
stageleft::stageleft_no_entry_crate!();
+
+pub mod quorum;
+pub mod request_response;
+
+#[stageleft::runtime]
+#[cfg(test)]
+mod tests {
+    #[ctor::ctor]
+    fn init() {
+        hydro_lang::deploy::init_test();
+    }
+}
+
\ No newline at end of file diff --git a/doc/src/hydroflow_plus_std/quorum.rs.html b/doc/src/hydro_std/quorum.rs.html similarity index 86% rename from doc/src/hydroflow_plus_std/quorum.rs.html rename to doc/src/hydro_std/quorum.rs.html index 093718f5ccca..fd32d09811f3 100644 --- a/doc/src/hydroflow_plus_std/quorum.rs.html +++ b/doc/src/hydro_std/quorum.rs.html @@ -1,4 +1,4 @@ -quorum.rs - source
1
+quorum.rs - source
1
 2
 3
 4
@@ -178,7 +178,7 @@
 178
 
use std::hash::Hash;
 
-use hydroflow_plus::*;
+use hydro_lang::*;
 use location::NoTick;
 
 #[expect(clippy::type_complexity, reason = "stream types with ordering")]
diff --git a/doc/src/hydroflow_plus_std/request_response.rs.html b/doc/src/hydro_std/request_response.rs.html
similarity index 63%
rename from doc/src/hydroflow_plus_std/request_response.rs.html
rename to doc/src/hydro_std/request_response.rs.html
index e509e3364d46..f82b18d7bc49 100644
--- a/doc/src/hydroflow_plus_std/request_response.rs.html
+++ b/doc/src/hydro_std/request_response.rs.html
@@ -1,4 +1,4 @@
-request_response.rs - source
1
+request_response.rs - source
1
 2
 3
 4
@@ -42,7 +42,7 @@
 42
 
use std::hash::Hash;
 
-use hydroflow_plus::*;
+use hydro_lang::*;
 use location::NoTick;
 
 type JoinResponses<K, M, V, L> = Stream<(K, (M, V)), Timestamped<L>, Unbounded, NoOrder>;
diff --git a/doc/src/hydroflow_plus_test/cluster/compute_pi.rs.html b/doc/src/hydro_test/cluster/compute_pi.rs.html
similarity index 70%
rename from doc/src/hydroflow_plus_test/cluster/compute_pi.rs.html
rename to doc/src/hydro_test/cluster/compute_pi.rs.html
index a585da541f02..8711b091099a 100644
--- a/doc/src/hydroflow_plus_test/cluster/compute_pi.rs.html
+++ b/doc/src/hydro_test/cluster/compute_pi.rs.html
@@ -1,4 +1,4 @@
-compute_pi.rs - source
1
+compute_pi.rs - source
1
 2
 3
 4
@@ -73,7 +73,7 @@
 73
 
use std::time::Duration;
 
-use hydroflow_plus::*;
+use hydro_lang::*;
 
 pub struct Worker {}
 pub struct Leader {}
@@ -126,12 +126,12 @@
 
 #[cfg(test)]
 mod tests {
-    use hydroflow_plus::deploy::DeployRuntime;
+    use hydro_lang::deploy::DeployRuntime;
     use stageleft::RuntimeData;
 
     #[test]
     fn compute_pi_ir() {
-        let builder = hydroflow_plus::FlowBuilder::new();
+        let builder = hydro_lang::FlowBuilder::new();
         let _ = super::compute_pi(&builder, 8192);
         let built = builder.with_default_optimize::<DeployRuntime>();
 
diff --git a/doc/src/hydroflow_plus_test/cluster/many_to_many.rs.html b/doc/src/hydro_test/cluster/many_to_many.rs.html
similarity index 69%
rename from doc/src/hydroflow_plus_test/cluster/many_to_many.rs.html
rename to doc/src/hydro_test/cluster/many_to_many.rs.html
index 48f3919efe4f..ac8c566a641a 100644
--- a/doc/src/hydroflow_plus_test/cluster/many_to_many.rs.html
+++ b/doc/src/hydro_test/cluster/many_to_many.rs.html
@@ -1,4 +1,4 @@
-many_to_many.rs - source
1
+many_to_many.rs - source
1
 2
 3
 4
@@ -62,7 +62,7 @@
 62
 63
 64
-
use hydroflow_plus::*;
+
use hydro_lang::*;
 
 pub fn many_to_many<'a>(flow: &FlowBuilder<'a>) -> Cluster<'a, ()> {
     let cluster = flow.cluster();
@@ -77,13 +77,13 @@
 #[cfg(test)]
 mod tests {
     use hydro_deploy::Deployment;
-    use hydroflow_plus::deploy::DeployCrateWrapper;
+    use hydro_lang::deploy::DeployCrateWrapper;
 
     #[tokio::test]
     async fn many_to_many() {
         let mut deployment = Deployment::new();
 
-        let builder = hydroflow_plus::FlowBuilder::new();
+        let builder = hydro_lang::FlowBuilder::new();
         let cluster = super::many_to_many(&builder);
         let built = builder.with_default_optimize();
 
diff --git a/doc/src/hydroflow_plus_test/cluster/map_reduce.rs.html b/doc/src/hydro_test/cluster/map_reduce.rs.html
similarity index 70%
rename from doc/src/hydroflow_plus_test/cluster/map_reduce.rs.html
rename to doc/src/hydro_test/cluster/map_reduce.rs.html
index f46edd6834e8..7da1d74979f7 100644
--- a/doc/src/hydroflow_plus_test/cluster/map_reduce.rs.html
+++ b/doc/src/hydro_test/cluster/map_reduce.rs.html
@@ -1,4 +1,4 @@
-map_reduce.rs - source
1
+map_reduce.rs - source
1
 2
 3
 4
@@ -61,7 +61,7 @@
 61
 62
 63
-
use hydroflow_plus::*;
+
use hydro_lang::*;
 
 pub struct Leader {}
 pub struct Worker {}
@@ -106,12 +106,12 @@
 
 #[cfg(test)]
 mod tests {
-    use hydroflow_plus::deploy::DeployRuntime;
+    use hydro_lang::deploy::DeployRuntime;
     use stageleft::RuntimeData;
 
     #[test]
     fn map_reduce_ir() {
-        let builder = hydroflow_plus::FlowBuilder::new();
+        let builder = hydro_lang::FlowBuilder::new();
         let _ = super::map_reduce(&builder);
         let built = builder.with_default_optimize::<DeployRuntime>();
 
diff --git a/doc/src/hydro_test/cluster/mod.rs.html b/doc/src/hydro_test/cluster/mod.rs.html
new file mode 100644
index 000000000000..2730c95bf0f4
--- /dev/null
+++ b/doc/src/hydro_test/cluster/mod.rs.html
@@ -0,0 +1,17 @@
+mod.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+
pub mod compute_pi;
+pub mod many_to_many;
+pub mod map_reduce;
+pub mod paxos;
+pub mod paxos_bench;
+pub mod paxos_kv;
+pub mod simple_cluster;
+pub mod two_pc;
+
\ No newline at end of file diff --git a/doc/src/hydroflow_plus_test/cluster/paxos.rs.html b/doc/src/hydro_test/cluster/paxos.rs.html similarity index 96% rename from doc/src/hydroflow_plus_test/cluster/paxos.rs.html rename to doc/src/hydro_test/cluster/paxos.rs.html index 43b567336e70..935b4a3dbb85 100644 --- a/doc/src/hydroflow_plus_test/cluster/paxos.rs.html +++ b/doc/src/hydro_test/cluster/paxos.rs.html @@ -1,4 +1,4 @@ -paxos.rs - source
1
+paxos.rs - source
1
 2
 3
 4
@@ -810,9 +810,9 @@
 use std::hash::Hash;
 use std::time::Duration;
 
-use hydroflow_plus::*;
-use hydroflow_plus_std::quorum::{collect_quorum, collect_quorum_with_response};
-use hydroflow_plus_std::request_response::join_responses;
+use hydro_lang::*;
+use hydro_std::quorum::{collect_quorum, collect_quorum_with_response};
+use hydro_std::request_response::join_responses;
 use serde::de::DeserializeOwned;
 use serde::{Deserialize, Serialize};
 
diff --git a/doc/src/hydroflow_plus_test/cluster/paxos_bench.rs.html b/doc/src/hydro_test/cluster/paxos_bench.rs.html
similarity index 91%
rename from doc/src/hydroflow_plus_test/cluster/paxos_bench.rs.html
rename to doc/src/hydro_test/cluster/paxos_bench.rs.html
index 713ec81b237c..b62f198b4e89 100644
--- a/doc/src/hydroflow_plus_test/cluster/paxos_bench.rs.html
+++ b/doc/src/hydro_test/cluster/paxos_bench.rs.html
@@ -1,4 +1,4 @@
-paxos_bench.rs - source
1
+paxos_bench.rs - source
1
 2
 3
 4
@@ -322,8 +322,8 @@
 use std::rc::Rc;
 use std::time::Duration;
 
-use hydroflow_plus::*;
-use hydroflow_plus_std::quorum::collect_quorum;
+use hydro_lang::*;
+use hydro_std::quorum::collect_quorum;
 use tokio::time::Instant;
 
 use super::paxos::{Acceptor, Ballot, Proposer};
@@ -556,7 +556,7 @@
         .flatten_ordered()
         .fold_commutative(
             // Create window with ring buffer using vec + wraparound index
-            // TODO: Would be nice if I could use vec![] instead, but that doesn't work in HF+ with RuntimeData *median_latency_window_size
+            // TODO: Would be nice if I could use vec![] instead, but that doesn't work in Hydro with RuntimeData *median_latency_window_size
             q!(move || (
                 Rc::new(RefCell::new(Vec::<Duration>::with_capacity(
                     median_latency_window_size
@@ -622,16 +622,16 @@
 
 #[cfg(test)]
 mod tests {
-    use hydroflow_plus::deploy::DeployRuntime;
+    use hydro_lang::deploy::DeployRuntime;
     use stageleft::RuntimeData;
 
     #[test]
     fn paxos_ir() {
-        let builder = hydroflow_plus::FlowBuilder::new();
+        let builder = hydro_lang::FlowBuilder::new();
         let _ = super::paxos_bench(&builder, 1, 1, 1, 1, 1, 1, 1);
         let built = builder.with_default_optimize::<DeployRuntime>();
 
-        hydroflow_plus::ir::dbg_dedup_tee(|| {
+        hydro_lang::ir::dbg_dedup_tee(|| {
             insta::assert_debug_snapshot!(built.ir());
         });
 
diff --git a/doc/src/hydroflow_plus_test/cluster/paxos_kv.rs.html b/doc/src/hydro_test/cluster/paxos_kv.rs.html
similarity index 89%
rename from doc/src/hydroflow_plus_test/cluster/paxos_kv.rs.html
rename to doc/src/hydro_test/cluster/paxos_kv.rs.html
index f59c37d583fd..3d7c3f3f8d22 100644
--- a/doc/src/hydroflow_plus_test/cluster/paxos_kv.rs.html
+++ b/doc/src/hydro_test/cluster/paxos_kv.rs.html
@@ -1,4 +1,4 @@
-paxos_kv.rs - source
1
+paxos_kv.rs - source
1
 2
 3
 4
@@ -204,7 +204,7 @@
 use std::fmt::Debug;
 use std::hash::Hash;
 
-use hydroflow_plus::*;
+use hydro_lang::*;
 use serde::de::DeserializeOwned;
 use serde::{Deserialize, Serialize};
 
diff --git a/doc/src/hydroflow_plus_test/cluster/simple_cluster.rs.html b/doc/src/hydro_test/cluster/simple_cluster.rs.html
similarity index 85%
rename from doc/src/hydroflow_plus_test/cluster/simple_cluster.rs.html
rename to doc/src/hydro_test/cluster/simple_cluster.rs.html
index edac66dcddc8..7bcfc7c195eb 100644
--- a/doc/src/hydroflow_plus_test/cluster/simple_cluster.rs.html
+++ b/doc/src/hydro_test/cluster/simple_cluster.rs.html
@@ -1,4 +1,4 @@
-simple_cluster.rs - source
1
+simple_cluster.rs - source
1
 2
 3
 4
@@ -166,7 +166,7 @@
 166
 167
 168
-
use hydroflow_plus::*;
+
use hydro_lang::*;
 
 pub fn decouple_cluster<'a>(flow: &FlowBuilder<'a>) -> (Cluster<'a, ()>, Cluster<'a, ()>) {
     let cluster1 = flow.cluster();
@@ -216,13 +216,13 @@
 #[cfg(test)]
 mod tests {
     use hydro_deploy::Deployment;
-    use hydroflow_plus::deploy::DeployCrateWrapper;
+    use hydro_lang::deploy::DeployCrateWrapper;
 
     #[tokio::test]
     async fn simple_cluster() {
         let mut deployment = Deployment::new();
 
-        let builder = hydroflow_plus::FlowBuilder::new();
+        let builder = hydro_lang::FlowBuilder::new();
         let (node, cluster) = super::simple_cluster(&builder);
         let built = builder.with_default_optimize();
 
@@ -279,7 +279,7 @@
     async fn decouple_process() {
         let mut deployment = Deployment::new();
 
-        let builder = hydroflow_plus::FlowBuilder::new();
+        let builder = hydro_lang::FlowBuilder::new();
         let (process1, process2) = super::decouple_process(&builder);
         let built = builder.with_default_optimize();
 
@@ -301,7 +301,7 @@
     async fn decouple_cluster() {
         let mut deployment = Deployment::new();
 
-        let builder = hydroflow_plus::FlowBuilder::new();
+        let builder = hydro_lang::FlowBuilder::new();
         let (cluster1, cluster2) = super::decouple_cluster(&builder);
         let built = builder.with_default_optimize();
 
diff --git a/doc/src/hydroflow_plus_test/cluster/two_pc.rs.html b/doc/src/hydro_test/cluster/two_pc.rs.html
similarity index 78%
rename from doc/src/hydroflow_plus_test/cluster/two_pc.rs.html
rename to doc/src/hydro_test/cluster/two_pc.rs.html
index 5c342f38b867..98e18542fdde 100644
--- a/doc/src/hydroflow_plus_test/cluster/two_pc.rs.html
+++ b/doc/src/hydro_test/cluster/two_pc.rs.html
@@ -1,4 +1,4 @@
-two_pc.rs - source
1
+two_pc.rs - source
1
 2
 3
 4
@@ -90,8 +90,8 @@
 90
 91
 92
-
use hydroflow_plus::*;
-use hydroflow_plus_std::quorum::collect_quorum;
+
use hydro_lang::*;
+use hydro_std::quorum::collect_quorum;
 
 // if the variable start with p, that means current work is at the participant side. if start with c, at coordinator side.
 //
diff --git a/doc/src/hydroflow_plus_test/distributed/first_ten.rs.html b/doc/src/hydro_test/distributed/first_ten.rs.html
similarity index 73%
rename from doc/src/hydroflow_plus_test/distributed/first_ten.rs.html
rename to doc/src/hydro_test/distributed/first_ten.rs.html
index 2eb7662653e5..3fa21a2c8a5c 100644
--- a/doc/src/hydroflow_plus_test/distributed/first_ten.rs.html
+++ b/doc/src/hydro_test/distributed/first_ten.rs.html
@@ -1,4 +1,4 @@
-first_ten.rs - source
1
+first_ten.rs - source
1
 2
 3
 4
@@ -76,7 +76,7 @@
 76
 77
 78
-
use hydroflow_plus::*;
+
use hydro_lang::*;
 use location::external_process::ExternalBincodeSink;
 use serde::{Deserialize, Serialize};
 
@@ -109,13 +109,13 @@
 mod tests {
     use futures::SinkExt;
     use hydro_deploy::Deployment;
-    use hydroflow_plus::deploy::DeployCrateWrapper;
+    use hydro_lang::deploy::DeployCrateWrapper;
 
     #[tokio::test]
     async fn first_ten_distributed() {
         let mut deployment = Deployment::new();
 
-        let builder = hydroflow_plus::FlowBuilder::new();
+        let builder = hydro_lang::FlowBuilder::new();
         let external = builder.external_process();
         let p1 = builder.process();
         let p2 = builder.process();
diff --git a/doc/src/hydro_test/distributed/mod.rs.html b/doc/src/hydro_test/distributed/mod.rs.html
new file mode 100644
index 000000000000..d93c638d0379
--- /dev/null
+++ b/doc/src/hydro_test/distributed/mod.rs.html
@@ -0,0 +1,3 @@
+mod.rs - source
1
+
pub mod first_ten;
+
\ No newline at end of file diff --git a/doc/src/hydro_test/lib.rs.html b/doc/src/hydro_test/lib.rs.html new file mode 100644 index 000000000000..bc1b63020e61 --- /dev/null +++ b/doc/src/hydro_test/lib.rs.html @@ -0,0 +1,23 @@ +lib.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+
stageleft::stageleft_no_entry_crate!();
+
+pub mod cluster;
+pub mod distributed;
+
+#[doc(hidden)]
+#[stageleft::runtime]
+mod docs {
+    #[doc = include_str!("../../docs/docs/hydro/consistency.md")]
+    mod consistency {}
+}
+
\ No newline at end of file diff --git a/doc/src/hydro_test_local/home/runner/work/hydroflow/hydroflow/target/debug/build/hydro_test_local-dd0949b1ee4f59a5/out/lib_pub.rs.html b/doc/src/hydro_test_local/home/runner/work/hydroflow/hydroflow/target/debug/build/hydro_test_local-dd0949b1ee4f59a5/out/lib_pub.rs.html new file mode 100644 index 000000000000..650adf426cce --- /dev/null +++ b/doc/src/hydro_test_local/home/runner/work/hydroflow/hydroflow/target/debug/build/hydro_test_local-dd0949b1ee4f59a5/out/lib_pub.rs.html @@ -0,0 +1,2 @@ +lib_pub.rs - source
1
+
# [cfg (stageleft_macro)] pub mod local { pub mod chat_app { pub use hydro_lang :: deploy :: SingleProcessGraph ; pub use hydro_lang :: hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydro_lang :: * ; pub use hydroflow :: tokio :: sync :: mpsc :: UnboundedSender ; pub use hydroflow :: tokio_stream :: wrappers :: UnboundedReceiverStream ; pub use stageleft :: { Quoted , RuntimeData } ; # [cfg (stageleft_macro)] # [stageleft :: entry] pub fn chat_app < 'a > (flow : FlowBuilder < 'a > , users_stream : RuntimeData < UnboundedReceiverStream < u32 > > , messages : RuntimeData < UnboundedReceiverStream < String > > , output : RuntimeData < & 'a UnboundedSender < (u32 , String) > > , replay_messages : bool ,) -> impl Quoted < 'a , Hydroflow < 'a > > { let process = flow . process :: < () > () ; let tick = process . tick () ; let users = unsafe { process . source_stream (users_stream) . timestamped (& tick) . tick_batch () } . persist () ; let messages = process . source_stream (messages) ; let messages = if replay_messages { unsafe { messages . timestamped (& tick) . tick_batch () } . persist () } else { unsafe { messages . timestamped (& tick) . tick_batch () } } ; let messages = messages . map (q ! (| s | s . to_uppercase ())) ; let mut joined = users . cross_product (messages) ; if replay_messages { joined = joined . delta () ; } joined . all_ticks () . for_each (q ! (| t | { output . send (t) . unwrap () ; })) ; flow . compile_no_network :: < SingleProcessGraph > () } # [cfg (stageleft_macro)] # [stageleft :: runtime] # [cfg (test)] mod tests { use hydroflow :: assert_graphvis_snapshots ; use hydroflow :: util :: collect_ready ; # [test] fn test_chat_app_no_replay () { let (users_send , users) = hydroflow :: util :: unbounded_channel () ; let (messages_send , messages) = hydroflow :: util :: unbounded_channel () ; let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut chat_server = super :: chat_app ! (users , messages , & out , false) ; assert_graphvis_snapshots ! (chat_server) ; users_send . send (1) . unwrap () ; users_send . send (2) . unwrap () ; messages_send . send ("hello" . to_string ()) . unwrap () ; messages_send . send ("world" . to_string ()) . unwrap () ; chat_server . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [(1 , "HELLO" . to_string ()) , (2 , "HELLO" . to_string ()) , (1 , "WORLD" . to_string ()) , (2 , "WORLD" . to_string ())]) ; users_send . send (3) . unwrap () ; messages_send . send ("goodbye" . to_string ()) . unwrap () ; chat_server . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [(1 , "GOODBYE" . to_string ()) , (2 , "GOODBYE" . to_string ()) , (3 , "GOODBYE" . to_string ())]) ; } # [test] fn test_chat_app_replay () { let (users_send , users) = hydroflow :: util :: unbounded_channel () ; let (messages_send , messages) = hydroflow :: util :: unbounded_channel () ; let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut chat_server = super :: chat_app ! (users , messages , & out , true) ; assert_graphvis_snapshots ! (chat_server) ; users_send . send (1) . unwrap () ; users_send . send (2) . unwrap () ; messages_send . send ("hello" . to_string ()) . unwrap () ; messages_send . send ("world" . to_string ()) . unwrap () ; chat_server . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [(1 , "HELLO" . to_string ()) , (2 , "HELLO" . to_string ()) , (1 , "WORLD" . to_string ()) , (2 , "WORLD" . to_string ())]) ; users_send . send (3) . unwrap () ; messages_send . send ("goodbye" . to_string ()) . unwrap () ; chat_server . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [(3 , "HELLO" . to_string ()) , (3 , "WORLD" . to_string ()) , (1 , "GOODBYE" . to_string ()) , (2 , "GOODBYE" . to_string ()) , (3 , "GOODBYE" . to_string ())]) ; } } } pub mod compute_pi { pub use std :: time :: Duration ; pub use hydro_lang :: deploy :: SingleProcessGraph ; pub use hydro_lang :: hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydro_lang :: * ; pub use stageleft :: { Quoted , RuntimeData } ; pub fn compute_pi < 'a > (flow : & FlowBuilder < 'a > , batch_size : RuntimeData < usize >) -> Process < 'a , () > { let process = flow . process () ; let tick = process . tick () ; let trials = tick . spin_batch (q ! (batch_size)) . map (q ! (| _ | rand :: random ::< (f64 , f64) > ())) . map (q ! (| (x , y) | x * x + y * y < 1.0)) . fold (q ! (|| (0u64 , 0u64)) , q ! (| (inside , total) , sample_inside | { if sample_inside { * inside += 1 ; } * total += 1 ; }) ,) . all_ticks () . drop_timestamp () ; let estimate = trials . reduce (q ! (| (inside , total) , (inside_batch , total_batch) | { * inside += inside_batch ; * total += total_batch ; })) ; unsafe { estimate . sample_every (q ! (Duration :: from_secs (1))) } . for_each (q ! (| (inside , total) | { println ! ("pi: {} ({} trials)" , 4.0 * inside as f64 / total as f64 , total) ; })) ; process } # [cfg (stageleft_macro)] # [stageleft :: entry] pub fn compute_pi_runtime < 'a > (flow : FlowBuilder < 'a > , batch_size : RuntimeData < usize > ,) -> impl Quoted < 'a , Hydroflow < 'a > > { let _ = compute_pi (& flow , batch_size) ; flow . compile_no_network :: < SingleProcessGraph > () } } pub mod count_elems { pub use hydro_lang :: deploy :: SingleProcessGraph ; pub use hydro_lang :: hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydro_lang :: * ; pub use hydroflow :: tokio :: sync :: mpsc :: UnboundedSender ; pub use hydroflow :: tokio_stream :: wrappers :: UnboundedReceiverStream ; pub use stageleft :: { Quoted , RuntimeData } ; pub fn count_elems_generic < 'a , T : 'a > (flow : FlowBuilder < 'a > , input_stream : RuntimeData < UnboundedReceiverStream < T > > , output : RuntimeData < & 'a UnboundedSender < u32 > > ,) -> impl Quoted < 'a , Hydroflow < 'a > > { let process = flow . process :: < () > () ; let tick = process . tick () ; let source = process . source_stream (input_stream) ; let count = unsafe { source . map (q ! (| _ | 1)) . timestamped (& tick) . tick_batch () } . fold (q ! (|| 0) , q ! (| a , b | * a += b)) . all_ticks () ; count . for_each (q ! (| v | { output . send (v) . unwrap () ; })) ; flow . compile_no_network :: < SingleProcessGraph > () } # [cfg (stageleft_macro)] # [stageleft :: entry] pub fn count_elems < 'a > (flow : FlowBuilder < 'a > , input_stream : RuntimeData < UnboundedReceiverStream < usize > > , output : RuntimeData < & 'a UnboundedSender < u32 > > ,) -> impl Quoted < 'a , Hydroflow < 'a > > { count_elems_generic (flow , input_stream , output) } # [cfg (stageleft_macro)] # [stageleft :: runtime] # [cfg (test)] mod tests { use hydroflow :: assert_graphvis_snapshots ; use hydroflow :: util :: collect_ready ; # [test] pub fn test_count () { let (in_send , input) = hydroflow :: util :: unbounded_channel () ; let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut count = super :: count_elems ! (input , & out) ; assert_graphvis_snapshots ! (count) ; in_send . send (1) . unwrap () ; in_send . send (1) . unwrap () ; in_send . send (1) . unwrap () ; count . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [3]) ; } } } pub mod first_ten { pub use hydro_lang :: deploy :: SingleProcessGraph ; pub use hydro_lang :: hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydro_lang :: * ; pub use stageleft :: Quoted ; pub fn first_ten (flow : & FlowBuilder) { let process = flow . process :: < () > () ; let numbers = process . source_iter (q ! (0 .. 10)) ; numbers . for_each (q ! (| n | println ! ("{}" , n))) ; } # [cfg (stageleft_macro)] # [stageleft :: entry] pub fn first_ten_runtime < 'a > (flow : FlowBuilder < 'a >) -> impl Quoted < 'a , Hydroflow < 'a > > { first_ten (& flow) ; flow . compile_no_network :: < SingleProcessGraph > () } # [cfg (stageleft_macro)] # [stageleft :: runtime] # [cfg (test)] mod tests { # [test] fn instantiate_first_ten () { let _ = super :: first_ten_runtime ! () ; } } } pub mod graph_reachability { pub use hydro_lang :: deploy :: SingleProcessGraph ; pub use hydro_lang :: hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydro_lang :: * ; pub use hydroflow :: tokio :: sync :: mpsc :: UnboundedSender ; pub use hydroflow :: tokio_stream :: wrappers :: UnboundedReceiverStream ; pub use stageleft :: { Quoted , RuntimeData } ; # [cfg (stageleft_macro)] # [stageleft :: entry] pub fn graph_reachability < 'a > (flow : FlowBuilder < 'a > , roots : RuntimeData < UnboundedReceiverStream < u32 > > , edges : RuntimeData < UnboundedReceiverStream < (u32 , u32) > > , reached_out : RuntimeData < & 'a UnboundedSender < u32 > > ,) -> impl Quoted < 'a , Hydroflow < 'a > > { let process = flow . process :: < () > () ; let roots = process . source_stream (roots) ; let edges = process . source_stream (edges) ; let reachability_tick = process . tick () ; let (set_reached_cycle , reached_cycle) = reachability_tick . cycle :: < Stream < _ , _ , _ , NoOrder > > () ; let reached = unsafe { roots . timestamped (& reachability_tick) . tick_batch () . union (reached_cycle) } ; let reachable = reached . clone () . map (q ! (| r | (r , ()))) . join (unsafe { edges . timestamped (& reachability_tick) . tick_batch () . persist () }) . map (q ! (| (_from , (_ , to)) | to)) ; set_reached_cycle . complete_next_tick (reached . clone () . union (reachable)) ; reached . all_ticks () . unique () . for_each (q ! (| v | { reached_out . send (v) . unwrap () ; })) ; flow . compile_no_network :: < SingleProcessGraph > () } # [cfg (stageleft_macro)] # [stageleft :: runtime] # [cfg (test)] mod tests { use hydroflow :: assert_graphvis_snapshots ; use hydroflow :: util :: collect_ready ; # [test] pub fn test_reachability () { let (roots_send , roots) = hydroflow :: util :: unbounded_channel () ; let (edges_send , edges) = hydroflow :: util :: unbounded_channel () ; let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut reachability = super :: graph_reachability ! (roots , edges , & out) ; assert_graphvis_snapshots ! (reachability) ; roots_send . send (1) . unwrap () ; roots_send . send (2) . unwrap () ; edges_send . send ((1 , 2)) . unwrap () ; edges_send . send ((2 , 3)) . unwrap () ; edges_send . send ((3 , 4)) . unwrap () ; edges_send . send ((4 , 5)) . unwrap () ; reachability . run_tick () ; reachability . run_tick () ; reachability . run_tick () ; reachability . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [1 , 2 , 3 , 4 , 5]) ; } } } pub mod negation { pub use hydro_lang :: deploy :: SingleProcessGraph ; pub use hydro_lang :: hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydro_lang :: * ; pub use hydroflow :: tokio :: sync :: mpsc :: UnboundedSender ; pub use stageleft :: { Quoted , RuntimeData } ; # [cfg (stageleft_macro)] # [stageleft :: entry] pub fn test_difference < 'a > (flow : FlowBuilder < 'a > , output : RuntimeData < & 'a UnboundedSender < u32 > > , persist1 : bool , persist2 : bool ,) -> impl Quoted < 'a , Hydroflow < 'a > > { let process = flow . process :: < () > () ; let tick = process . tick () ; let mut source = unsafe { process . source_iter (q ! (0 .. 5)) . timestamped (& tick) . tick_batch () } ; if persist1 { source = source . persist () ; } let mut source2 = unsafe { process . source_iter (q ! (3 .. 6)) . timestamped (& tick) . tick_batch () } ; if persist2 { source2 = source2 . persist () ; } source . filter_not_in (source2) . all_ticks () . for_each (q ! (| v | { output . send (v) . unwrap () ; })) ; flow . compile_no_network :: < SingleProcessGraph > () } # [cfg (stageleft_macro)] # [stageleft :: entry] pub fn test_anti_join < 'a > (flow : FlowBuilder < 'a > , output : RuntimeData < & 'a UnboundedSender < u32 > > , persist1 : bool , persist2 : bool ,) -> impl Quoted < 'a , Hydroflow < 'a > > { let process = flow . process :: < () > () ; let tick = process . tick () ; let mut source = unsafe { process . source_iter (q ! (0 .. 5)) . map (q ! (| v | (v , v))) . timestamped (& tick) . tick_batch () } ; if persist1 { source = source . persist () ; } let mut source2 = unsafe { process . source_iter (q ! (3 .. 6)) . timestamped (& tick) . tick_batch () } ; if persist2 { source2 = source2 . persist () ; } source . anti_join (source2) . all_ticks () . for_each (q ! (| v | { output . send (v . 0) . unwrap () ; })) ; flow . compile_no_network :: < SingleProcessGraph > () } # [cfg (stageleft_macro)] # [stageleft :: runtime] # [cfg (test)] mod tests { use hydroflow :: assert_graphvis_snapshots ; use hydroflow :: util :: collect_ready ; # [test] fn test_difference_tick_tick () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_difference ! (& out , false , false) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [] as & [u32]) ; } # [test] fn test_difference_tick_static () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_difference ! (& out , false , true) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [] as & [u32]) ; } # [test] fn test_difference_static_tick () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_difference ! (& out , true , false) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2 , 3 , 4]) ; } # [test] fn test_difference_static_static () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_difference ! (& out , true , true) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; } # [test] fn test_anti_join_tick_tick () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_anti_join ! (& out , false , false) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [] as & [u32]) ; } # [test] fn test_anti_join_tick_static () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_anti_join ! (& out , false , true) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [] as & [u32]) ; } # [test] fn test_anti_join_static_tick () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_anti_join ! (& out , true , false) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2 , 3 , 4]) ; } # [test] fn test_anti_join_static_static () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_anti_join ! (& out , true , true) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; } } } pub mod teed_join { pub use hydro_lang :: deploy :: MultiGraph ; pub use hydro_lang :: hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydro_lang :: * ; pub use hydroflow :: futures :: stream :: Stream ; pub use hydroflow :: tokio :: sync :: mpsc :: UnboundedSender ; pub use hydroflow :: tokio_stream :: wrappers :: UnboundedReceiverStream ; pub use stageleft :: { Quoted , RuntimeData } ; pub struct N0 { } pub struct N1 { } # [cfg (stageleft_macro)] # [stageleft :: entry (UnboundedReceiverStream < u32 >)] pub fn teed_join < 'a , S : Stream < Item = u32 > + Unpin + 'a > (flow : FlowBuilder < 'a > , input_stream : RuntimeData < S > , output : RuntimeData < & 'a UnboundedSender < u32 > > , send_twice : bool , subgraph_id : RuntimeData < usize > ,) -> impl Quoted < 'a , Hydroflow < 'a > > { let node_zero = flow . process :: < N0 > () ; let node_one = flow . process :: < N1 > () ; let n0_tick = node_zero . tick () ; let source = unsafe { node_zero . source_stream (input_stream) . timestamped (& n0_tick) . tick_batch () } ; let map1 = source . clone () . map (q ! (| v | (v + 1 , ()))) ; let map2 = source . map (q ! (| v | (v - 1 , ()))) ; let joined = map1 . join (map2) . map (q ! (| t | t . 0)) ; joined . clone () . all_ticks () . for_each (q ! (| v | { output . send (v) . unwrap () ; })) ; if send_twice { joined . all_ticks () . for_each (q ! (| v | { output . send (v) . unwrap () ; })) ; } let source_node_id_1 = node_one . source_iter (q ! (0 .. 5)) ; source_node_id_1 . for_each (q ! (| v | { output . send (v) . unwrap () ; })) ; flow . compile_no_network :: < MultiGraph > () . with_dynamic_id (subgraph_id) } # [cfg (stageleft_macro)] # [stageleft :: runtime] # [cfg (test)] mod tests { use hydroflow :: assert_graphvis_snapshots ; use hydroflow :: util :: collect_ready ; # [test] fn test_teed_join () { let (in_send , input) = hydroflow :: util :: unbounded_channel () ; let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut joined = super :: teed_join ! (input , & out , false , 0) ; assert_graphvis_snapshots ! (joined) ; in_send . send (1) . unwrap () ; in_send . send (2) . unwrap () ; in_send . send (3) . unwrap () ; in_send . send (4) . unwrap () ; joined . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [2 , 3]) ; } # [test] fn test_teed_join_twice () { let (in_send , input) = hydroflow :: util :: unbounded_channel () ; let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut joined = super :: teed_join ! (input , & out , true , 0) ; assert_graphvis_snapshots ! (joined) ; in_send . send (1) . unwrap () ; in_send . send (2) . unwrap () ; in_send . send (3) . unwrap () ; in_send . send (4) . unwrap () ; joined . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [2 , 2 , 3 , 3]) ; } # [test] fn test_teed_join_multi_node () { let (_ , input) = hydroflow :: util :: unbounded_channel () ; let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut joined = super :: teed_join ! (input , & out , true , 1) ; assert_graphvis_snapshots ! (joined) ; joined . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2 , 3 , 4]) ; } } } } # [cfg (not (stageleft_macro))] pub mod local { pub mod chat_app { pub use hydro_lang :: deploy :: SingleProcessGraph ; pub use hydro_lang :: hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydro_lang :: * ; pub use hydroflow :: tokio :: sync :: mpsc :: UnboundedSender ; pub use hydroflow :: tokio_stream :: wrappers :: UnboundedReceiverStream ; pub use stageleft :: { Quoted , RuntimeData } ; # [cfg (stageleft_macro)] # [stageleft :: entry] pub fn chat_app < 'a > (flow : FlowBuilder < 'a > , users_stream : RuntimeData < UnboundedReceiverStream < u32 > > , messages : RuntimeData < UnboundedReceiverStream < String > > , output : RuntimeData < & 'a UnboundedSender < (u32 , String) > > , replay_messages : bool ,) -> impl Quoted < 'a , Hydroflow < 'a > > { let process = flow . process :: < () > () ; let tick = process . tick () ; let users = unsafe { process . source_stream (users_stream) . timestamped (& tick) . tick_batch () } . persist () ; let messages = process . source_stream (messages) ; let messages = if replay_messages { unsafe { messages . timestamped (& tick) . tick_batch () } . persist () } else { unsafe { messages . timestamped (& tick) . tick_batch () } } ; let messages = messages . map (q ! (| s | s . to_uppercase ())) ; let mut joined = users . cross_product (messages) ; if replay_messages { joined = joined . delta () ; } joined . all_ticks () . for_each (q ! (| t | { output . send (t) . unwrap () ; })) ; flow . compile_no_network :: < SingleProcessGraph > () } # [cfg (stageleft_macro)] # [stageleft :: runtime] # [cfg (test)] mod tests { use hydroflow :: assert_graphvis_snapshots ; use hydroflow :: util :: collect_ready ; # [test] fn test_chat_app_no_replay () { let (users_send , users) = hydroflow :: util :: unbounded_channel () ; let (messages_send , messages) = hydroflow :: util :: unbounded_channel () ; let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut chat_server = super :: chat_app ! (users , messages , & out , false) ; assert_graphvis_snapshots ! (chat_server) ; users_send . send (1) . unwrap () ; users_send . send (2) . unwrap () ; messages_send . send ("hello" . to_string ()) . unwrap () ; messages_send . send ("world" . to_string ()) . unwrap () ; chat_server . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [(1 , "HELLO" . to_string ()) , (2 , "HELLO" . to_string ()) , (1 , "WORLD" . to_string ()) , (2 , "WORLD" . to_string ())]) ; users_send . send (3) . unwrap () ; messages_send . send ("goodbye" . to_string ()) . unwrap () ; chat_server . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [(1 , "GOODBYE" . to_string ()) , (2 , "GOODBYE" . to_string ()) , (3 , "GOODBYE" . to_string ())]) ; } # [test] fn test_chat_app_replay () { let (users_send , users) = hydroflow :: util :: unbounded_channel () ; let (messages_send , messages) = hydroflow :: util :: unbounded_channel () ; let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut chat_server = super :: chat_app ! (users , messages , & out , true) ; assert_graphvis_snapshots ! (chat_server) ; users_send . send (1) . unwrap () ; users_send . send (2) . unwrap () ; messages_send . send ("hello" . to_string ()) . unwrap () ; messages_send . send ("world" . to_string ()) . unwrap () ; chat_server . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [(1 , "HELLO" . to_string ()) , (2 , "HELLO" . to_string ()) , (1 , "WORLD" . to_string ()) , (2 , "WORLD" . to_string ())]) ; users_send . send (3) . unwrap () ; messages_send . send ("goodbye" . to_string ()) . unwrap () ; chat_server . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [(3 , "HELLO" . to_string ()) , (3 , "WORLD" . to_string ()) , (1 , "GOODBYE" . to_string ()) , (2 , "GOODBYE" . to_string ()) , (3 , "GOODBYE" . to_string ())]) ; } } } pub mod compute_pi { pub use std :: time :: Duration ; pub use hydro_lang :: deploy :: SingleProcessGraph ; pub use hydro_lang :: hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydro_lang :: * ; pub use stageleft :: { Quoted , RuntimeData } ; pub fn compute_pi < 'a > (flow : & FlowBuilder < 'a > , batch_size : RuntimeData < usize >) -> Process < 'a , () > { let process = flow . process () ; let tick = process . tick () ; let trials = tick . spin_batch (q ! (batch_size)) . map (q ! (| _ | rand :: random ::< (f64 , f64) > ())) . map (q ! (| (x , y) | x * x + y * y < 1.0)) . fold (q ! (|| (0u64 , 0u64)) , q ! (| (inside , total) , sample_inside | { if sample_inside { * inside += 1 ; } * total += 1 ; }) ,) . all_ticks () . drop_timestamp () ; let estimate = trials . reduce (q ! (| (inside , total) , (inside_batch , total_batch) | { * inside += inside_batch ; * total += total_batch ; })) ; unsafe { estimate . sample_every (q ! (Duration :: from_secs (1))) } . for_each (q ! (| (inside , total) | { println ! ("pi: {} ({} trials)" , 4.0 * inside as f64 / total as f64 , total) ; })) ; process } # [cfg (stageleft_macro)] # [stageleft :: entry] pub fn compute_pi_runtime < 'a > (flow : FlowBuilder < 'a > , batch_size : RuntimeData < usize > ,) -> impl Quoted < 'a , Hydroflow < 'a > > { let _ = compute_pi (& flow , batch_size) ; flow . compile_no_network :: < SingleProcessGraph > () } } pub mod count_elems { pub use hydro_lang :: deploy :: SingleProcessGraph ; pub use hydro_lang :: hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydro_lang :: * ; pub use hydroflow :: tokio :: sync :: mpsc :: UnboundedSender ; pub use hydroflow :: tokio_stream :: wrappers :: UnboundedReceiverStream ; pub use stageleft :: { Quoted , RuntimeData } ; pub fn count_elems_generic < 'a , T : 'a > (flow : FlowBuilder < 'a > , input_stream : RuntimeData < UnboundedReceiverStream < T > > , output : RuntimeData < & 'a UnboundedSender < u32 > > ,) -> impl Quoted < 'a , Hydroflow < 'a > > { let process = flow . process :: < () > () ; let tick = process . tick () ; let source = process . source_stream (input_stream) ; let count = unsafe { source . map (q ! (| _ | 1)) . timestamped (& tick) . tick_batch () } . fold (q ! (|| 0) , q ! (| a , b | * a += b)) . all_ticks () ; count . for_each (q ! (| v | { output . send (v) . unwrap () ; })) ; flow . compile_no_network :: < SingleProcessGraph > () } # [cfg (stageleft_macro)] # [stageleft :: entry] pub fn count_elems < 'a > (flow : FlowBuilder < 'a > , input_stream : RuntimeData < UnboundedReceiverStream < usize > > , output : RuntimeData < & 'a UnboundedSender < u32 > > ,) -> impl Quoted < 'a , Hydroflow < 'a > > { count_elems_generic (flow , input_stream , output) } # [cfg (stageleft_macro)] # [stageleft :: runtime] # [cfg (test)] mod tests { use hydroflow :: assert_graphvis_snapshots ; use hydroflow :: util :: collect_ready ; # [test] pub fn test_count () { let (in_send , input) = hydroflow :: util :: unbounded_channel () ; let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut count = super :: count_elems ! (input , & out) ; assert_graphvis_snapshots ! (count) ; in_send . send (1) . unwrap () ; in_send . send (1) . unwrap () ; in_send . send (1) . unwrap () ; count . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [3]) ; } } } pub mod first_ten { pub use hydro_lang :: deploy :: SingleProcessGraph ; pub use hydro_lang :: hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydro_lang :: * ; pub use stageleft :: Quoted ; pub fn first_ten (flow : & FlowBuilder) { let process = flow . process :: < () > () ; let numbers = process . source_iter (q ! (0 .. 10)) ; numbers . for_each (q ! (| n | println ! ("{}" , n))) ; } # [cfg (stageleft_macro)] # [stageleft :: entry] pub fn first_ten_runtime < 'a > (flow : FlowBuilder < 'a >) -> impl Quoted < 'a , Hydroflow < 'a > > { first_ten (& flow) ; flow . compile_no_network :: < SingleProcessGraph > () } # [cfg (stageleft_macro)] # [stageleft :: runtime] # [cfg (test)] mod tests { # [test] fn instantiate_first_ten () { let _ = super :: first_ten_runtime ! () ; } } } pub mod graph_reachability { pub use hydro_lang :: deploy :: SingleProcessGraph ; pub use hydro_lang :: hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydro_lang :: * ; pub use hydroflow :: tokio :: sync :: mpsc :: UnboundedSender ; pub use hydroflow :: tokio_stream :: wrappers :: UnboundedReceiverStream ; pub use stageleft :: { Quoted , RuntimeData } ; # [cfg (stageleft_macro)] # [stageleft :: entry] pub fn graph_reachability < 'a > (flow : FlowBuilder < 'a > , roots : RuntimeData < UnboundedReceiverStream < u32 > > , edges : RuntimeData < UnboundedReceiverStream < (u32 , u32) > > , reached_out : RuntimeData < & 'a UnboundedSender < u32 > > ,) -> impl Quoted < 'a , Hydroflow < 'a > > { let process = flow . process :: < () > () ; let roots = process . source_stream (roots) ; let edges = process . source_stream (edges) ; let reachability_tick = process . tick () ; let (set_reached_cycle , reached_cycle) = reachability_tick . cycle :: < Stream < _ , _ , _ , NoOrder > > () ; let reached = unsafe { roots . timestamped (& reachability_tick) . tick_batch () . union (reached_cycle) } ; let reachable = reached . clone () . map (q ! (| r | (r , ()))) . join (unsafe { edges . timestamped (& reachability_tick) . tick_batch () . persist () }) . map (q ! (| (_from , (_ , to)) | to)) ; set_reached_cycle . complete_next_tick (reached . clone () . union (reachable)) ; reached . all_ticks () . unique () . for_each (q ! (| v | { reached_out . send (v) . unwrap () ; })) ; flow . compile_no_network :: < SingleProcessGraph > () } # [cfg (stageleft_macro)] # [stageleft :: runtime] # [cfg (test)] mod tests { use hydroflow :: assert_graphvis_snapshots ; use hydroflow :: util :: collect_ready ; # [test] pub fn test_reachability () { let (roots_send , roots) = hydroflow :: util :: unbounded_channel () ; let (edges_send , edges) = hydroflow :: util :: unbounded_channel () ; let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut reachability = super :: graph_reachability ! (roots , edges , & out) ; assert_graphvis_snapshots ! (reachability) ; roots_send . send (1) . unwrap () ; roots_send . send (2) . unwrap () ; edges_send . send ((1 , 2)) . unwrap () ; edges_send . send ((2 , 3)) . unwrap () ; edges_send . send ((3 , 4)) . unwrap () ; edges_send . send ((4 , 5)) . unwrap () ; reachability . run_tick () ; reachability . run_tick () ; reachability . run_tick () ; reachability . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [1 , 2 , 3 , 4 , 5]) ; } } } pub mod negation { pub use hydro_lang :: deploy :: SingleProcessGraph ; pub use hydro_lang :: hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydro_lang :: * ; pub use hydroflow :: tokio :: sync :: mpsc :: UnboundedSender ; pub use stageleft :: { Quoted , RuntimeData } ; # [cfg (stageleft_macro)] # [stageleft :: entry] pub fn test_difference < 'a > (flow : FlowBuilder < 'a > , output : RuntimeData < & 'a UnboundedSender < u32 > > , persist1 : bool , persist2 : bool ,) -> impl Quoted < 'a , Hydroflow < 'a > > { let process = flow . process :: < () > () ; let tick = process . tick () ; let mut source = unsafe { process . source_iter (q ! (0 .. 5)) . timestamped (& tick) . tick_batch () } ; if persist1 { source = source . persist () ; } let mut source2 = unsafe { process . source_iter (q ! (3 .. 6)) . timestamped (& tick) . tick_batch () } ; if persist2 { source2 = source2 . persist () ; } source . filter_not_in (source2) . all_ticks () . for_each (q ! (| v | { output . send (v) . unwrap () ; })) ; flow . compile_no_network :: < SingleProcessGraph > () } # [cfg (stageleft_macro)] # [stageleft :: entry] pub fn test_anti_join < 'a > (flow : FlowBuilder < 'a > , output : RuntimeData < & 'a UnboundedSender < u32 > > , persist1 : bool , persist2 : bool ,) -> impl Quoted < 'a , Hydroflow < 'a > > { let process = flow . process :: < () > () ; let tick = process . tick () ; let mut source = unsafe { process . source_iter (q ! (0 .. 5)) . map (q ! (| v | (v , v))) . timestamped (& tick) . tick_batch () } ; if persist1 { source = source . persist () ; } let mut source2 = unsafe { process . source_iter (q ! (3 .. 6)) . timestamped (& tick) . tick_batch () } ; if persist2 { source2 = source2 . persist () ; } source . anti_join (source2) . all_ticks () . for_each (q ! (| v | { output . send (v . 0) . unwrap () ; })) ; flow . compile_no_network :: < SingleProcessGraph > () } # [cfg (stageleft_macro)] # [stageleft :: runtime] # [cfg (test)] mod tests { use hydroflow :: assert_graphvis_snapshots ; use hydroflow :: util :: collect_ready ; # [test] fn test_difference_tick_tick () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_difference ! (& out , false , false) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [] as & [u32]) ; } # [test] fn test_difference_tick_static () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_difference ! (& out , false , true) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [] as & [u32]) ; } # [test] fn test_difference_static_tick () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_difference ! (& out , true , false) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2 , 3 , 4]) ; } # [test] fn test_difference_static_static () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_difference ! (& out , true , true) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; } # [test] fn test_anti_join_tick_tick () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_anti_join ! (& out , false , false) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [] as & [u32]) ; } # [test] fn test_anti_join_tick_static () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_anti_join ! (& out , false , true) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [] as & [u32]) ; } # [test] fn test_anti_join_static_tick () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_anti_join ! (& out , true , false) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2 , 3 , 4]) ; } # [test] fn test_anti_join_static_static () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_anti_join ! (& out , true , true) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; } } } pub mod teed_join { pub use hydro_lang :: deploy :: MultiGraph ; pub use hydro_lang :: hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydro_lang :: * ; pub use hydroflow :: futures :: stream :: Stream ; pub use hydroflow :: tokio :: sync :: mpsc :: UnboundedSender ; pub use hydroflow :: tokio_stream :: wrappers :: UnboundedReceiverStream ; pub use stageleft :: { Quoted , RuntimeData } ; pub struct N0 { } pub struct N1 { } # [cfg (stageleft_macro)] # [stageleft :: entry (UnboundedReceiverStream < u32 >)] pub fn teed_join < 'a , S : Stream < Item = u32 > + Unpin + 'a > (flow : FlowBuilder < 'a > , input_stream : RuntimeData < S > , output : RuntimeData < & 'a UnboundedSender < u32 > > , send_twice : bool , subgraph_id : RuntimeData < usize > ,) -> impl Quoted < 'a , Hydroflow < 'a > > { let node_zero = flow . process :: < N0 > () ; let node_one = flow . process :: < N1 > () ; let n0_tick = node_zero . tick () ; let source = unsafe { node_zero . source_stream (input_stream) . timestamped (& n0_tick) . tick_batch () } ; let map1 = source . clone () . map (q ! (| v | (v + 1 , ()))) ; let map2 = source . map (q ! (| v | (v - 1 , ()))) ; let joined = map1 . join (map2) . map (q ! (| t | t . 0)) ; joined . clone () . all_ticks () . for_each (q ! (| v | { output . send (v) . unwrap () ; })) ; if send_twice { joined . all_ticks () . for_each (q ! (| v | { output . send (v) . unwrap () ; })) ; } let source_node_id_1 = node_one . source_iter (q ! (0 .. 5)) ; source_node_id_1 . for_each (q ! (| v | { output . send (v) . unwrap () ; })) ; flow . compile_no_network :: < MultiGraph > () . with_dynamic_id (subgraph_id) } # [cfg (stageleft_macro)] # [stageleft :: runtime] # [cfg (test)] mod tests { use hydroflow :: assert_graphvis_snapshots ; use hydroflow :: util :: collect_ready ; # [test] fn test_teed_join () { let (in_send , input) = hydroflow :: util :: unbounded_channel () ; let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut joined = super :: teed_join ! (input , & out , false , 0) ; assert_graphvis_snapshots ! (joined) ; in_send . send (1) . unwrap () ; in_send . send (2) . unwrap () ; in_send . send (3) . unwrap () ; in_send . send (4) . unwrap () ; joined . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [2 , 3]) ; } # [test] fn test_teed_join_twice () { let (in_send , input) = hydroflow :: util :: unbounded_channel () ; let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut joined = super :: teed_join ! (input , & out , true , 0) ; assert_graphvis_snapshots ! (joined) ; in_send . send (1) . unwrap () ; in_send . send (2) . unwrap () ; in_send . send (3) . unwrap () ; in_send . send (4) . unwrap () ; joined . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [2 , 2 , 3 , 3]) ; } # [test] fn test_teed_join_multi_node () { let (_ , input) = hydroflow :: util :: unbounded_channel () ; let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut joined = super :: teed_join ! (input , & out , true , 1) ; assert_graphvis_snapshots ! (joined) ; joined . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2 , 3 , 4]) ; } } } }
\ No newline at end of file diff --git a/doc/src/hydro_test_local/lib.rs.html b/doc/src/hydro_test_local/lib.rs.html new file mode 100644 index 000000000000..10545d0067cf --- /dev/null +++ b/doc/src/hydro_test_local/lib.rs.html @@ -0,0 +1,13 @@ +lib.rs - source
1
+2
+3
+4
+5
+6
+
stageleft::stageleft_crate!(hydro_test_local_macro);
+
+#[cfg(stageleft_macro)]
+pub(crate) mod local;
+#[cfg(not(stageleft_macro))]
+pub mod local;
+
\ No newline at end of file diff --git a/doc/src/hydroflow_plus_test_local/local/chat_app.rs.html b/doc/src/hydro_test_local/local/chat_app.rs.html similarity index 83% rename from doc/src/hydroflow_plus_test_local/local/chat_app.rs.html rename to doc/src/hydro_test_local/local/chat_app.rs.html index 52f4d4d48dc3..8936f562f2be 100644 --- a/doc/src/hydroflow_plus_test_local/local/chat_app.rs.html +++ b/doc/src/hydro_test_local/local/chat_app.rs.html @@ -1,4 +1,4 @@ -chat_app.rs - source
1
+chat_app.rs - source
1
 2
 3
 4
@@ -148,11 +148,11 @@
 148
 149
 150
-
use hydroflow::tokio::sync::mpsc::UnboundedSender;
+
use hydro_lang::deploy::SingleProcessGraph;
+use hydro_lang::hydroflow::scheduled::graph::Hydroflow;
+use hydro_lang::*;
+use hydroflow::tokio::sync::mpsc::UnboundedSender;
 use hydroflow::tokio_stream::wrappers::UnboundedReceiverStream;
-use hydroflow_plus::deploy::SingleProcessGraph;
-use hydroflow_plus::hydroflow::scheduled::graph::Hydroflow;
-use hydroflow_plus::*;
 use stageleft::{Quoted, RuntimeData};
 
 #[stageleft::entry]
diff --git a/doc/src/hydroflow_plus_test_local/local/compute_pi.rs.html b/doc/src/hydro_test_local/local/compute_pi.rs.html
similarity index 65%
rename from doc/src/hydroflow_plus_test_local/local/compute_pi.rs.html
rename to doc/src/hydro_test_local/local/compute_pi.rs.html
index 78f7c79e684b..83d97a704c3a 100644
--- a/doc/src/hydroflow_plus_test_local/local/compute_pi.rs.html
+++ b/doc/src/hydro_test_local/local/compute_pi.rs.html
@@ -1,4 +1,4 @@
-compute_pi.rs - source
1
+compute_pi.rs - source
1
 2
 3
 4
@@ -56,9 +56,9 @@
 56
 
use std::time::Duration;
 
-use hydroflow_plus::deploy::SingleProcessGraph;
-use hydroflow_plus::hydroflow::scheduled::graph::Hydroflow;
-use hydroflow_plus::*;
+use hydro_lang::deploy::SingleProcessGraph;
+use hydro_lang::hydroflow::scheduled::graph::Hydroflow;
+use hydro_lang::*;
 use stageleft::{Quoted, RuntimeData};
 
 pub fn compute_pi<'a>(flow: &FlowBuilder<'a>, batch_size: RuntimeData<usize>) -> Process<'a, ()> {
diff --git a/doc/src/hydroflow_plus_test_local/local/count_elems.rs.html b/doc/src/hydro_test_local/local/count_elems.rs.html
similarity index 69%
rename from doc/src/hydroflow_plus_test_local/local/count_elems.rs.html
rename to doc/src/hydro_test_local/local/count_elems.rs.html
index c51c0141b8b9..76e8321ba5a3 100644
--- a/doc/src/hydroflow_plus_test_local/local/count_elems.rs.html
+++ b/doc/src/hydro_test_local/local/count_elems.rs.html
@@ -1,4 +1,4 @@
-count_elems.rs - source
1
+count_elems.rs - source
1
 2
 3
 4
@@ -60,11 +60,11 @@
 60
 61
 62
-
use hydroflow::tokio::sync::mpsc::UnboundedSender;
+
use hydro_lang::deploy::SingleProcessGraph;
+use hydro_lang::hydroflow::scheduled::graph::Hydroflow;
+use hydro_lang::*;
+use hydroflow::tokio::sync::mpsc::UnboundedSender;
 use hydroflow::tokio_stream::wrappers::UnboundedReceiverStream;
-use hydroflow_plus::deploy::SingleProcessGraph;
-use hydroflow_plus::hydroflow::scheduled::graph::Hydroflow;
-use hydroflow_plus::*;
 use stageleft::{Quoted, RuntimeData};
 
 pub fn count_elems_generic<'a, T: 'a>(
diff --git a/doc/src/hydro_test_local/local/first_ten.rs.html b/doc/src/hydro_test_local/local/first_ten.rs.html
new file mode 100644
index 000000000000..aa4352b0a66d
--- /dev/null
+++ b/doc/src/hydro_test_local/local/first_ten.rs.html
@@ -0,0 +1,51 @@
+first_ten.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+
use hydro_lang::deploy::SingleProcessGraph;
+use hydro_lang::hydroflow::scheduled::graph::Hydroflow;
+use hydro_lang::*;
+use stageleft::Quoted;
+
+pub fn first_ten(flow: &FlowBuilder) {
+    let process = flow.process::<()>();
+    let numbers = process.source_iter(q!(0..10));
+    numbers.for_each(q!(|n| println!("{}", n)));
+}
+
+#[stageleft::entry]
+pub fn first_ten_runtime<'a>(flow: FlowBuilder<'a>) -> impl Quoted<'a, Hydroflow<'a>> {
+    first_ten(&flow);
+    flow.compile_no_network::<SingleProcessGraph>()
+}
+
+#[stageleft::runtime]
+#[cfg(test)]
+mod tests {
+    #[test]
+    fn instantiate_first_ten() {
+        let _ = super::first_ten_runtime!();
+    }
+}
+
\ No newline at end of file diff --git a/doc/src/hydroflow_plus_test_local/local/graph_reachability.rs.html b/doc/src/hydro_test_local/local/graph_reachability.rs.html similarity index 73% rename from doc/src/hydroflow_plus_test_local/local/graph_reachability.rs.html rename to doc/src/hydro_test_local/local/graph_reachability.rs.html index 9c4e21659a3a..6ff803eb0900 100644 --- a/doc/src/hydroflow_plus_test_local/local/graph_reachability.rs.html +++ b/doc/src/hydro_test_local/local/graph_reachability.rs.html @@ -1,4 +1,4 @@ -graph_reachability.rs - source
1
+graph_reachability.rs - source
1
 2
 3
 4
@@ -78,11 +78,11 @@
 78
 79
 80
-
use hydroflow::tokio::sync::mpsc::UnboundedSender;
+
use hydro_lang::deploy::SingleProcessGraph;
+use hydro_lang::hydroflow::scheduled::graph::Hydroflow;
+use hydro_lang::*;
+use hydroflow::tokio::sync::mpsc::UnboundedSender;
 use hydroflow::tokio_stream::wrappers::UnboundedReceiverStream;
-use hydroflow_plus::deploy::SingleProcessGraph;
-use hydroflow_plus::hydroflow::scheduled::graph::Hydroflow;
-use hydroflow_plus::*;
 use stageleft::{Quoted, RuntimeData};
 
 #[stageleft::entry]
diff --git a/doc/src/hydro_test_local/local/mod.rs.html b/doc/src/hydro_test_local/local/mod.rs.html
new file mode 100644
index 000000000000..fbadb2feb0b9
--- /dev/null
+++ b/doc/src/hydro_test_local/local/mod.rs.html
@@ -0,0 +1,15 @@
+mod.rs - source
1
+2
+3
+4
+5
+6
+7
+
pub mod chat_app;
+pub mod compute_pi;
+pub mod count_elems;
+pub mod first_ten;
+pub mod graph_reachability;
+pub mod negation;
+pub mod teed_join;
+
\ No newline at end of file diff --git a/doc/src/hydroflow_plus_test_local/local/negation.rs.html b/doc/src/hydro_test_local/local/negation.rs.html similarity index 89% rename from doc/src/hydroflow_plus_test_local/local/negation.rs.html rename to doc/src/hydro_test_local/local/negation.rs.html index 4ed0a5df0063..50111a6feffe 100644 --- a/doc/src/hydroflow_plus_test_local/local/negation.rs.html +++ b/doc/src/hydro_test_local/local/negation.rs.html @@ -1,4 +1,4 @@ -negation.rs - source
1
+negation.rs - source
1
 2
 3
 4
@@ -223,10 +223,10 @@
 223
 224
 225
-
use hydroflow::tokio::sync::mpsc::UnboundedSender;
-use hydroflow_plus::deploy::SingleProcessGraph;
-use hydroflow_plus::hydroflow::scheduled::graph::Hydroflow;
-use hydroflow_plus::*;
+
use hydro_lang::deploy::SingleProcessGraph;
+use hydro_lang::hydroflow::scheduled::graph::Hydroflow;
+use hydro_lang::*;
+use hydroflow::tokio::sync::mpsc::UnboundedSender;
 use stageleft::{Quoted, RuntimeData};
 
 #[stageleft::entry]
diff --git a/doc/src/hydroflow_plus_test_local/local/teed_join.rs.html b/doc/src/hydro_test_local/local/teed_join.rs.html
similarity index 80%
rename from doc/src/hydroflow_plus_test_local/local/teed_join.rs.html
rename to doc/src/hydro_test_local/local/teed_join.rs.html
index 469051525407..e8ab74bad071 100644
--- a/doc/src/hydroflow_plus_test_local/local/teed_join.rs.html
+++ b/doc/src/hydro_test_local/local/teed_join.rs.html
@@ -1,4 +1,4 @@
-teed_join.rs - source
1
+teed_join.rs - source
1
 2
 3
 4
@@ -110,12 +110,12 @@
 110
 111
 112
-
use hydroflow::futures::stream::Stream;
+
use hydro_lang::deploy::MultiGraph;
+use hydro_lang::hydroflow::scheduled::graph::Hydroflow;
+use hydro_lang::*;
+use hydroflow::futures::stream::Stream;
 use hydroflow::tokio::sync::mpsc::UnboundedSender;
 use hydroflow::tokio_stream::wrappers::UnboundedReceiverStream;
-use hydroflow_plus::deploy::MultiGraph;
-use hydroflow_plus::hydroflow::scheduled::graph::Hydroflow;
-use hydroflow_plus::*;
 use stageleft::{Quoted, RuntimeData};
 
 struct N0 {}
diff --git a/doc/src/hydroflow_plus_test_local_macro/home/runner/work/hydroflow/hydroflow/target/debug/build/hydroflow_plus_test_local_macro-eb9acefefb28af3f/out/lib_macro.rs.html b/doc/src/hydro_test_local_macro/home/runner/work/hydroflow/hydroflow/target/debug/build/hydro_test_local_macro-17e9fc4f6209e457/out/lib_macro.rs.html
similarity index 67%
rename from doc/src/hydroflow_plus_test_local_macro/home/runner/work/hydroflow/hydroflow/target/debug/build/hydroflow_plus_test_local_macro-eb9acefefb28af3f/out/lib_macro.rs.html
rename to doc/src/hydro_test_local_macro/home/runner/work/hydroflow/hydroflow/target/debug/build/hydro_test_local_macro-17e9fc4f6209e457/out/lib_macro.rs.html
index 899f1ff77699..28a435f3098f 100644
--- a/doc/src/hydroflow_plus_test_local_macro/home/runner/work/hydroflow/hydroflow/target/debug/build/hydroflow_plus_test_local_macro-eb9acefefb28af3f/out/lib_macro.rs.html
+++ b/doc/src/hydro_test_local_macro/home/runner/work/hydroflow/hydroflow/target/debug/build/hydro_test_local_macro-17e9fc4f6209e457/out/lib_macro.rs.html
@@ -1,2 +1,2 @@
-lib_macro.rs - source
1
+lib_macro.rs - source
1
 
# [proc_macro] # [expect (unused_qualifications , non_snake_case , reason = "generated code")] pub fn macro_0317123C21A365AAC8F7C904D715749D52C4408A36766C2EA4952E8548FDF2CF (input : :: proc_macro :: TokenStream) -> :: proc_macro :: TokenStream { let input = :: stageleft :: internal :: TokenStream :: from (input) ; let out = crate :: local :: compute_pi :: macro_0317123C21A365AAC8F7C904D715749D52C4408A36766C2EA4952E8548FDF2CF_impl (input) ; :: proc_macro :: TokenStream :: from (out) } # [proc_macro] # [expect (unused_qualifications , non_snake_case , reason = "generated code")] pub fn macro_1C0FE8523A30CEE48113F7CA958EDC55F81545A0CB32FC13A73E2E0B86C69967 (input : :: proc_macro :: TokenStream) -> :: proc_macro :: TokenStream { let input = :: stageleft :: internal :: TokenStream :: from (input) ; let out = crate :: local :: negation :: macro_1C0FE8523A30CEE48113F7CA958EDC55F81545A0CB32FC13A73E2E0B86C69967_impl (input) ; :: proc_macro :: TokenStream :: from (out) } # [proc_macro] # [expect (unused_qualifications , non_snake_case , reason = "generated code")] pub fn macro_88FF4FF66B42C3C3EA6A3A776AD3BBB5A0E778C545379CD74D8134F1BDE2467B (input : :: proc_macro :: TokenStream) -> :: proc_macro :: TokenStream { let input = :: stageleft :: internal :: TokenStream :: from (input) ; let out = crate :: local :: count_elems :: macro_88FF4FF66B42C3C3EA6A3A776AD3BBB5A0E778C545379CD74D8134F1BDE2467B_impl (input) ; :: proc_macro :: TokenStream :: from (out) } # [proc_macro] # [expect (unused_qualifications , non_snake_case , reason = "generated code")] pub fn macro_B8B04B5C82DD37E36A884DD155638B3BB603ECEE77232C187CB7749C8C3633D4 (input : :: proc_macro :: TokenStream) -> :: proc_macro :: TokenStream { let input = :: stageleft :: internal :: TokenStream :: from (input) ; let out = crate :: local :: negation :: macro_B8B04B5C82DD37E36A884DD155638B3BB603ECEE77232C187CB7749C8C3633D4_impl (input) ; :: proc_macro :: TokenStream :: from (out) } # [proc_macro] # [expect (unused_qualifications , non_snake_case , reason = "generated code")] pub fn macro_DBD6835F761FB7B759E0367E64D404553FF74D0CDA5EC33E48C8D94A09338A20 (input : :: proc_macro :: TokenStream) -> :: proc_macro :: TokenStream { let input = :: stageleft :: internal :: TokenStream :: from (input) ; let out = crate :: local :: first_ten :: macro_DBD6835F761FB7B759E0367E64D404553FF74D0CDA5EC33E48C8D94A09338A20_impl (input) ; :: proc_macro :: TokenStream :: from (out) } # [proc_macro] # [expect (unused_qualifications , non_snake_case , reason = "generated code")] pub fn macro_E29C1936765CFB0AEE40C7D85645A072229E6DD9B20D78BFFDFDF0B90F8550E2 (input : :: proc_macro :: TokenStream) -> :: proc_macro :: TokenStream { let input = :: stageleft :: internal :: TokenStream :: from (input) ; let out = crate :: local :: graph_reachability :: macro_E29C1936765CFB0AEE40C7D85645A072229E6DD9B20D78BFFDFDF0B90F8550E2_impl (input) ; :: proc_macro :: TokenStream :: from (out) } # [proc_macro] # [expect (unused_qualifications , non_snake_case , reason = "generated code")] pub fn macro_F32B896FDC4E575B912C55F307713AE1C491601401B080576A445697B5F5D872 (input : :: proc_macro :: TokenStream) -> :: proc_macro :: TokenStream { let input = :: stageleft :: internal :: TokenStream :: from (input) ; let out = crate :: local :: chat_app :: macro_F32B896FDC4E575B912C55F307713AE1C491601401B080576A445697B5F5D872_impl (input) ; :: proc_macro :: TokenStream :: from (out) } # [proc_macro] # [expect (unused_qualifications , non_snake_case , reason = "generated code")] pub fn macro_F395CBD2498F0C0291586D539B1C53802F7DE61514FE27DB041B53B7578FA011 (input : :: proc_macro :: TokenStream) -> :: proc_macro :: TokenStream { let input = :: stageleft :: internal :: TokenStream :: from (input) ; let out = crate :: local :: teed_join :: macro_F395CBD2498F0C0291586D539B1C53802F7DE61514FE27DB041B53B7578FA011_impl (input) ; :: proc_macro :: TokenStream :: from (out) }
\ No newline at end of file diff --git a/doc/src/hydro_test_local_macro/lib.rs.html b/doc/src/hydro_test_local_macro/lib.rs.html new file mode 100644 index 000000000000..864715fbcb43 --- /dev/null +++ b/doc/src/hydro_test_local_macro/lib.rs.html @@ -0,0 +1,13 @@ +lib.rs - source
1
+2
+3
+4
+5
+6
+
stageleft::stageleft_crate!(hydro_test_local_macro);
+
+#[cfg(stageleft_macro)]
+pub(crate) mod local;
+#[cfg(not(stageleft_macro))]
+pub mod local;
+
\ No newline at end of file diff --git a/doc/src/hydroflow_plus_test_local_macro/local/chat_app.rs.html b/doc/src/hydro_test_local_macro/local/chat_app.rs.html similarity index 83% rename from doc/src/hydroflow_plus_test_local_macro/local/chat_app.rs.html rename to doc/src/hydro_test_local_macro/local/chat_app.rs.html index 41f0593ed8f6..96a3e34ec127 100644 --- a/doc/src/hydroflow_plus_test_local_macro/local/chat_app.rs.html +++ b/doc/src/hydro_test_local_macro/local/chat_app.rs.html @@ -1,4 +1,4 @@ -chat_app.rs - source
1
+chat_app.rs - source
1
 2
 3
 4
@@ -148,11 +148,11 @@
 148
 149
 150
-
use hydroflow::tokio::sync::mpsc::UnboundedSender;
+
use hydro_lang::deploy::SingleProcessGraph;
+use hydro_lang::hydroflow::scheduled::graph::Hydroflow;
+use hydro_lang::*;
+use hydroflow::tokio::sync::mpsc::UnboundedSender;
 use hydroflow::tokio_stream::wrappers::UnboundedReceiverStream;
-use hydroflow_plus::deploy::SingleProcessGraph;
-use hydroflow_plus::hydroflow::scheduled::graph::Hydroflow;
-use hydroflow_plus::*;
 use stageleft::{Quoted, RuntimeData};
 
 #[stageleft::entry]
diff --git a/doc/src/hydroflow_plus_test_local_macro/local/compute_pi.rs.html b/doc/src/hydro_test_local_macro/local/compute_pi.rs.html
similarity index 65%
rename from doc/src/hydroflow_plus_test_local_macro/local/compute_pi.rs.html
rename to doc/src/hydro_test_local_macro/local/compute_pi.rs.html
index e9cb3c59861e..750b9f975e1c 100644
--- a/doc/src/hydroflow_plus_test_local_macro/local/compute_pi.rs.html
+++ b/doc/src/hydro_test_local_macro/local/compute_pi.rs.html
@@ -1,4 +1,4 @@
-compute_pi.rs - source
1
+compute_pi.rs - source
1
 2
 3
 4
@@ -56,9 +56,9 @@
 56
 
use std::time::Duration;
 
-use hydroflow_plus::deploy::SingleProcessGraph;
-use hydroflow_plus::hydroflow::scheduled::graph::Hydroflow;
-use hydroflow_plus::*;
+use hydro_lang::deploy::SingleProcessGraph;
+use hydro_lang::hydroflow::scheduled::graph::Hydroflow;
+use hydro_lang::*;
 use stageleft::{Quoted, RuntimeData};
 
 pub fn compute_pi<'a>(flow: &FlowBuilder<'a>, batch_size: RuntimeData<usize>) -> Process<'a, ()> {
diff --git a/doc/src/hydroflow_plus_test_local_macro/local/count_elems.rs.html b/doc/src/hydro_test_local_macro/local/count_elems.rs.html
similarity index 68%
rename from doc/src/hydroflow_plus_test_local_macro/local/count_elems.rs.html
rename to doc/src/hydro_test_local_macro/local/count_elems.rs.html
index 388348ad6ee7..9c5e5f941b00 100644
--- a/doc/src/hydroflow_plus_test_local_macro/local/count_elems.rs.html
+++ b/doc/src/hydro_test_local_macro/local/count_elems.rs.html
@@ -1,4 +1,4 @@
-count_elems.rs - source
1
+count_elems.rs - source
1
 2
 3
 4
@@ -60,11 +60,11 @@
 60
 61
 62
-
use hydroflow::tokio::sync::mpsc::UnboundedSender;
+
use hydro_lang::deploy::SingleProcessGraph;
+use hydro_lang::hydroflow::scheduled::graph::Hydroflow;
+use hydro_lang::*;
+use hydroflow::tokio::sync::mpsc::UnboundedSender;
 use hydroflow::tokio_stream::wrappers::UnboundedReceiverStream;
-use hydroflow_plus::deploy::SingleProcessGraph;
-use hydroflow_plus::hydroflow::scheduled::graph::Hydroflow;
-use hydroflow_plus::*;
 use stageleft::{Quoted, RuntimeData};
 
 pub fn count_elems_generic<'a, T: 'a>(
diff --git a/doc/src/hydro_test_local_macro/local/first_ten.rs.html b/doc/src/hydro_test_local_macro/local/first_ten.rs.html
new file mode 100644
index 000000000000..3459493188f0
--- /dev/null
+++ b/doc/src/hydro_test_local_macro/local/first_ten.rs.html
@@ -0,0 +1,51 @@
+first_ten.rs - source
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+
use hydro_lang::deploy::SingleProcessGraph;
+use hydro_lang::hydroflow::scheduled::graph::Hydroflow;
+use hydro_lang::*;
+use stageleft::Quoted;
+
+pub fn first_ten(flow: &FlowBuilder) {
+    let process = flow.process::<()>();
+    let numbers = process.source_iter(q!(0..10));
+    numbers.for_each(q!(|n| println!("{}", n)));
+}
+
+#[stageleft::entry]
+pub fn first_ten_runtime<'a>(flow: FlowBuilder<'a>) -> impl Quoted<'a, Hydroflow<'a>> {
+    first_ten(&flow);
+    flow.compile_no_network::<SingleProcessGraph>()
+}
+
+#[stageleft::runtime]
+#[cfg(test)]
+mod tests {
+    #[test]
+    fn instantiate_first_ten() {
+        let _ = super::first_ten_runtime!();
+    }
+}
+
\ No newline at end of file diff --git a/doc/src/hydroflow_plus_test_local_macro/local/graph_reachability.rs.html b/doc/src/hydro_test_local_macro/local/graph_reachability.rs.html similarity index 73% rename from doc/src/hydroflow_plus_test_local_macro/local/graph_reachability.rs.html rename to doc/src/hydro_test_local_macro/local/graph_reachability.rs.html index 44b19298868a..f84d46617403 100644 --- a/doc/src/hydroflow_plus_test_local_macro/local/graph_reachability.rs.html +++ b/doc/src/hydro_test_local_macro/local/graph_reachability.rs.html @@ -1,4 +1,4 @@ -graph_reachability.rs - source
1
+graph_reachability.rs - source
1
 2
 3
 4
@@ -78,11 +78,11 @@
 78
 79
 80
-
use hydroflow::tokio::sync::mpsc::UnboundedSender;
+
use hydro_lang::deploy::SingleProcessGraph;
+use hydro_lang::hydroflow::scheduled::graph::Hydroflow;
+use hydro_lang::*;
+use hydroflow::tokio::sync::mpsc::UnboundedSender;
 use hydroflow::tokio_stream::wrappers::UnboundedReceiverStream;
-use hydroflow_plus::deploy::SingleProcessGraph;
-use hydroflow_plus::hydroflow::scheduled::graph::Hydroflow;
-use hydroflow_plus::*;
 use stageleft::{Quoted, RuntimeData};
 
 #[stageleft::entry]
diff --git a/doc/src/hydro_test_local_macro/local/mod.rs.html b/doc/src/hydro_test_local_macro/local/mod.rs.html
new file mode 100644
index 000000000000..dad21d2a6d0e
--- /dev/null
+++ b/doc/src/hydro_test_local_macro/local/mod.rs.html
@@ -0,0 +1,15 @@
+mod.rs - source
1
+2
+3
+4
+5
+6
+7
+
pub mod chat_app;
+pub mod compute_pi;
+pub mod count_elems;
+pub mod first_ten;
+pub mod graph_reachability;
+pub mod negation;
+pub mod teed_join;
+
\ No newline at end of file diff --git a/doc/src/hydroflow_plus_test_local_macro/local/negation.rs.html b/doc/src/hydro_test_local_macro/local/negation.rs.html similarity index 89% rename from doc/src/hydroflow_plus_test_local_macro/local/negation.rs.html rename to doc/src/hydro_test_local_macro/local/negation.rs.html index 4b047ed6df50..910d9e533ccf 100644 --- a/doc/src/hydroflow_plus_test_local_macro/local/negation.rs.html +++ b/doc/src/hydro_test_local_macro/local/negation.rs.html @@ -1,4 +1,4 @@ -negation.rs - source
1
+negation.rs - source
1
 2
 3
 4
@@ -223,10 +223,10 @@
 223
 224
 225
-
use hydroflow::tokio::sync::mpsc::UnboundedSender;
-use hydroflow_plus::deploy::SingleProcessGraph;
-use hydroflow_plus::hydroflow::scheduled::graph::Hydroflow;
-use hydroflow_plus::*;
+
use hydro_lang::deploy::SingleProcessGraph;
+use hydro_lang::hydroflow::scheduled::graph::Hydroflow;
+use hydro_lang::*;
+use hydroflow::tokio::sync::mpsc::UnboundedSender;
 use stageleft::{Quoted, RuntimeData};
 
 #[stageleft::entry]
diff --git a/doc/src/hydroflow_plus_test_local_macro/local/teed_join.rs.html b/doc/src/hydro_test_local_macro/local/teed_join.rs.html
similarity index 80%
rename from doc/src/hydroflow_plus_test_local_macro/local/teed_join.rs.html
rename to doc/src/hydro_test_local_macro/local/teed_join.rs.html
index f619fd6d27fd..6dc38303385e 100644
--- a/doc/src/hydroflow_plus_test_local_macro/local/teed_join.rs.html
+++ b/doc/src/hydro_test_local_macro/local/teed_join.rs.html
@@ -1,4 +1,4 @@
-teed_join.rs - source
1
+teed_join.rs - source
1
 2
 3
 4
@@ -110,12 +110,12 @@
 110
 111
 112
-
use hydroflow::futures::stream::Stream;
+
use hydro_lang::deploy::MultiGraph;
+use hydro_lang::hydroflow::scheduled::graph::Hydroflow;
+use hydro_lang::*;
+use hydroflow::futures::stream::Stream;
 use hydroflow::tokio::sync::mpsc::UnboundedSender;
 use hydroflow::tokio_stream::wrappers::UnboundedReceiverStream;
-use hydroflow_plus::deploy::MultiGraph;
-use hydroflow_plus::hydroflow::scheduled::graph::Hydroflow;
-use hydroflow_plus::*;
 use stageleft::{Quoted, RuntimeData};
 
 struct N0 {}
diff --git a/doc/src/hydroflow_plus/boundedness.rs.html b/doc/src/hydroflow_plus/boundedness.rs.html
deleted file mode 100644
index 1a3b2a67018c..000000000000
--- a/doc/src/hydroflow_plus/boundedness.rs.html
+++ /dev/null
@@ -1,15 +0,0 @@
-boundedness.rs - source
1
-2
-3
-4
-5
-6
-7
-
/// Marks the stream as being unbounded, which means that it is not
-/// guaranteed to be complete in finite time.
-pub enum Unbounded {}
-
-/// Marks the stream as being bounded, which means that it is guaranteed
-/// to be complete in finite time.
-pub enum Bounded {}
-
\ No newline at end of file diff --git a/doc/src/hydroflow_plus/home/runner/work/hydroflow/hydroflow/target/debug/build/hydroflow_plus-b7baca19aeecfedb/out/lib_pub.rs.html b/doc/src/hydroflow_plus/home/runner/work/hydroflow/hydroflow/target/debug/build/hydroflow_plus-b7baca19aeecfedb/out/lib_pub.rs.html deleted file mode 100644 index 3404def2782c..000000000000 --- a/doc/src/hydroflow_plus/home/runner/work/hydroflow/hydroflow/target/debug/build/hydroflow_plus-b7baca19aeecfedb/out/lib_pub.rs.html +++ /dev/null @@ -1,2 +0,0 @@ -lib_pub.rs - source
1
-
pub use hydroflow ; pub use stageleft :: q ; # [doc (hidden)] pub mod runtime_support { pub use bincode ; } pub mod runtime_context { pub use hydroflow :: scheduled :: context :: Context ; pub use proc_macro2 :: TokenStream ; pub use quote :: quote ; pub use stageleft :: runtime_support :: FreeVariableWithContext ; pub use crate :: __staged :: Location ; pub use crate :: runtime_context :: RUNTIME_CONTEXT ; pub use crate :: runtime_context :: RuntimeContext ; # [cfg (stageleft_macro)] impl < 'a , L : Location < 'a > > FreeVariableWithContext < L > for RuntimeContext < 'a > { type O = & 'a Context ; fn to_tokens (self , _ctx : & L) -> (Option < TokenStream > , Option < TokenStream >) { (None , Some (quote ! (& context))) } } # [cfg (stageleft_macro)] pub mod tests { pub use hydro_deploy :: Deployment ; pub use hydroflow :: futures :: StreamExt ; pub use crate :: __staged :: * ; pub struct P1 { } # [tokio :: test] pub async fn runtime_context () { let mut deployment = Deployment :: new () ; let flow = FlowBuilder :: new () ; let node = flow . process :: < P1 > () ; let external = flow . external_process :: < () > () ; let out_port = node . source_iter (q ! (0 .. 5)) . map (q ! (| v | (v , RUNTIME_CONTEXT . current_tick () . 0))) . send_bincode_external (& external) ; let nodes = flow . with_process (& node , deployment . Localhost ()) . with_external (& external , deployment . Localhost ()) . deploy (& mut deployment) ; deployment . deploy () . await . unwrap () ; let mut external_out = nodes . connect_source_bincode (out_port) . await ; deployment . start () . await . unwrap () ; for i in 0 .. 5 { assert_eq ! (external_out . next () . await . unwrap () , (i , 0)) ; } } } } pub use runtime_context :: RUNTIME_CONTEXT ; pub mod boundedness { pub use crate :: boundedness :: Unbounded ; pub use crate :: boundedness :: Bounded ; } pub use boundedness :: { Bounded , Unbounded } ; pub mod stream { pub use std :: cell :: RefCell ; pub use std :: hash :: Hash ; pub use std :: marker :: PhantomData ; pub use std :: ops :: Deref ; pub use std :: rc :: Rc ; pub use hydroflow :: bytes :: Bytes ; pub use hydroflow :: futures ; pub use serde :: de :: DeserializeOwned ; pub use serde :: Serialize ; pub use stageleft :: { q , IntoQuotedMut , QuotedWithContext } ; pub use syn :: parse_quote ; pub use tokio :: time :: Instant ; pub use crate :: __staged :: builder :: FLOW_USED_MESSAGE ; pub use crate :: __staged :: cycle :: { CycleCollection , CycleComplete , DeferTick , ForwardRefMarker , TickCycleMarker } ; pub use crate :: __staged :: ir :: { DebugInstantiate , HfPlusLeaf , HfPlusNode , TeeNode } ; pub use crate :: __staged :: location :: cluster :: CLUSTER_SELF_ID ; pub use crate :: __staged :: location :: external_process :: { ExternalBincodeStream , ExternalBytesPort } ; pub use crate :: __staged :: location :: tick :: { NoTimestamp , Timestamped } ; pub use crate :: __staged :: location :: { check_matching_location , CanSend , ExternalProcess , Location , LocationId , NoTick , Tick , } ; pub use crate :: __staged :: staging_util :: get_this_crate ; pub use crate :: __staged :: { Bounded , Cluster , ClusterId , Optional , Process , Singleton , Unbounded } ; pub use crate :: stream :: TotalOrder ; pub use crate :: stream :: NoOrder ; pub use crate :: stream :: MinOrder ; # [cfg (stageleft_macro)] # [sealed :: sealed] impl < T > MinOrder < T > for T { type Min = T ; } # [cfg (stageleft_macro)] # [sealed :: sealed] impl MinOrder < NoOrder > for TotalOrder { type Min = NoOrder ; } # [cfg (stageleft_macro)] # [sealed :: sealed] impl MinOrder < TotalOrder > for NoOrder { type Min = NoOrder ; } pub use crate :: stream :: Stream ; # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , B > From < Stream < T , L , B , TotalOrder > > for Stream < T , L , B , NoOrder > { fn from (stream : Stream < T , L , B , TotalOrder >) -> Stream < T , L , B , NoOrder > { Stream { location : stream . location , ir_node : stream . ir_node , _phantom : PhantomData , } } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , B , Order > Stream < T , L , B , Order > { fn location_kind (& self) -> LocationId { self . location . id () } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , Order > DeferTick for Stream < T , Tick < L > , Bounded , Order > { fn defer_tick (self) -> Self { Stream :: defer_tick (self) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , Order > CycleCollection < 'a , TickCycleMarker > for Stream < T , Tick < L > , Bounded , Order > { type Location = Tick < L > ; fn create_source (ident : syn :: Ident , location : Tick < L >) -> Self { let location_id = location . id () ; Stream :: new (location , HfPlusNode :: CycleSource { ident , location_kind : location_id , } ,) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , Order > CycleComplete < 'a , TickCycleMarker > for Stream < T , Tick < L > , Bounded , Order > { fn complete (self , ident : syn :: Ident , expected_location : LocationId) { assert_eq ! (self . location . id () , expected_location , "locations do not match") ; self . location . flow_state () . borrow_mut () . leaves . as_mut () . expect (FLOW_USED_MESSAGE) . push (HfPlusLeaf :: CycleSink { ident , location_kind : self . location_kind () , input : Box :: new (self . ir_node . into_inner ()) , }) ; } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick , B , Order > CycleCollection < 'a , ForwardRefMarker > for Stream < T , L , B , Order > { type Location = L ; fn create_source (ident : syn :: Ident , location : L) -> Self { let location_id = location . id () ; Stream :: new (location , HfPlusNode :: Persist (Box :: new (HfPlusNode :: CycleSource { ident , location_kind : location_id , })) ,) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick , B , Order > CycleComplete < 'a , ForwardRefMarker > for Stream < T , L , B , Order > { fn complete (self , ident : syn :: Ident , expected_location : LocationId) { assert_eq ! (self . location . id () , expected_location , "locations do not match") ; self . location . flow_state () . borrow_mut () . leaves . as_mut () . expect (FLOW_USED_MESSAGE) . push (HfPlusLeaf :: CycleSink { ident , location_kind : self . location_kind () , input : Box :: new (HfPlusNode :: Unpersist (Box :: new (self . ir_node . into_inner ()))) , }) ; } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , B , Order > Stream < T , L , B , Order > { pub (crate) fn new (location : L , ir_node : HfPlusNode) -> Self { Stream { location , ir_node : RefCell :: new (ir_node) , _phantom : PhantomData , } } } # [cfg (stageleft_macro)] impl < 'a , T : Clone , L : Location < 'a > , B , Order > Clone for Stream < T , L , B , Order > { fn clone (& self) -> Self { if ! matches ! (self . ir_node . borrow () . deref () , HfPlusNode :: Tee { .. }) { let orig_ir_node = self . ir_node . replace (HfPlusNode :: Placeholder) ; * self . ir_node . borrow_mut () = HfPlusNode :: Tee { inner : TeeNode (Rc :: new (RefCell :: new (orig_ir_node))) , } ; } if let HfPlusNode :: Tee { inner } = self . ir_node . borrow () . deref () { Stream { location : self . location . clone () , ir_node : HfPlusNode :: Tee { inner : TeeNode (inner . 0 . clone ()) , } . into () , _phantom : PhantomData , } } else { unreachable ! () } } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , B , Order > Stream < T , L , B , Order > { pub fn map < U , F : Fn (T) -> U + 'a > (self , f : impl IntoQuotedMut < 'a , F , L > ,) -> Stream < U , L , B , Order > { let f = f . splice_fn1_ctx (& self . location) . into () ; Stream :: new (self . location , HfPlusNode :: Map { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn cloned (self) -> Stream < T , L , B , Order > where T : Clone , { self . map (q ! (| d | d . clone ())) } pub fn flat_map_ordered < U , I : IntoIterator < Item = U > , F : Fn (T) -> I + 'a > (self , f : impl IntoQuotedMut < 'a , F , L > ,) -> Stream < U , L , B , Order > { let f = f . splice_fn1_ctx (& self . location) . into () ; Stream :: new (self . location , HfPlusNode :: FlatMap { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn flat_map_unordered < U , I : IntoIterator < Item = U > , F : Fn (T) -> I + 'a > (self , f : impl IntoQuotedMut < 'a , F , L > ,) -> Stream < U , L , B , NoOrder > { let f = f . splice_fn1_ctx (& self . location) . into () ; Stream :: new (self . location , HfPlusNode :: FlatMap { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn flatten_ordered < U > (self) -> Stream < U , L , B , Order > where T : IntoIterator < Item = U > , { self . flat_map_ordered (q ! (| d | d)) } pub fn flatten_unordered < U > (self) -> Stream < U , L , B , NoOrder > where T : IntoIterator < Item = U > , { self . flat_map_unordered (q ! (| d | d)) } pub fn filter < F : Fn (& T) -> bool + 'a > (self , f : impl IntoQuotedMut < 'a , F , L > ,) -> Stream < T , L , B , Order > { let f = f . splice_fn1_borrow_ctx (& self . location) . into () ; Stream :: new (self . location , HfPlusNode :: Filter { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn filter_map < U , F : Fn (T) -> Option < U > + 'a > (self , f : impl IntoQuotedMut < 'a , F , L > ,) -> Stream < U , L , B , Order > { let f = f . splice_fn1_ctx (& self . location) . into () ; Stream :: new (self . location , HfPlusNode :: FilterMap { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn cross_singleton < O > (self , other : impl Into < Optional < O , L , Bounded > > ,) -> Stream < (T , O) , L , B , Order > where O : Clone , { let other : Optional < O , L , Bounded > = other . into () ; check_matching_location (& self . location , & other . location) ; Stream :: new (self . location , HfPlusNode :: CrossSingleton (Box :: new (self . ir_node . into_inner ()) , Box :: new (other . ir_node . into_inner ()) ,) ,) } # [doc = " Allow this stream through if the other stream has elements, otherwise the output is empty."] pub fn continue_if < U > (self , signal : Optional < U , L , Bounded >) -> Stream < T , L , B , Order > { self . cross_singleton (signal . map (q ! (| _u | ()))) . map (q ! (| (d , _signal) | d)) } # [doc = " Allow this stream through if the other stream is empty, otherwise the output is empty."] pub fn continue_unless < U > (self , other : Optional < U , L , Bounded >) -> Stream < T , L , B , Order > { self . continue_if (other . into_stream () . count () . filter (q ! (| c | * c == 0))) } pub fn cross_product < O > (self , other : Stream < O , L , B , Order >) -> Stream < (T , O) , L , B , Order > where T : Clone , O : Clone , { check_matching_location (& self . location , & other . location) ; Stream :: new (self . location , HfPlusNode :: CrossProduct (Box :: new (self . ir_node . into_inner ()) , Box :: new (other . ir_node . into_inner ()) ,) ,) } pub fn unique (self) -> Stream < T , L , B , Order > where T : Eq + Hash , { Stream :: new (self . location , HfPlusNode :: Unique (Box :: new (self . ir_node . into_inner ())) ,) } pub fn filter_not_in < O2 > (self , other : Stream < T , L , Bounded , O2 >) -> Stream < T , L , Bounded , Order > where T : Eq + Hash , { check_matching_location (& self . location , & other . location) ; Stream :: new (self . location , HfPlusNode :: Difference (Box :: new (self . ir_node . into_inner ()) , Box :: new (other . ir_node . into_inner ()) ,) ,) } pub fn inspect < F : Fn (& T) + 'a > (self , f : impl IntoQuotedMut < 'a , F , L > ,) -> Stream < T , L , B , Order > { let f = f . splice_fn1_borrow_ctx (& self . location) . into () ; if L :: is_top_level () { Stream :: new (self . location , HfPlusNode :: Persist (Box :: new (HfPlusNode :: Inspect { f , input : Box :: new (HfPlusNode :: Unpersist (Box :: new (self . ir_node . into_inner ()))) , })) ,) } else { Stream :: new (self . location , HfPlusNode :: Inspect { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } } # [doc = " Explicitly \"casts\" the stream to a type with a different ordering"] # [doc = " guarantee. Useful in unsafe code where the ordering cannot be proven"] # [doc = " by the type-system."] # [doc = ""] # [doc = " # Safety"] # [doc = " This function is used as an escape hatch, and any mistakes in the"] # [doc = " provided ordering guarantee will propogate into the guarantees"] # [doc = " for the rest of the program."] pub unsafe fn assume_ordering < O > (self) -> Stream < T , L , B , O > { Stream :: new (self . location , self . ir_node . into_inner ()) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , B , Order > Stream < T , L , B , Order > where Order : MinOrder < NoOrder , Min = NoOrder > , { pub fn fold_commutative < A , I : Fn () -> A + 'a , F : Fn (& mut A , T) > (self , init : impl IntoQuotedMut < 'a , I , L > , comb : impl IntoQuotedMut < 'a , F , L > ,) -> Singleton < A , L , B > { let init = init . splice_fn0_ctx (& self . location) . into () ; let comb = comb . splice_fn2_borrow_mut_ctx (& self . location) . into () ; let mut core = HfPlusNode :: Fold { init , acc : comb , input : Box :: new (self . ir_node . into_inner ()) , } ; if L :: is_top_level () { core = HfPlusNode :: Persist (Box :: new (core)) ; } Singleton :: new (self . location , core) } pub fn reduce_commutative < F : Fn (& mut T , T) + 'a > (self , comb : impl IntoQuotedMut < 'a , F , L > ,) -> Optional < T , L , B > { let f = comb . splice_fn2_borrow_mut_ctx (& self . location) . into () ; let mut core = HfPlusNode :: Reduce { f , input : Box :: new (self . ir_node . into_inner ()) , } ; if L :: is_top_level () { core = HfPlusNode :: Persist (Box :: new (core)) ; } Optional :: new (self . location , core) } pub fn max (self) -> Optional < T , L , B > where T : Ord , { self . reduce_commutative (q ! (| curr , new | { if new > * curr { * curr = new ; } })) } pub fn max_by_key < K : Ord , F : Fn (& T) -> K + 'a > (self , key : impl IntoQuotedMut < 'a , F , L > + Copy ,) -> Optional < T , L , B > { let f = key . splice_fn1_borrow_ctx (& self . location) ; let wrapped : syn :: Expr = parse_quote ! ({ let key_fn = # f ; move | curr , new | { if key_fn (& new) > key_fn (&* curr) { * curr = new ; } } }) ; let mut core = HfPlusNode :: Reduce { f : wrapped . into () , input : Box :: new (self . ir_node . into_inner ()) , } ; if L :: is_top_level () { core = HfPlusNode :: Persist (Box :: new (core)) ; } Optional :: new (self . location , core) } pub fn min (self) -> Optional < T , L , B > where T : Ord , { self . reduce_commutative (q ! (| curr , new | { if new < * curr { * curr = new ; } })) } pub fn count (self) -> Singleton < usize , L , B > { self . fold_commutative (q ! (|| 0usize) , q ! (| count , _ | * count += 1)) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , B > Stream < T , L , B , TotalOrder > { pub fn enumerate (self) -> Stream < (usize , T) , L , B , TotalOrder > { if L :: is_top_level () { Stream :: new (self . location , HfPlusNode :: Persist (Box :: new (HfPlusNode :: Enumerate { is_static : true , input : Box :: new (HfPlusNode :: Unpersist (Box :: new (self . ir_node . into_inner ()))) , })) ,) } else { Stream :: new (self . location , HfPlusNode :: Enumerate { is_static : false , input : Box :: new (self . ir_node . into_inner ()) , } ,) } } pub fn first (self) -> Optional < T , L , B > { Optional :: new (self . location , self . ir_node . into_inner ()) } pub fn last (self) -> Optional < T , L , B > { self . reduce (q ! (| curr , new | * curr = new)) } pub fn fold < A , I : Fn () -> A + 'a , F : Fn (& mut A , T) > (self , init : impl IntoQuotedMut < 'a , I , L > , comb : impl IntoQuotedMut < 'a , F , L > ,) -> Singleton < A , L , B > { let init = init . splice_fn0_ctx (& self . location) . into () ; let comb = comb . splice_fn2_borrow_mut_ctx (& self . location) . into () ; let mut core = HfPlusNode :: Fold { init , acc : comb , input : Box :: new (self . ir_node . into_inner ()) , } ; if L :: is_top_level () { core = HfPlusNode :: Persist (Box :: new (core)) ; } Singleton :: new (self . location , core) } pub fn reduce < F : Fn (& mut T , T) + 'a > (self , comb : impl IntoQuotedMut < 'a , F , L > ,) -> Optional < T , L , B > { let f = comb . splice_fn2_borrow_mut_ctx (& self . location) . into () ; let mut core = HfPlusNode :: Reduce { f , input : Box :: new (self . ir_node . into_inner ()) , } ; if L :: is_top_level () { core = HfPlusNode :: Persist (Box :: new (core)) ; } Optional :: new (self . location , core) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > Stream < T , L , Bounded , TotalOrder > { pub fn chain (self , other : Stream < T , L , Bounded , TotalOrder > ,) -> Stream < T , L , Bounded , TotalOrder > { check_matching_location (& self . location , & other . location) ; Stream :: new (self . location , HfPlusNode :: Chain (Box :: new (self . ir_node . into_inner ()) , Box :: new (other . ir_node . into_inner ()) ,) ,) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick + NoTimestamp > Stream < T , L , Unbounded , NoOrder > { pub fn union (self , other : Stream < T , L , Unbounded , NoOrder > ,) -> Stream < T , L , Unbounded , NoOrder > { let tick = self . location . tick () ; unsafe { self . timestamped (& tick) . tick_batch () . union (other . timestamped (& tick) . tick_batch ()) . all_ticks () . drop_timestamp () } } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , Order > Stream < T , L , Bounded , Order > { pub fn sort (self) -> Stream < T , L , Bounded , TotalOrder > where T : Ord , { Stream :: new (self . location , HfPlusNode :: Sort (Box :: new (self . ir_node . into_inner ())) ,) } pub fn union < B2 , O2 > (self , other : Stream < T , L , B2 , O2 >) -> Stream < T , L , B2 , Order :: Min > where Order : MinOrder < O2 > , { check_matching_location (& self . location , & other . location) ; Stream :: new (self . location , HfPlusNode :: Chain (Box :: new (self . ir_node . into_inner ()) , Box :: new (other . ir_node . into_inner ()) ,) ,) } } # [cfg (stageleft_macro)] impl < 'a , K , V1 , L : Location < 'a > , B , Order > Stream < (K , V1) , L , B , Order > { pub fn join < V2 , O2 > (self , n : Stream < (K , V2) , L , B , O2 >) -> Stream < (K , (V1 , V2)) , L , B , NoOrder > where K : Eq + Hash , { check_matching_location (& self . location , & n . location) ; Stream :: new (self . location , HfPlusNode :: Join (Box :: new (self . ir_node . into_inner ()) , Box :: new (n . ir_node . into_inner ()) ,) ,) } pub fn anti_join < O2 > (self , n : Stream < K , L , Bounded , O2 >) -> Stream < (K , V1) , L , B , Order > where K : Eq + Hash , { check_matching_location (& self . location , & n . location) ; Stream :: new (self . location , HfPlusNode :: AntiJoin (Box :: new (self . ir_node . into_inner ()) , Box :: new (n . ir_node . into_inner ()) ,) ,) } } # [cfg (stageleft_macro)] impl < 'a , K : Eq + Hash , V , L : Location < 'a > > Stream < (K , V) , Tick < L > , Bounded > { pub fn fold_keyed < A , I : Fn () -> A + 'a , F : Fn (& mut A , V) + 'a > (self , init : impl IntoQuotedMut < 'a , I , Tick < L > > , comb : impl IntoQuotedMut < 'a , F , Tick < L > > ,) -> Stream < (K , A) , Tick < L > , Bounded > { let init = init . splice_fn0_ctx (& self . location) . into () ; let comb = comb . splice_fn2_borrow_mut_ctx (& self . location) . into () ; Stream :: new (self . location , HfPlusNode :: FoldKeyed { init , acc : comb , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn reduce_keyed < F : Fn (& mut V , V) + 'a > (self , comb : impl IntoQuotedMut < 'a , F , Tick < L > > ,) -> Stream < (K , V) , Tick < L > , Bounded > { let f = comb . splice_fn2_borrow_mut_ctx (& self . location) . into () ; Stream :: new (self . location , HfPlusNode :: ReduceKeyed { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } } # [cfg (stageleft_macro)] impl < 'a , K : Eq + Hash , V , L : Location < 'a > , Order > Stream < (K , V) , Tick < L > , Bounded , Order > { pub fn fold_keyed_commutative < A , I : Fn () -> A + 'a , F : Fn (& mut A , V) + 'a > (self , init : impl IntoQuotedMut < 'a , I , Tick < L > > , comb : impl IntoQuotedMut < 'a , F , Tick < L > > ,) -> Stream < (K , A) , Tick < L > , Bounded , Order > { let init = init . splice_fn0_ctx (& self . location) . into () ; let comb = comb . splice_fn2_borrow_mut_ctx (& self . location) . into () ; Stream :: new (self . location , HfPlusNode :: FoldKeyed { init , acc : comb , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn keys (self) -> Stream < K , Tick < L > , Bounded , Order > { self . fold_keyed_commutative (q ! (|| ()) , q ! (| _ , _ | { })) . map (q ! (| (k , _) | k)) } pub fn reduce_keyed_commutative < F : Fn (& mut V , V) + 'a > (self , comb : impl IntoQuotedMut < 'a , F , Tick < L > > ,) -> Stream < (K , V) , Tick < L > , Bounded , Order > { let f = comb . splice_fn2_borrow_mut_ctx (& self . location) . into () ; Stream :: new (self . location , HfPlusNode :: ReduceKeyed { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick , B , Order > Stream < T , Timestamped < L > , B , Order > { # [doc = " Given a tick, returns a stream corresponding to a batch of elements for that tick."] # [doc = " These batches are guaranteed to be contiguous across ticks and preserve the order"] # [doc = " of the input."] # [doc = ""] # [doc = " # Safety"] # [doc = " The batch boundaries are non-deterministic and may change across executions."] pub unsafe fn tick_batch (self) -> Stream < T , Tick < L > , Bounded , Order > { Stream :: new (self . location . tick , HfPlusNode :: Unpersist (Box :: new (self . ir_node . into_inner ())) ,) } pub fn drop_timestamp (self) -> Stream < T , L , B , Order > { Stream :: new (self . location . tick . l , self . ir_node . into_inner ()) } pub fn timestamp_source (& self) -> Tick < L > { self . location . tick . clone () } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick + NoTimestamp , B , Order > Stream < T , L , B , Order > { pub fn timestamped (self , tick : & Tick < L >) -> Stream < T , Timestamped < L > , B , Order > { Stream :: new (Timestamped { tick : tick . clone () } , self . ir_node . into_inner () ,) } # [doc = " Given a time interval, returns a stream corresponding to samples taken from the"] # [doc = " stream roughly at that interval. The output will have elements in the same order"] # [doc = " as the input, but with arbitrary elements skipped between samples. There is also"] # [doc = " no guarantee on the exact timing of the samples."] # [doc = ""] # [doc = " # Safety"] # [doc = " The output stream is non-deterministic in which elements are sampled, since this"] # [doc = " is controlled by a clock."] pub unsafe fn sample_every (self , interval : impl QuotedWithContext < 'a , std :: time :: Duration , L > + Copy + 'a ,) -> Stream < T , L , Unbounded , Order > { let samples = unsafe { self . location . source_interval (interval) } ; let tick = self . location . tick () ; unsafe { self . timestamped (& tick) . tick_batch () . continue_if (samples . timestamped (& tick) . tick_batch () . first ()) . all_ticks () . drop_timestamp () } } # [doc = " Given a timeout duration, returns an [`Optional`]  which will have a value if the"] # [doc = " stream has not emitted a value since that duration."] # [doc = ""] # [doc = " # Safety"] # [doc = " Timeout relies on non-deterministic sampling of the stream, so depending on when"] # [doc = " samples take place, timeouts may be non-deterministically generated or missed,"] # [doc = " and the notification of the timeout may be delayed as well. There is also no"] # [doc = " guarantee on how long the [`Optional`] will have a value after the timeout is"] # [doc = " detected based on when the next sample is taken."] pub unsafe fn timeout (self , duration : impl QuotedWithContext < 'a , std :: time :: Duration , Tick < L > > + Copy + 'a ,) -> Optional < () , L , Unbounded > where Order : MinOrder < NoOrder , Min = NoOrder > , { let tick = self . location . tick () ; let latest_received = self . fold_commutative (q ! (|| None) , q ! (| latest , _ | { * latest = Some (Instant :: now ()) ; }) ,) ; unsafe { latest_received . timestamped (& tick) . latest_tick () } . filter_map (q ! (move | latest_received | { if let Some (latest_received) = latest_received { if Instant :: now () . duration_since (latest_received) > duration { Some (()) } else { None } } else { Some (()) } })) . latest () . drop_timestamp () } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick , B , Order > Stream < T , L , B , Order > { pub fn for_each < F : Fn (T) + 'a > (self , f : impl IntoQuotedMut < 'a , F , L >) { let f = f . splice_fn1_ctx (& self . location) . into () ; self . location . flow_state () . borrow_mut () . leaves . as_mut () . expect (FLOW_USED_MESSAGE) . push (HfPlusLeaf :: ForEach { input : Box :: new (HfPlusNode :: Unpersist (Box :: new (self . ir_node . into_inner ()))) , f , }) ; } pub fn dest_sink < S : Unpin + futures :: Sink < T > + 'a > (self , sink : impl QuotedWithContext < 'a , S , L > ,) { self . location . flow_state () . borrow_mut () . leaves . as_mut () . expect (FLOW_USED_MESSAGE) . push (HfPlusLeaf :: DestSink { sink : sink . splice_typed_ctx (& self . location) . into () , input : Box :: new (self . ir_node . into_inner ()) , }) ; } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , Order > Stream < T , Tick < L > , Bounded , Order > { pub fn all_ticks (self) -> Stream < T , Timestamped < L > , Unbounded , Order > { Stream :: new (Timestamped { tick : self . location . clone () , } , HfPlusNode :: Persist (Box :: new (self . ir_node . into_inner ())) ,) } pub fn persist (self) -> Stream < T , Tick < L > , Bounded , Order > where T : Clone , { Stream :: new (self . location , HfPlusNode :: Persist (Box :: new (self . ir_node . into_inner ())) ,) } pub fn defer_tick (self) -> Stream < T , Tick < L > , Bounded , Order > { Stream :: new (self . location , HfPlusNode :: DeferTick (Box :: new (self . ir_node . into_inner ())) ,) } pub fn delta (self) -> Stream < T , Tick < L > , Bounded , Order > { Stream :: new (self . location , HfPlusNode :: Delta (Box :: new (self . ir_node . into_inner ())) ,) } } pub fn serialize_bincode < T : Serialize > (is_demux : bool) -> syn :: Expr { let root = get_this_crate () ; let t_type : syn :: Type = stageleft :: quote_type :: < T > () ; if is_demux { parse_quote ! { | (id , data) : (# root :: ClusterId < _ >, # t_type) | { (id . raw_id , # root :: runtime_support :: bincode :: serialize ::<# t_type > (& data) . unwrap () . into ()) } } } else { parse_quote ! { | data | { # root :: runtime_support :: bincode :: serialize ::<# t_type > (& data) . unwrap () . into () } } } } pub fn deserialize_bincode < T : DeserializeOwned > (tagged : Option < syn :: Type >) -> syn :: Expr { let root = get_this_crate () ; let t_type : syn :: Type = stageleft :: quote_type :: < T > () ; if let Some (c_type) = tagged { parse_quote ! { | res | { let (id , b) = res . unwrap () ; (# root :: ClusterId ::<# c_type >:: from_raw (id) , # root :: runtime_support :: bincode :: deserialize ::<# t_type > (& b) . unwrap ()) } } } else { parse_quote ! { | res | { # root :: runtime_support :: bincode :: deserialize ::<# t_type > (& res . unwrap ()) . unwrap () } } } } # [cfg (stageleft_macro)] impl < 'a , T , C1 , B , Order > Stream < T , Cluster < 'a , C1 > , B , Order > { pub fn decouple_cluster < C2 : 'a , Tag > (self , other : & Cluster < 'a , C2 > ,) -> Stream < T , Cluster < 'a , C2 > , Unbounded , Order > where Cluster < 'a , C1 > : Location < 'a , Root = Cluster < 'a , C1 > > , Cluster < 'a , C1 > : CanSend < 'a , Cluster < 'a , C2 > , In < T > = (ClusterId < C2 > , T) , Out < T > = (Tag , T) > , T : Clone + Serialize + DeserializeOwned , Order : MinOrder < < Cluster < 'a , C1 > as CanSend < 'a , Cluster < 'a , C2 > > > :: OutStrongestOrder < Order > > , { let sent = self . map (q ! (move | b | (ClusterId :: from_raw (CLUSTER_SELF_ID . raw_id) , b . clone ()))) . send_bincode_interleaved (other) ; unsafe { sent . assume_ordering () } } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick , B , Order > Stream < T , L , B , Order > { pub fn decouple_process < P2 > (self , other : & Process < 'a , P2 > ,) -> Stream < T , Process < 'a , P2 > , Unbounded , Order > where L :: Root : CanSend < 'a , Process < 'a , P2 > , In < T > = T , Out < T > = T > , T : Clone + Serialize + DeserializeOwned , Order : MinOrder < < L :: Root as CanSend < 'a , Process < 'a , P2 > > > :: OutStrongestOrder < Order > , Min = Order , > , { self . send_bincode :: < Process < 'a , P2 > , T > (other) } pub fn send_bincode < L2 : Location < 'a > , CoreType > (self , other : & L2 ,) -> Stream < < L :: Root as CanSend < 'a , L2 > > :: Out < CoreType > , L2 , Unbounded , Order :: Min > where L :: Root : CanSend < 'a , L2 , In < CoreType > = T > , CoreType : Serialize + DeserializeOwned , Order : MinOrder < < L :: Root as CanSend < 'a , L2 > > :: OutStrongestOrder < Order > > , { let serialize_pipeline = Some (serialize_bincode :: < CoreType > (L :: Root :: is_demux ())) ; let deserialize_pipeline = Some (deserialize_bincode :: < CoreType > (L :: Root :: tagged_type ())) ; Stream :: new (other . clone () , HfPlusNode :: Network { from_location : self . location . root () . id () , from_key : None , to_location : other . id () , to_key : None , serialize_fn : serialize_pipeline . map (| e | e . into ()) , instantiate_fn : DebugInstantiate :: Building () , deserialize_fn : deserialize_pipeline . map (| e | e . into ()) , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn send_bincode_external < L2 : 'a , CoreType > (self , other : & ExternalProcess < L2 > ,) -> ExternalBincodeStream < L :: Out < CoreType > > where L : CanSend < 'a , ExternalProcess < 'a , L2 > , In < CoreType > = T , Out < CoreType > = CoreType > , CoreType : Serialize + DeserializeOwned , { let serialize_pipeline = Some (serialize_bincode :: < CoreType > (L :: is_demux ())) ; let mut flow_state_borrow = self . location . flow_state () . borrow_mut () ; let external_key = flow_state_borrow . next_external_out ; flow_state_borrow . next_external_out += 1 ; let leaves = flow_state_borrow . leaves . as_mut () . expect ("Attempted to add a leaf to a flow that has already been finalized. No leaves can be added after the flow has been compiled()") ; let dummy_f : syn :: Expr = syn :: parse_quote ! (()) ; leaves . push (HfPlusLeaf :: ForEach { f : dummy_f . into () , input : Box :: new (HfPlusNode :: Network { from_location : self . location . root () . id () , from_key : None , to_location : other . id () , to_key : Some (external_key) , serialize_fn : serialize_pipeline . map (| e | e . into ()) , instantiate_fn : DebugInstantiate :: Building () , deserialize_fn : None , input : Box :: new (self . ir_node . into_inner ()) , }) , }) ; ExternalBincodeStream { process_id : other . id , port_id : external_key , _phantom : PhantomData , } } pub fn send_bytes < L2 : Location < 'a > > (self , other : & L2 ,) -> Stream < < L :: Root as CanSend < 'a , L2 > > :: Out < Bytes > , L2 , Unbounded , Order :: Min > where L :: Root : CanSend < 'a , L2 , In < Bytes > = T > , Order : MinOrder < < L :: Root as CanSend < 'a , L2 > > :: OutStrongestOrder < Order > > , { let root = get_this_crate () ; Stream :: new (other . clone () , HfPlusNode :: Network { from_location : self . location . root () . id () , from_key : None , to_location : other . id () , to_key : None , serialize_fn : None , instantiate_fn : DebugInstantiate :: Building () , deserialize_fn : if let Some (c_type) = L :: Root :: tagged_type () { let expr : syn :: Expr = parse_quote ! (| (id , b) | (# root :: ClusterId <# c_type >:: from_raw (id) , b . unwrap () . freeze ())) ; Some (expr . into ()) } else { let expr : syn :: Expr = parse_quote ! (| b | b . unwrap () . freeze ()) ; Some (expr . into ()) } , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn send_bytes_external < L2 : 'a > (self , other : & ExternalProcess < L2 >) -> ExternalBytesPort where L :: Root : CanSend < 'a , ExternalProcess < 'a , L2 > , In < Bytes > = T , Out < Bytes > = Bytes > , { let mut flow_state_borrow = self . location . flow_state () . borrow_mut () ; let external_key = flow_state_borrow . next_external_out ; flow_state_borrow . next_external_out += 1 ; let leaves = flow_state_borrow . leaves . as_mut () . expect ("Attempted to add a leaf to a flow that has already been finalized. No leaves can be added after the flow has been compiled()") ; let dummy_f : syn :: Expr = syn :: parse_quote ! (()) ; leaves . push (HfPlusLeaf :: ForEach { f : dummy_f . into () , input : Box :: new (HfPlusNode :: Network { from_location : self . location . root () . id () , from_key : None , to_location : other . id () , to_key : Some (external_key) , serialize_fn : None , instantiate_fn : DebugInstantiate :: Building () , deserialize_fn : None , input : Box :: new (self . ir_node . into_inner ()) , }) , }) ; ExternalBytesPort { process_id : other . id , port_id : external_key , } } pub fn send_bincode_interleaved < L2 : Location < 'a > , Tag , CoreType > (self , other : & L2 ,) -> Stream < CoreType , L2 , Unbounded , Order :: Min > where L :: Root : CanSend < 'a , L2 , In < CoreType > = T , Out < CoreType > = (Tag , CoreType) > , CoreType : Serialize + DeserializeOwned , Order : MinOrder < < L :: Root as CanSend < 'a , L2 > > :: OutStrongestOrder < Order > > , { self . send_bincode :: < L2 , CoreType > (other) . map (q ! (| (_ , b) | b)) } pub fn send_bytes_interleaved < L2 : Location < 'a > , Tag > (self , other : & L2 ,) -> Stream < Bytes , L2 , Unbounded , Order :: Min > where L :: Root : CanSend < 'a , L2 , In < Bytes > = T , Out < Bytes > = (Tag , Bytes) > , Order : MinOrder < < L :: Root as CanSend < 'a , L2 > > :: OutStrongestOrder < Order > > , { self . send_bytes :: < L2 > (other) . map (q ! (| (_ , b) | b)) } # [expect (clippy :: type_complexity , reason = "ordering semantics for broadcast")] pub fn broadcast_bincode < C2 : 'a > (self , other : & Cluster < 'a , C2 > ,) -> Stream < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: Out < T > , Cluster < 'a , C2 > , Unbounded , Order :: Min , > where L :: Root : CanSend < 'a , Cluster < 'a , C2 > , In < T > = (ClusterId < C2 > , T) > , T : Clone + Serialize + DeserializeOwned , Order : MinOrder < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: OutStrongestOrder < Order > > , { let ids = other . members () ; self . flat_map_ordered (q ! (| b | ids . iter () . map (move | id | (:: std :: clone :: Clone :: clone (id) , :: std :: clone :: Clone :: clone (& b))))) . send_bincode (other) } pub fn broadcast_bincode_interleaved < C2 : 'a , Tag > (self , other : & Cluster < 'a , C2 > ,) -> Stream < T , Cluster < 'a , C2 > , Unbounded , Order :: Min > where L :: Root : CanSend < 'a , Cluster < 'a , C2 > , In < T > = (ClusterId < C2 > , T) , Out < T > = (Tag , T) > + 'a , T : Clone + Serialize + DeserializeOwned , Order : MinOrder < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: OutStrongestOrder < Order > > , { self . broadcast_bincode (other) . map (q ! (| (_ , b) | b)) } # [expect (clippy :: type_complexity , reason = "ordering semantics for broadcast")] pub fn broadcast_bytes < C2 : 'a > (self , other : & Cluster < 'a , C2 > ,) -> Stream < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: Out < Bytes > , Cluster < 'a , C2 > , Unbounded , Order :: Min , > where L :: Root : CanSend < 'a , Cluster < 'a , C2 > , In < Bytes > = (ClusterId < C2 > , T) > + 'a , T : Clone , Order : MinOrder < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: OutStrongestOrder < Order > > , { let ids = other . members () ; self . flat_map_ordered (q ! (| b | ids . iter () . map (move | id | (:: std :: clone :: Clone :: clone (id) , :: std :: clone :: Clone :: clone (& b))))) . send_bytes (other) } pub fn broadcast_bytes_interleaved < C2 : 'a , Tag > (self , other : & Cluster < 'a , C2 > ,) -> Stream < Bytes , Cluster < 'a , C2 > , Unbounded , Order :: Min > where L :: Root : CanSend < 'a , Cluster < 'a , C2 > , In < Bytes > = (ClusterId < C2 > , T) , Out < Bytes > = (Tag , Bytes) > + 'a , T : Clone , Order : MinOrder < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: OutStrongestOrder < Order > > , { self . broadcast_bytes (other) . map (q ! (| (_ , b) | b)) } } # [cfg (stageleft_macro)] # [expect (clippy :: type_complexity , reason = "ordering semantics for round-robin")] impl < 'a , T , L : Location < 'a > + NoTick , B > Stream < T , L , B , TotalOrder > { pub fn round_robin_bincode < C2 : 'a > (self , other : & Cluster < 'a , C2 > ,) -> Stream < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: Out < T > , Cluster < 'a , C2 > , Unbounded , < TotalOrder as MinOrder < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: OutStrongestOrder < TotalOrder > , > > :: Min , > where L :: Root : CanSend < 'a , Cluster < 'a , C2 > , In < T > = (ClusterId < C2 > , T) > , T : Clone + Serialize + DeserializeOwned , TotalOrder : MinOrder < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: OutStrongestOrder < TotalOrder > > , { let ids = other . members () ; self . enumerate () . map (q ! (| (i , w) | (ids [i % ids . len ()] , w))) . send_bincode (other) } pub fn round_robin_bincode_interleaved < C2 : 'a , Tag > (self , other : & Cluster < 'a , C2 > ,) -> Stream < T , Cluster < 'a , C2 > , Unbounded , < TotalOrder as MinOrder < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: OutStrongestOrder < TotalOrder > , > > :: Min , > where L :: Root : CanSend < 'a , Cluster < 'a , C2 > , In < T > = (ClusterId < C2 > , T) , Out < T > = (Tag , T) > + 'a , T : Clone + Serialize + DeserializeOwned , TotalOrder : MinOrder < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: OutStrongestOrder < TotalOrder > > , { self . round_robin_bincode (other) . map (q ! (| (_ , b) | b)) } pub fn round_robin_bytes < C2 : 'a > (self , other : & Cluster < 'a , C2 > ,) -> Stream < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: Out < Bytes > , Cluster < 'a , C2 > , Unbounded , < TotalOrder as MinOrder < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: OutStrongestOrder < TotalOrder > , > > :: Min , > where L :: Root : CanSend < 'a , Cluster < 'a , C2 > , In < Bytes > = (ClusterId < C2 > , T) > + 'a , T : Clone , TotalOrder : MinOrder < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: OutStrongestOrder < TotalOrder > > , { let ids = other . members () ; self . enumerate () . map (q ! (| (i , w) | (ids [i % ids . len ()] , w))) . send_bytes (other) } pub fn round_robin_bytes_interleaved < C2 : 'a , Tag > (self , other : & Cluster < 'a , C2 > ,) -> Stream < Bytes , Cluster < 'a , C2 > , Unbounded , < TotalOrder as MinOrder < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: OutStrongestOrder < TotalOrder > , > > :: Min , > where L :: Root : CanSend < 'a , Cluster < 'a , C2 > , In < Bytes > = (ClusterId < C2 > , T) , Out < Bytes > = (Tag , Bytes) > + 'a , T : Clone , TotalOrder : MinOrder < < L :: Root as CanSend < 'a , Cluster < 'a , C2 > > > :: OutStrongestOrder < TotalOrder > > , { self . round_robin_bytes (other) . map (q ! (| (_ , b) | b)) } } # [cfg (stageleft_macro)] pub mod tests { pub use hydro_deploy :: Deployment ; pub use hydroflow :: futures :: StreamExt ; pub use serde :: { Deserialize , Serialize } ; pub use stageleft :: q ; pub use crate :: __staged :: location :: Location ; pub use crate :: __staged :: FlowBuilder ; pub struct P1 { } pub struct P2 { } # [derive (Serialize , Deserialize , Debug)] pub struct SendOverNetwork { pub n : u32 , } # [tokio :: test] pub async fn first_ten_distributed () { let mut deployment = Deployment :: new () ; let flow = FlowBuilder :: new () ; let first_node = flow . process :: < P1 > () ; let second_node = flow . process :: < P2 > () ; let external = flow . external_process :: < P2 > () ; let numbers = first_node . source_iter (q ! (0 .. 10)) ; let out_port = numbers . map (q ! (| n | SendOverNetwork { n })) . send_bincode (& second_node) . send_bincode_external (& external) ; let nodes = flow . with_process (& first_node , deployment . Localhost ()) . with_process (& second_node , deployment . Localhost ()) . with_external (& external , deployment . Localhost ()) . deploy (& mut deployment) ; deployment . deploy () . await . unwrap () ; let mut external_out = nodes . connect_source_bincode (out_port) . await ; deployment . start () . await . unwrap () ; for i in 0 .. 10 { assert_eq ! (external_out . next () . await . unwrap () . n , i) ; } } } } pub use stream :: { NoOrder , Stream , TotalOrder } ; pub mod singleton { pub use std :: cell :: RefCell ; pub use std :: marker :: PhantomData ; pub use std :: ops :: Deref ; pub use std :: rc :: Rc ; pub use stageleft :: { q , IntoQuotedMut , QuotedWithContext } ; pub use crate :: __staged :: builder :: FLOW_USED_MESSAGE ; pub use crate :: __staged :: cycle :: { CycleCollection , CycleCollectionWithInitial , CycleComplete , DeferTick , ForwardRefMarker , TickCycleMarker , } ; pub use crate :: __staged :: ir :: { HfPlusLeaf , HfPlusNode , TeeNode } ; pub use crate :: __staged :: location :: tick :: { NoTimestamp , Timestamped } ; pub use crate :: __staged :: location :: { check_matching_location , Location , LocationId , NoTick , Tick } ; pub use crate :: __staged :: { Bounded , Optional , Stream , Unbounded } ; pub use crate :: singleton :: Singleton ; # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , B > Singleton < T , L , B > { pub (crate) fn new (location : L , ir_node : HfPlusNode) -> Self { Singleton { location , ir_node : RefCell :: new (ir_node) , _phantom : PhantomData , } } fn location_kind (& self) -> LocationId { self . location . id () } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > From < Singleton < T , L , Bounded > > for Singleton < T , L , Unbounded > { fn from (singleton : Singleton < T , L , Bounded >) -> Self { Singleton :: new (singleton . location , singleton . ir_node . into_inner ()) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > DeferTick for Singleton < T , Tick < L > , Bounded > { fn defer_tick (self) -> Self { Singleton :: defer_tick (self) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > CycleCollectionWithInitial < 'a , TickCycleMarker > for Singleton < T , Tick < L > , Bounded > { type Location = Tick < L > ; fn create_source (ident : syn :: Ident , initial : Self , location : Tick < L >) -> Self { let location_id = location . id () ; Singleton :: new (location , HfPlusNode :: Chain (Box :: new (HfPlusNode :: CycleSource { ident , location_kind : location_id , }) , initial . ir_node . into_inner () . into () ,) ,) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > CycleComplete < 'a , TickCycleMarker > for Singleton < T , Tick < L > , Bounded > { fn complete (self , ident : syn :: Ident , expected_location : LocationId) { assert_eq ! (self . location . id () , expected_location , "locations do not match") ; self . location . flow_state () . borrow_mut () . leaves . as_mut () . expect (FLOW_USED_MESSAGE) . push (HfPlusLeaf :: CycleSink { ident , location_kind : self . location_kind () , input : Box :: new (self . ir_node . into_inner ()) , }) ; } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > CycleCollection < 'a , ForwardRefMarker > for Singleton < T , Tick < L > , Bounded > { type Location = Tick < L > ; fn create_source (ident : syn :: Ident , location : Tick < L >) -> Self { let location_id = location . id () ; Singleton :: new (location , HfPlusNode :: CycleSource { ident , location_kind : location_id , } ,) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > CycleComplete < 'a , ForwardRefMarker > for Singleton < T , Tick < L > , Bounded > { fn complete (self , ident : syn :: Ident , expected_location : LocationId) { assert_eq ! (self . location . id () , expected_location , "locations do not match") ; self . location . flow_state () . borrow_mut () . leaves . as_mut () . expect (FLOW_USED_MESSAGE) . push (HfPlusLeaf :: CycleSink { ident , location_kind : self . location_kind () , input : Box :: new (self . ir_node . into_inner ()) , }) ; } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick , B > CycleCollection < 'a , ForwardRefMarker > for Singleton < T , L , B > { type Location = L ; fn create_source (ident : syn :: Ident , location : L) -> Self { let location_id = location . id () ; Singleton :: new (location , HfPlusNode :: Persist (Box :: new (HfPlusNode :: CycleSource { ident , location_kind : location_id , })) ,) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick , B > CycleComplete < 'a , ForwardRefMarker > for Singleton < T , L , B > { fn complete (self , ident : syn :: Ident , expected_location : LocationId) { assert_eq ! (self . location . id () , expected_location , "locations do not match") ; self . location . flow_state () . borrow_mut () . leaves . as_mut () . expect (FLOW_USED_MESSAGE) . push (HfPlusLeaf :: CycleSink { ident , location_kind : self . location_kind () , input : Box :: new (HfPlusNode :: Unpersist (Box :: new (self . ir_node . into_inner ()))) , }) ; } } # [cfg (stageleft_macro)] impl < 'a , T : Clone , L : Location < 'a > , B > Clone for Singleton < T , L , B > { fn clone (& self) -> Self { if ! matches ! (self . ir_node . borrow () . deref () , HfPlusNode :: Tee { .. }) { let orig_ir_node = self . ir_node . replace (HfPlusNode :: Placeholder) ; * self . ir_node . borrow_mut () = HfPlusNode :: Tee { inner : TeeNode (Rc :: new (RefCell :: new (orig_ir_node))) , } ; } if let HfPlusNode :: Tee { inner } = self . ir_node . borrow () . deref () { Singleton { location : self . location . clone () , ir_node : HfPlusNode :: Tee { inner : TeeNode (inner . 0 . clone ()) , } . into () , _phantom : PhantomData , } } else { unreachable ! () } } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , B > Singleton < T , L , B > { pub fn map < U , F : Fn (T) -> U + 'a > (self , f : impl IntoQuotedMut < 'a , F , L >) -> Singleton < U , L , B > { let f = f . splice_fn1_ctx (& self . location) . into () ; Singleton :: new (self . location , HfPlusNode :: Map { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn flat_map_ordered < U , I : IntoIterator < Item = U > , F : Fn (T) -> I + 'a > (self , f : impl IntoQuotedMut < 'a , F , L > ,) -> Stream < U , L , B > { let f = f . splice_fn1_ctx (& self . location) . into () ; Stream :: new (self . location , HfPlusNode :: FlatMap { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn flat_map_unordered < U , I : IntoIterator < Item = U > , F : Fn (T) -> I + 'a > (self , f : impl IntoQuotedMut < 'a , F , L > ,) -> Stream < U , L , B > { let f = f . splice_fn1_ctx (& self . location) . into () ; Stream :: new (self . location , HfPlusNode :: FlatMap { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn filter < F : Fn (& T) -> bool + 'a > (self , f : impl IntoQuotedMut < 'a , F , L > ,) -> Optional < T , L , B > { let f = f . splice_fn1_borrow_ctx (& self . location) . into () ; Optional :: new (self . location , HfPlusNode :: Filter { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn filter_map < U , F : Fn (T) -> Option < U > + 'a > (self , f : impl IntoQuotedMut < 'a , F , L > ,) -> Optional < U , L , B > { let f = f . splice_fn1_ctx (& self . location) . into () ; Optional :: new (self . location , HfPlusNode :: FilterMap { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn zip < Other > (self , other : Other) -> < Self as ZipResult < 'a , Other > > :: Out where Self : ZipResult < 'a , Other , Location = L > , { check_matching_location (& self . location , & Self :: other_location (& other)) ; if L :: is_top_level () { Self :: make (self . location , HfPlusNode :: Persist (Box :: new (HfPlusNode :: CrossSingleton (Box :: new (HfPlusNode :: Unpersist (Box :: new (self . ir_node . into_inner ()))) , Box :: new (HfPlusNode :: Unpersist (Box :: new (Self :: other_ir_node (other)))) ,))) ,) } else { Self :: make (self . location , HfPlusNode :: CrossSingleton (Box :: new (self . ir_node . into_inner ()) , Box :: new (Self :: other_ir_node (other)) ,) ,) } } pub fn continue_if < U > (self , signal : Optional < U , L , Bounded >) -> Optional < T , L , Bounded > where Self : ZipResult < 'a , Optional < () , L , Bounded > , Location = L , Out = Optional < (T , ()) , L , Bounded > , > , { self . zip (signal . map (q ! (| _u | ()))) . map (q ! (| (d , _signal) | d)) } pub fn continue_unless < U > (self , other : Optional < U , L , Bounded >) -> Optional < T , L , Bounded > where Singleton < T , L , B > : ZipResult < 'a , Optional < () , L , Bounded > , Location = L , Out = Optional < (T , ()) , L , Bounded > , > , { self . continue_if (other . into_stream () . count () . filter (q ! (| c | * c == 0))) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick , B > Singleton < T , Timestamped < L > , B > { # [doc = " Given a tick, returns a singleton value corresponding to a snapshot of the singleton"] # [doc = " as of that tick. The snapshot at tick `t + 1` is guaranteed to include at least all"] # [doc = " relevant data that contributed to the snapshot at tick `t`."] # [doc = ""] # [doc = " # Safety"] # [doc = " Because this picks a snapshot of a singleton whose value is continuously changing,"] # [doc = " the output singleton has a non-deterministic value since the snapshot can be at an"] # [doc = " arbitrary point in time."] pub unsafe fn latest_tick (self) -> Singleton < T , Tick < L > , Bounded > { Singleton :: new (self . location . tick , HfPlusNode :: Unpersist (Box :: new (self . ir_node . into_inner ())) ,) } pub fn drop_timestamp (self) -> Optional < T , L , B > { Optional :: new (self . location . tick . l , self . ir_node . into_inner ()) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick , B > Singleton < T , L , B > { pub fn timestamped (self , tick : & Tick < L >) -> Singleton < T , Timestamped < L > , B > { Singleton :: new (Timestamped { tick : tick . clone () } , self . ir_node . into_inner () ,) } # [doc = " Eagerly samples the singleton as fast as possible, returning a stream of snapshots"] # [doc = " with order corresponding to increasing prefixes of data contributing to the singleton."] # [doc = ""] # [doc = " # Safety"] # [doc = " At runtime, the singleton will be arbitrarily sampled as fast as possible, but due"] # [doc = " to non-deterministic batching and arrival of inputs, the output stream is"] # [doc = " non-deterministic."] pub unsafe fn sample_eager (self) -> Stream < T , L , Unbounded > { let tick = self . location . tick () ; unsafe { self . timestamped (& tick) . latest_tick () . all_ticks () . drop_timestamp () } } # [doc = " Given a time interval, returns a stream corresponding to snapshots of the singleton"] # [doc = " value taken at various points in time. Because the input singleton may be"] # [doc = " [`Unbounded`], there are no guarantees on what these snapshots are other than they"] # [doc = " represent the value of the singleton given some prefix of the streams leading up to"] # [doc = " it."] # [doc = ""] # [doc = " # Safety"] # [doc = " The output stream is non-deterministic in which elements are sampled, since this"] # [doc = " is controlled by a clock."] pub unsafe fn sample_every (self , interval : impl QuotedWithContext < 'a , std :: time :: Duration , L > + Copy + 'a ,) -> Stream < T , L , Unbounded > where L : NoTimestamp , { let samples = unsafe { self . location . source_interval (interval) } ; let tick = self . location . tick () ; unsafe { self . timestamped (& tick) . latest_tick () . continue_if (samples . timestamped (& tick) . tick_batch () . first ()) . all_ticks () . drop_timestamp () } } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > Singleton < T , Tick < L > , Bounded > { pub fn all_ticks (self) -> Stream < T , Timestamped < L > , Unbounded > { Stream :: new (Timestamped { tick : self . location , } , HfPlusNode :: Persist (Box :: new (self . ir_node . into_inner ())) ,) } pub fn latest (self) -> Singleton < T , Timestamped < L > , Unbounded > { Singleton :: new (Timestamped { tick : self . location , } , HfPlusNode :: Persist (Box :: new (self . ir_node . into_inner ())) ,) } pub fn defer_tick (self) -> Singleton < T , Tick < L > , Bounded > { Singleton :: new (self . location , HfPlusNode :: DeferTick (Box :: new (self . ir_node . into_inner ())) ,) } pub fn persist (self) -> Stream < T , Tick < L > , Bounded > { Stream :: new (self . location , HfPlusNode :: Persist (Box :: new (self . ir_node . into_inner ())) ,) } pub fn delta (self) -> Optional < T , Tick < L > , Bounded > { Optional :: new (self . location , HfPlusNode :: Delta (Box :: new (self . ir_node . into_inner ())) ,) } pub fn into_stream (self) -> Stream < T , Tick < L > , Bounded > { Stream :: new (self . location , self . ir_node . into_inner ()) } } pub use crate :: singleton :: ZipResult ; # [cfg (stageleft_macro)] impl < 'a , T , U : Clone , L : Location < 'a > , B > ZipResult < 'a , Singleton < U , Timestamped < L > , B > > for Singleton < T , Timestamped < L > , B > { type Out = Singleton < (T , U) , Timestamped < L > , B > ; type Location = Timestamped < L > ; fn other_location (other : & Singleton < U , Timestamped < L > , B >) -> Timestamped < L > { other . location . clone () } fn other_ir_node (other : Singleton < U , Timestamped < L > , B >) -> HfPlusNode { other . ir_node . into_inner () } fn make (location : Timestamped < L > , ir_node : HfPlusNode) -> Self :: Out { Singleton :: new (location , ir_node) } } # [cfg (stageleft_macro)] impl < 'a , T , U : Clone , L : Location < 'a > , B > ZipResult < 'a , Optional < U , Timestamped < L > , B > > for Singleton < T , Timestamped < L > , B > { type Out = Optional < (T , U) , Timestamped < L > , B > ; type Location = Timestamped < L > ; fn other_location (other : & Optional < U , Timestamped < L > , B >) -> Timestamped < L > { other . location . clone () } fn other_ir_node (other : Optional < U , Timestamped < L > , B >) -> HfPlusNode { other . ir_node . into_inner () } fn make (location : Timestamped < L > , ir_node : HfPlusNode) -> Self :: Out { Optional :: new (location , ir_node) } } # [cfg (stageleft_macro)] impl < 'a , T , U : Clone , L : Location < 'a > , B > ZipResult < 'a , Singleton < U , Tick < L > , B > > for Singleton < T , Tick < L > , B > { type Out = Singleton < (T , U) , Tick < L > , B > ; type Location = Tick < L > ; fn other_location (other : & Singleton < U , Tick < L > , B >) -> Tick < L > { other . location . clone () } fn other_ir_node (other : Singleton < U , Tick < L > , B >) -> HfPlusNode { other . ir_node . into_inner () } fn make (location : Tick < L > , ir_node : HfPlusNode) -> Self :: Out { Singleton :: new (location , ir_node) } } # [cfg (stageleft_macro)] impl < 'a , T , U : Clone , L : Location < 'a > , B > ZipResult < 'a , Optional < U , Tick < L > , B > > for Singleton < T , Tick < L > , B > { type Out = Optional < (T , U) , Tick < L > , B > ; type Location = Tick < L > ; fn other_location (other : & Optional < U , Tick < L > , B >) -> Tick < L > { other . location . clone () } fn other_ir_node (other : Optional < U , Tick < L > , B >) -> HfPlusNode { other . ir_node . into_inner () } fn make (location : Tick < L > , ir_node : HfPlusNode) -> Self :: Out { Optional :: new (location , ir_node) } } } pub use singleton :: Singleton ; pub mod optional { pub use std :: cell :: RefCell ; pub use std :: marker :: PhantomData ; pub use std :: ops :: Deref ; pub use std :: rc :: Rc ; pub use stageleft :: { q , IntoQuotedMut , QuotedWithContext } ; pub use syn :: parse_quote ; pub use crate :: __staged :: builder :: FLOW_USED_MESSAGE ; pub use crate :: __staged :: cycle :: { CycleCollection , CycleComplete , DeferTick , ForwardRefMarker , TickCycleMarker } ; pub use crate :: __staged :: ir :: { HfPlusLeaf , HfPlusNode , HfPlusSource , TeeNode } ; pub use crate :: __staged :: location :: tick :: { NoTimestamp , Timestamped } ; pub use crate :: __staged :: location :: { check_matching_location , LocationId , NoTick } ; pub use crate :: __staged :: singleton :: ZipResult ; pub use crate :: __staged :: stream :: NoOrder ; pub use crate :: __staged :: { Bounded , Location , Singleton , Stream , Tick , Unbounded } ; pub use crate :: optional :: Optional ; # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , B > Optional < T , L , B > { pub (crate) fn new (location : L , ir_node : HfPlusNode) -> Self { Optional { location , ir_node : RefCell :: new (ir_node) , _phantom : PhantomData , } } pub fn some (singleton : Singleton < T , L , B >) -> Self { Optional :: new (singleton . location , singleton . ir_node . into_inner ()) } fn location_kind (& self) -> LocationId { self . location . id () } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > DeferTick for Optional < T , Tick < L > , Bounded > { fn defer_tick (self) -> Self { Optional :: defer_tick (self) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > CycleCollection < 'a , TickCycleMarker > for Optional < T , Tick < L > , Bounded > { type Location = Tick < L > ; fn create_source (ident : syn :: Ident , location : Tick < L >) -> Self { let location_id = location . id () ; Optional :: new (location , HfPlusNode :: CycleSource { ident , location_kind : location_id , } ,) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > CycleComplete < 'a , TickCycleMarker > for Optional < T , Tick < L > , Bounded > { fn complete (self , ident : syn :: Ident , expected_location : LocationId) { assert_eq ! (self . location . id () , expected_location , "locations do not match") ; self . location . flow_state () . borrow_mut () . leaves . as_mut () . expect (FLOW_USED_MESSAGE) . push (HfPlusLeaf :: CycleSink { ident , location_kind : self . location_kind () , input : Box :: new (self . ir_node . into_inner ()) , }) ; } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > CycleCollection < 'a , ForwardRefMarker > for Optional < T , Tick < L > , Bounded > { type Location = Tick < L > ; fn create_source (ident : syn :: Ident , location : Tick < L >) -> Self { let location_id = location . id () ; Optional :: new (location , HfPlusNode :: CycleSource { ident , location_kind : location_id , } ,) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > CycleComplete < 'a , ForwardRefMarker > for Optional < T , Tick < L > , Bounded > { fn complete (self , ident : syn :: Ident , expected_location : LocationId) { assert_eq ! (self . location . id () , expected_location , "locations do not match") ; self . location . flow_state () . borrow_mut () . leaves . as_mut () . expect (FLOW_USED_MESSAGE) . push (HfPlusLeaf :: CycleSink { ident , location_kind : self . location_kind () , input : Box :: new (self . ir_node . into_inner ()) , }) ; } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick , B > CycleCollection < 'a , ForwardRefMarker > for Optional < T , L , B > { type Location = L ; fn create_source (ident : syn :: Ident , location : L) -> Self { let location_id = location . id () ; Optional :: new (location , HfPlusNode :: Persist (Box :: new (HfPlusNode :: CycleSource { ident , location_kind : location_id , })) ,) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick , B > CycleComplete < 'a , ForwardRefMarker > for Optional < T , L , B > { fn complete (self , ident : syn :: Ident , expected_location : LocationId) { assert_eq ! (self . location . id () , expected_location , "locations do not match") ; self . location . flow_state () . borrow_mut () . leaves . as_mut () . expect (FLOW_USED_MESSAGE) . push (HfPlusLeaf :: CycleSink { ident , location_kind : self . location_kind () , input : Box :: new (HfPlusNode :: Unpersist (Box :: new (self . ir_node . into_inner ()))) , }) ; } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > From < Optional < T , L , Bounded > > for Optional < T , L , Unbounded > { fn from (singleton : Optional < T , L , Bounded >) -> Self { Optional :: new (singleton . location , singleton . ir_node . into_inner ()) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , B > From < Singleton < T , L , B > > for Optional < T , L , B > { fn from (singleton : Singleton < T , L , B >) -> Self { Optional :: some (singleton) } } # [cfg (stageleft_macro)] impl < 'a , T : Clone , L : Location < 'a > , B > Clone for Optional < T , L , B > { fn clone (& self) -> Self { if ! matches ! (self . ir_node . borrow () . deref () , HfPlusNode :: Tee { .. }) { let orig_ir_node = self . ir_node . replace (HfPlusNode :: Placeholder) ; * self . ir_node . borrow_mut () = HfPlusNode :: Tee { inner : TeeNode (Rc :: new (RefCell :: new (orig_ir_node))) , } ; } if let HfPlusNode :: Tee { inner } = self . ir_node . borrow () . deref () { Optional { location : self . location . clone () , ir_node : HfPlusNode :: Tee { inner : TeeNode (inner . 0 . clone ()) , } . into () , _phantom : PhantomData , } } else { unreachable ! () } } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > , B > Optional < T , L , B > { pub fn map < U , F : Fn (T) -> U + 'a > (self , f : impl IntoQuotedMut < 'a , F , L >) -> Optional < U , L , B > { let f = f . splice_fn1_ctx (& self . location) . into () ; Optional :: new (self . location , HfPlusNode :: Map { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn flat_map_ordered < U , I : IntoIterator < Item = U > , F : Fn (T) -> I + 'a > (self , f : impl IntoQuotedMut < 'a , F , L > ,) -> Stream < U , L , B > { let f = f . splice_fn1_ctx (& self . location) . into () ; Stream :: new (self . location , HfPlusNode :: FlatMap { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn flat_map_unordered < U , I : IntoIterator < Item = U > , F : Fn (T) -> I + 'a > (self , f : impl IntoQuotedMut < 'a , F , L > ,) -> Stream < U , L , B , NoOrder > { let f = f . splice_fn1_ctx (& self . location) . into () ; Stream :: new (self . location , HfPlusNode :: FlatMap { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn flatten_ordered < U > (self) -> Stream < U , L , B > where T : IntoIterator < Item = U > , { self . flat_map_ordered (q ! (| v | v)) } pub fn flatten_unordered < U > (self) -> Stream < U , L , B , NoOrder > where T : IntoIterator < Item = U > , { self . flat_map_unordered (q ! (| v | v)) } pub fn filter < F : Fn (& T) -> bool + 'a > (self , f : impl IntoQuotedMut < 'a , F , L > ,) -> Optional < T , L , B > { let f = f . splice_fn1_borrow_ctx (& self . location) . into () ; Optional :: new (self . location , HfPlusNode :: Filter { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn filter_map < U , F : Fn (T) -> Option < U > + 'a > (self , f : impl IntoQuotedMut < 'a , F , L > ,) -> Optional < U , L , B > { let f = f . splice_fn1_ctx (& self . location) . into () ; Optional :: new (self . location , HfPlusNode :: FilterMap { f , input : Box :: new (self . ir_node . into_inner ()) , } ,) } pub fn union (self , other : Optional < T , L , B >) -> Optional < T , L , B > { check_matching_location (& self . location , & other . location) ; if L :: is_top_level () { Optional :: new (self . location , HfPlusNode :: Persist (Box :: new (HfPlusNode :: Chain (Box :: new (HfPlusNode :: Unpersist (Box :: new (self . ir_node . into_inner ()))) , Box :: new (HfPlusNode :: Unpersist (Box :: new (other . ir_node . into_inner ()))) ,))) ,) } else { Optional :: new (self . location , HfPlusNode :: Chain (Box :: new (self . ir_node . into_inner ()) , Box :: new (other . ir_node . into_inner ()) ,) ,) } } pub fn zip < O > (self , other : impl Into < Optional < O , L , B > >) -> Optional < (T , O) , L , B > where O : Clone , { let other : Optional < O , L , B > = other . into () ; check_matching_location (& self . location , & other . location) ; if L :: is_top_level () { Optional :: new (self . location , HfPlusNode :: Persist (Box :: new (HfPlusNode :: CrossSingleton (Box :: new (HfPlusNode :: Unpersist (Box :: new (self . ir_node . into_inner ()))) , Box :: new (HfPlusNode :: Unpersist (Box :: new (other . ir_node . into_inner ()))) ,))) ,) } else { Optional :: new (self . location , HfPlusNode :: CrossSingleton (Box :: new (self . ir_node . into_inner ()) , Box :: new (other . ir_node . into_inner ()) ,) ,) } } pub fn unwrap_or (self , other : Singleton < T , L , B >) -> Singleton < T , L , B > { check_matching_location (& self . location , & other . location) ; if L :: is_top_level () { Singleton :: new (self . location , HfPlusNode :: Persist (Box :: new (HfPlusNode :: Chain (Box :: new (HfPlusNode :: Unpersist (Box :: new (self . ir_node . into_inner ()))) , Box :: new (HfPlusNode :: Unpersist (Box :: new (other . ir_node . into_inner ()))) ,))) ,) } else { Singleton :: new (self . location , HfPlusNode :: Chain (Box :: new (self . ir_node . into_inner ()) , Box :: new (other . ir_node . into_inner ()) ,) ,) } } pub fn into_singleton (self) -> Singleton < Option < T > , L , B > where T : Clone , { let none : syn :: Expr = parse_quote ! ([:: std :: option :: Option :: None]) ; let core_ir = HfPlusNode :: Persist (Box :: new (HfPlusNode :: Source { source : HfPlusSource :: Iter (none . into ()) , location_kind : self . location . id () . root () . clone () , })) ; let none_singleton = if L :: is_top_level () { Singleton :: new (self . location . clone () , HfPlusNode :: Persist (Box :: new (core_ir)) ,) } else { Singleton :: new (self . location . clone () , core_ir) } ; self . map (q ! (| v | Some (v))) . unwrap_or (none_singleton) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > Optional < T , L , Bounded > { pub fn continue_if < U > (self , signal : Optional < U , L , Bounded >) -> Optional < T , L , Bounded > { self . zip (signal . map (q ! (| _u | ()))) . map (q ! (| (d , _signal) | d)) } pub fn continue_unless < U > (self , other : Optional < U , L , Bounded >) -> Optional < T , L , Bounded > { self . continue_if (other . into_stream () . count () . filter (q ! (| c | * c == 0))) } pub fn then < U > (self , value : Singleton < U , L , Bounded >) -> Optional < U , L , Bounded > where Singleton < U , L , Bounded > : ZipResult < 'a , Optional < () , L , Bounded > , Location = L , Out = Optional < (U , ()) , L , Bounded > , > , { value . continue_if (self) } pub fn into_stream (self) -> Stream < T , L , Bounded > { if L :: is_top_level () { panic ! ("Converting an optional to a stream is not yet supported at the top level") ; } Stream :: new (self . location , self . ir_node . into_inner ()) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick , B > Optional < T , Timestamped < L > , B > { # [doc = " Given a tick, returns a optional value corresponding to a snapshot of the optional"] # [doc = " as of that tick. The snapshot at tick `t + 1` is guaranteed to include at least all"] # [doc = " relevant data that contributed to the snapshot at tick `t`."] # [doc = ""] # [doc = " # Safety"] # [doc = " Because this picks a snapshot of a optional whose value is continuously changing,"] # [doc = " the output optional has a non-deterministic value since the snapshot can be at an"] # [doc = " arbitrary point in time."] pub unsafe fn latest_tick (self) -> Optional < T , Tick < L > , Bounded > { Optional :: new (self . location . tick , HfPlusNode :: Unpersist (Box :: new (self . ir_node . into_inner ())) ,) } pub fn drop_timestamp (self) -> Optional < T , L , B > { Optional :: new (self . location . tick . l , self . ir_node . into_inner ()) } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > + NoTick , B > Optional < T , L , B > { pub fn timestamped (self , tick : & Tick < L >) -> Optional < T , Timestamped < L > , B > { Optional :: new (Timestamped { tick : tick . clone () } , self . ir_node . into_inner () ,) } # [doc = " Eagerly samples the optional as fast as possible, returning a stream of snapshots"] # [doc = " with order corresponding to increasing prefixes of data contributing to the optional."] # [doc = ""] # [doc = " # Safety"] # [doc = " At runtime, the optional will be arbitrarily sampled as fast as possible, but due"] # [doc = " to non-deterministic batching and arrival of inputs, the output stream is"] # [doc = " non-deterministic."] pub unsafe fn sample_eager (self) -> Stream < T , L , Unbounded > { let tick = self . location . tick () ; unsafe { self . timestamped (& tick) . latest_tick () . all_ticks () . drop_timestamp () } } # [doc = " Given a time interval, returns a stream corresponding to snapshots of the optional"] # [doc = " value taken at various points in time. Because the input optional may be"] # [doc = " [`Unbounded`], there are no guarantees on what these snapshots are other than they"] # [doc = " represent the value of the optional given some prefix of the streams leading up to"] # [doc = " it."] # [doc = ""] # [doc = " # Safety"] # [doc = " The output stream is non-deterministic in which elements are sampled, since this"] # [doc = " is controlled by a clock."] pub unsafe fn sample_every (self , interval : impl QuotedWithContext < 'a , std :: time :: Duration , L > + Copy + 'a ,) -> Stream < T , L , Unbounded > where L : NoTimestamp , { let samples = unsafe { self . location . source_interval (interval) } ; let tick = self . location . tick () ; unsafe { self . timestamped (& tick) . latest_tick () . continue_if (samples . timestamped (& tick) . tick_batch () . first ()) . all_ticks () . drop_timestamp () } } } # [cfg (stageleft_macro)] impl < 'a , T , L : Location < 'a > > Optional < T , Tick < L > , Bounded > { pub fn all_ticks (self) -> Stream < T , Timestamped < L > , Unbounded > { Stream :: new (Timestamped { tick : self . location , } , HfPlusNode :: Persist (Box :: new (self . ir_node . into_inner ())) ,) } pub fn latest (self) -> Optional < T , Timestamped < L > , Unbounded > { Optional :: new (Timestamped { tick : self . location , } , HfPlusNode :: Persist (Box :: new (self . ir_node . into_inner ())) ,) } pub fn defer_tick (self) -> Optional < T , Tick < L > , Bounded > { Optional :: new (self . location , HfPlusNode :: DeferTick (Box :: new (self . ir_node . into_inner ())) ,) } pub fn persist (self) -> Stream < T , Tick < L > , Bounded > { Stream :: new (self . location , HfPlusNode :: Persist (Box :: new (self . ir_node . into_inner ())) ,) } pub fn delta (self) -> Optional < T , Tick < L > , Bounded > { Optional :: new (self . location , HfPlusNode :: Delta (Box :: new (self . ir_node . into_inner ())) ,) } } } pub use optional :: Optional ; pub mod location { pub use std :: fmt :: Debug ; pub use std :: marker :: PhantomData ; pub use std :: time :: Duration ; pub use hydroflow :: futures :: stream :: Stream as FuturesStream ; pub use hydroflow :: { tokio , tokio_stream } ; pub use proc_macro2 :: Span ; pub use stageleft :: { q , QuotedWithContext } ; pub use super :: builder :: FlowState ; pub use crate :: __staged :: cycle :: { CycleCollection , ForwardRef , ForwardRefMarker } ; pub use crate :: __staged :: ir :: { HfPlusNode , HfPlusSource } ; pub use crate :: __staged :: { Singleton , Stream , Unbounded } ; pub mod external_process { pub use std :: marker :: PhantomData ; pub use hydroflow :: bytes :: Bytes ; pub use serde :: de :: DeserializeOwned ; pub use serde :: Serialize ; pub use super :: { Location , LocationId , NoTick } ; pub use crate :: __staged :: builder :: FlowState ; pub use crate :: __staged :: ir :: { HfPlusNode , HfPlusSource } ; pub use crate :: __staged :: staging_util :: Invariant ; pub use crate :: __staged :: { Stream , Unbounded } ; pub use crate :: location :: external_process :: ExternalBytesPort ; pub use crate :: location :: external_process :: ExternalBincodeSink ; pub use crate :: location :: external_process :: ExternalBincodeStream ; pub use crate :: location :: external_process :: ExternalProcess ; # [cfg (stageleft_macro)] impl < P > Clone for ExternalProcess < '_ , P > { fn clone (& self) -> Self { ExternalProcess { id : self . id , flow_state : self . flow_state . clone () , _phantom : PhantomData , } } } # [cfg (stageleft_macro)] impl < 'a , P > Location < 'a > for ExternalProcess < 'a , P > { type Root = Self ; fn root (& self) -> Self :: Root { self . clone () } fn id (& self) -> LocationId { LocationId :: ExternalProcess (self . id) } fn flow_state (& self) -> & FlowState { & self . flow_state } fn is_top_level () -> bool { true } } # [cfg (stageleft_macro)] impl < 'a , P > ExternalProcess < 'a , P > { pub fn source_external_bytes < L : Location < 'a > + NoTick > (& self , to : & L ,) -> (ExternalBytesPort , Stream < Bytes , L , Unbounded >) { let next_external_port_id = { let mut flow_state = self . flow_state . borrow_mut () ; let id = flow_state . next_external_out ; flow_state . next_external_out += 1 ; id } ; let deser_expr : syn :: Expr = syn :: parse_quote ! (| b | b . unwrap () . freeze ()) ; (ExternalBytesPort { process_id : self . id , port_id : next_external_port_id , } , Stream :: new (to . clone () , HfPlusNode :: Persist (Box :: new (HfPlusNode :: Network { from_location : LocationId :: ExternalProcess (self . id) , from_key : Some (next_external_port_id) , to_location : to . id () , to_key : None , serialize_fn : None , instantiate_fn : crate :: ir :: DebugInstantiate :: Building () , deserialize_fn : Some (deser_expr . into ()) , input : Box :: new (HfPlusNode :: Source { source : HfPlusSource :: ExternalNetwork () , location_kind : LocationId :: ExternalProcess (self . id) , }) , })) ,) ,) } pub fn source_external_bincode < L : Location < 'a > + NoTick , T : Serialize + DeserializeOwned > (& self , to : & L ,) -> (ExternalBincodeSink < T > , Stream < T , L , Unbounded >) { let next_external_port_id = { let mut flow_state = self . flow_state . borrow_mut () ; let id = flow_state . next_external_out ; flow_state . next_external_out += 1 ; id } ; (ExternalBincodeSink { process_id : self . id , port_id : next_external_port_id , _phantom : PhantomData , } , Stream :: new (to . clone () , HfPlusNode :: Persist (Box :: new (HfPlusNode :: Network { from_location : LocationId :: ExternalProcess (self . id) , from_key : Some (next_external_port_id) , to_location : to . id () , to_key : None , serialize_fn : None , instantiate_fn : crate :: ir :: DebugInstantiate :: Building () , deserialize_fn : Some (crate :: stream :: deserialize_bincode :: < T > (None) . into ()) , input : Box :: new (HfPlusNode :: Source { source : HfPlusSource :: ExternalNetwork () , location_kind : LocationId :: ExternalProcess (self . id) , }) , })) ,) ,) } } } pub use external_process :: ExternalProcess ; pub mod process { pub use std :: marker :: PhantomData ; pub use super :: { Location , LocationId } ; pub use crate :: __staged :: builder :: FlowState ; pub use crate :: __staged :: staging_util :: Invariant ; pub use crate :: location :: process :: Process ; # [cfg (stageleft_macro)] impl < P > Clone for Process < '_ , P > { fn clone (& self) -> Self { Process { id : self . id , flow_state : self . flow_state . clone () , _phantom : PhantomData , } } } # [cfg (stageleft_macro)] impl < 'a , P > Location < 'a > for Process < 'a , P > { type Root = Self ; fn root (& self) -> Self :: Root { self . clone () } fn id (& self) -> LocationId { LocationId :: Process (self . id) } fn flow_state (& self) -> & FlowState { & self . flow_state } fn is_top_level () -> bool { true } } } pub use process :: Process ; pub mod cluster { pub use std :: marker :: PhantomData ; pub use proc_macro2 :: { Span , TokenStream } ; pub use quote :: quote ; pub use stageleft :: runtime_support :: FreeVariableWithContext ; pub use stageleft :: { quote_type , QuotedWithContext } ; pub use super :: { Location , LocationId } ; pub use crate :: __staged :: builder :: FlowState ; pub use crate :: __staged :: staging_util :: { get_this_crate , Invariant } ; pub mod cluster_id { pub use std :: fmt :: { Debug , Display } ; pub use std :: hash :: Hash ; pub use std :: marker :: PhantomData ; pub use serde :: { Deserialize , Serialize } ; pub use crate :: location :: cluster :: cluster_id :: ClusterId ; # [cfg (stageleft_macro)] impl < C > Debug for ClusterId < C > { fn fmt (& self , f : & mut std :: fmt :: Formatter < '_ >) -> std :: fmt :: Result { write ! (f , "ClusterId::<{}>({})" , std :: any :: type_name ::< C > () , self . raw_id) } } # [cfg (stageleft_macro)] impl < C > Display for ClusterId < C > { fn fmt (& self , f : & mut std :: fmt :: Formatter < '_ >) -> std :: fmt :: Result { write ! (f , "ClusterId::<{}>({})" , std :: any :: type_name ::< C > () , self . raw_id) } } # [cfg (stageleft_macro)] impl < C > Clone for ClusterId < C > { fn clone (& self) -> Self { * self } } # [cfg (stageleft_macro)] impl < C > Copy for ClusterId < C > { } # [cfg (stageleft_macro)] impl < C > Serialize for ClusterId < C > { fn serialize < S > (& self , serializer : S) -> Result < S :: Ok , S :: Error > where S : serde :: ser :: Serializer , { self . raw_id . serialize (serializer) } } # [cfg (stageleft_macro)] impl < 'de , C > Deserialize < 'de > for ClusterId < C > { fn deserialize < D > (deserializer : D) -> Result < Self , D :: Error > where D : serde :: de :: Deserializer < 'de > , { u32 :: deserialize (deserializer) . map (| id | ClusterId { raw_id : id , _phantom : PhantomData , }) } } # [cfg (stageleft_macro)] impl < C > PartialEq for ClusterId < C > { fn eq (& self , other : & Self) -> bool { self . raw_id == other . raw_id } } # [cfg (stageleft_macro)] impl < C > Eq for ClusterId < C > { } # [cfg (stageleft_macro)] impl < C > Hash for ClusterId < C > { fn hash < H : std :: hash :: Hasher > (& self , state : & mut H) { self . raw_id . hash (state) } } # [cfg (stageleft_macro)] impl < C > ClusterId < C > { pub fn from_raw (id : u32) -> Self { ClusterId { raw_id : id , _phantom : PhantomData , } } } } pub use cluster_id :: ClusterId ; pub use crate :: location :: cluster :: Cluster ; pub use crate :: location :: cluster :: IsCluster ; # [cfg (stageleft_macro)] impl < C > IsCluster for Cluster < '_ , C > { type Tag = C ; } # [cfg (stageleft_macro)] impl < 'a , C > Cluster < 'a , C > { pub fn members (& self) -> ClusterIds < 'a , C > { ClusterIds { id : self . id , _phantom : PhantomData , } } } # [cfg (stageleft_macro)] impl < C > Clone for Cluster < '_ , C > { fn clone (& self) -> Self { Cluster { id : self . id , flow_state : self . flow_state . clone () , _phantom : PhantomData , } } } # [cfg (stageleft_macro)] impl < 'a , C > Location < 'a > for Cluster < 'a , C > { type Root = Cluster < 'a , C > ; fn root (& self) -> Self :: Root { self . clone () } fn id (& self) -> LocationId { LocationId :: Cluster (self . id) } fn flow_state (& self) -> & FlowState { & self . flow_state } fn is_top_level () -> bool { true } } pub use crate :: location :: cluster :: ClusterIds ; # [cfg (stageleft_macro)] impl < C > Clone for ClusterIds < '_ , C > { fn clone (& self) -> Self { * self } } # [cfg (stageleft_macro)] impl < C > Copy for ClusterIds < '_ , C > { } # [cfg (stageleft_macro)] impl < 'a , C : 'a , Ctx > FreeVariableWithContext < Ctx > for ClusterIds < 'a , C > { type O = & 'a Vec < ClusterId < C > > ; fn to_tokens (self , _ctx : & Ctx) -> (Option < TokenStream > , Option < TokenStream >) where Self : Sized , { let ident = syn :: Ident :: new (& format ! ("__hydroflow_plus_cluster_ids_{}" , self . id) , Span :: call_site () ,) ; let root = get_this_crate () ; let c_type = quote_type :: < C > () ; (None , Some (quote ! { unsafe { :: std :: mem :: transmute ::< _ , &:: std :: vec :: Vec <# root :: ClusterId <# c_type >>> (# ident) } } ,) ,) } } # [cfg (stageleft_macro)] impl < 'a , C , Ctx > QuotedWithContext < 'a , & 'a Vec < ClusterId < C > > , Ctx > for ClusterIds < 'a , C > { } pub use crate :: location :: cluster :: CLUSTER_SELF_ID ; pub use crate :: location :: cluster :: ClusterSelfId ; # [cfg (stageleft_macro)] impl < 'a , L : Location < 'a > > FreeVariableWithContext < L > for ClusterSelfId < 'a > where < L as Location < 'a > > :: Root : IsCluster , { type O = ClusterId < < < L as Location < 'a > > :: Root as IsCluster > :: Tag > ; fn to_tokens (self , ctx : & L) -> (Option < TokenStream > , Option < TokenStream >) where Self : Sized , { let cluster_id = if let LocationId :: Cluster (id) = ctx . root () . id () { id } else { unreachable ! () } ; let ident = syn :: Ident :: new (& format ! ("__hydroflow_plus_cluster_self_id_{}" , cluster_id) , Span :: call_site () ,) ; let root = get_this_crate () ; let c_type : syn :: Type = quote_type :: < < < L as Location < 'a > > :: Root as IsCluster > :: Tag > () ; (None , Some (quote ! { # root :: ClusterId ::<# c_type >:: from_raw (# ident) }) ,) } } # [cfg (stageleft_macro)] impl < 'a , L : Location < 'a > > QuotedWithContext < 'a , ClusterId < < < L as Location < 'a > > :: Root as IsCluster > :: Tag > , L > for ClusterSelfId < 'a > where < L as Location < 'a > > :: Root : IsCluster , { } } pub use cluster :: { Cluster , ClusterId } ; pub mod can_send { pub use stageleft :: quote_type ; pub use super :: { Cluster , ClusterId , ExternalProcess , Location , Process } ; pub use crate :: __staged :: stream :: NoOrder ; pub use crate :: location :: can_send :: CanSend ; # [cfg (stageleft_macro)] impl < 'a , P1 , P2 > CanSend < 'a , Process < 'a , P2 > > for Process < 'a , P1 > { type In < T > = T ; type Out < T > = T ; type OutStrongestOrder < InOrder > = InOrder ; fn is_demux () -> bool { false } fn tagged_type () -> Option < syn :: Type > { None } } # [cfg (stageleft_macro)] impl < 'a , P1 , C2 > CanSend < 'a , Cluster < 'a , C2 > > for Process < 'a , P1 > { type In < T > = (ClusterId < C2 > , T) ; type Out < T > = T ; type OutStrongestOrder < InOrder > = InOrder ; fn is_demux () -> bool { true } fn tagged_type () -> Option < syn :: Type > { None } } # [cfg (stageleft_macro)] impl < 'a , C1 , P2 > CanSend < 'a , Process < 'a , P2 > > for Cluster < 'a , C1 > { type In < T > = T ; type Out < T > = (ClusterId < C1 > , T) ; type OutStrongestOrder < InOrder > = NoOrder ; fn is_demux () -> bool { false } fn tagged_type () -> Option < syn :: Type > { Some (quote_type :: < C1 > ()) } } # [cfg (stageleft_macro)] impl < 'a , C1 , C2 > CanSend < 'a , Cluster < 'a , C2 > > for Cluster < 'a , C1 > { type In < T > = (ClusterId < C2 > , T) ; type Out < T > = (ClusterId < C1 > , T) ; type OutStrongestOrder < InOrder > = NoOrder ; fn is_demux () -> bool { true } fn tagged_type () -> Option < syn :: Type > { Some (quote_type :: < C1 > ()) } } # [cfg (stageleft_macro)] impl < 'a , P1 , E2 > CanSend < 'a , ExternalProcess < 'a , E2 > > for Process < 'a , P1 > { type In < T > = T ; type Out < T > = T ; type OutStrongestOrder < InOrder > = InOrder ; fn is_demux () -> bool { false } fn tagged_type () -> Option < syn :: Type > { None } } } pub use can_send :: CanSend ; pub mod tick { pub use std :: marker :: PhantomData ; pub use proc_macro2 :: Span ; pub use sealed :: sealed ; pub use stageleft :: { q , QuotedWithContext } ; pub use super :: { Cluster , Location , LocationId , Process } ; pub use crate :: __staged :: builder :: FlowState ; pub use crate :: __staged :: cycle :: { CycleCollection , CycleCollectionWithInitial , DeferTick , ForwardRef , ForwardRefMarker , TickCycle , TickCycleMarker , } ; pub use crate :: __staged :: ir :: { HfPlusNode , HfPlusSource } ; pub use crate :: __staged :: { Bounded , Optional , Singleton , Stream } ; pub use crate :: location :: tick :: NoTick ; # [cfg (stageleft_macro)] # [sealed] impl < T > NoTick for Process < '_ , T > { } # [cfg (stageleft_macro)] # [sealed] impl < T > NoTick for Cluster < '_ , T > { } pub use crate :: location :: tick :: NoTimestamp ; # [cfg (stageleft_macro)] # [sealed] impl < T > NoTimestamp for Process < '_ , T > { } # [cfg (stageleft_macro)] # [sealed] impl < T > NoTimestamp for Cluster < '_ , T > { } # [cfg (stageleft_macro)] # [sealed] impl < 'a , L : Location < 'a > > NoTimestamp for Tick < L > { } pub use crate :: location :: tick :: Timestamped ; # [cfg (stageleft_macro)] impl < 'a , L : Location < 'a > > Location < 'a > for Timestamped < L > { type Root = L :: Root ; fn root (& self) -> Self :: Root { self . tick . root () } fn id (& self) -> LocationId { self . tick . id () } fn flow_state (& self) -> & FlowState { self . tick . flow_state () } fn is_top_level () -> bool { L :: is_top_level () } } # [cfg (stageleft_macro)] # [sealed] impl < L > NoTick for Timestamped < L > { } pub use crate :: location :: tick :: Tick ; # [cfg (stageleft_macro)] impl < 'a , L : Location < 'a > > Location < 'a > for Tick < L > { type Root = L :: Root ; fn root (& self) -> Self :: Root { self . l . root () } fn id (& self) -> LocationId { LocationId :: Tick (self . id , Box :: new (self . l . id ())) } fn flow_state (& self) -> & FlowState { self . l . flow_state () } fn is_top_level () -> bool { false } } # [cfg (stageleft_macro)] impl < 'a , L : Location < 'a > > Tick < L > { pub fn outer (& self) -> & L { & self . l } pub fn spin_batch (& self , batch_size : impl QuotedWithContext < 'a , usize , L > + Copy + 'a ,) -> Stream < () , Self , Bounded > where L : NoTick + NoTimestamp , { let out = self . l . spin () . flat_map_ordered (q ! (move | _ | 0 .. batch_size)) . map (q ! (| _ | ())) . timestamped (self) ; unsafe { out . tick_batch () } } pub fn singleton < T : Clone > (& self , e : impl QuotedWithContext < 'a , T , L > ,) -> Singleton < T , Self , Bounded > where L : NoTick , { unsafe { self . outer () . singleton (e) . timestamped (self) . latest_tick () } } pub fn singleton_first_tick < T : Clone > (& self , e : impl QuotedWithContext < 'a , T , Tick < L > > ,) -> Optional < T , Self , Bounded > where L : NoTick , { let e_arr = q ! ([e]) ; let e = e_arr . splice_untyped_ctx (self) ; Optional :: new (self . clone () , HfPlusNode :: Source { source : HfPlusSource :: Iter (e . into ()) , location_kind : self . l . id () , } ,) } pub fn forward_ref < S : CycleCollection < 'a , ForwardRefMarker , Location = Self > > (& self ,) -> (ForwardRef < 'a , S > , S) where L : NoTick , { let next_id = { let on_id = match self . l . id () { LocationId :: Process (id) => id , LocationId :: Cluster (id) => id , LocationId :: Tick (_ , _) => panic ! () , LocationId :: ExternalProcess (_) => panic ! () , } ; let mut flow_state = self . flow_state () . borrow_mut () ; let next_id_entry = flow_state . cycle_counts . entry (on_id) . or_default () ; let id = * next_id_entry ; * next_id_entry += 1 ; id } ; let ident = syn :: Ident :: new (& format ! ("cycle_{}" , next_id) , Span :: call_site ()) ; (ForwardRef { ident : ident . clone () , expected_location : self . id () , _phantom : PhantomData , } , S :: create_source (ident , self . clone ()) ,) } pub fn forward_ref_timestamped < S : CycleCollection < 'a , ForwardRefMarker , Location = Timestamped < L > > , > (& self ,) -> (ForwardRef < 'a , S > , S) { let next_id = { let on_id = match self . l . id () { LocationId :: Process (id) => id , LocationId :: Cluster (id) => id , LocationId :: Tick (_ , _) => panic ! () , LocationId :: ExternalProcess (_) => panic ! () , } ; let mut flow_state = self . flow_state () . borrow_mut () ; let next_id_entry = flow_state . cycle_counts . entry (on_id) . or_default () ; let id = * next_id_entry ; * next_id_entry += 1 ; id } ; let ident = syn :: Ident :: new (& format ! ("cycle_{}" , next_id) , Span :: call_site ()) ; (ForwardRef { ident : ident . clone () , expected_location : self . id () , _phantom : PhantomData , } , S :: create_source (ident , Timestamped { tick : self . clone () }) ,) } pub fn cycle < S : CycleCollection < 'a , TickCycleMarker , Location = Self > + DeferTick > (& self ,) -> (TickCycle < 'a , S > , S) where L : NoTick , { let next_id = { let on_id = match self . l . id () { LocationId :: Process (id) => id , LocationId :: Cluster (id) => id , LocationId :: Tick (_ , _) => panic ! () , LocationId :: ExternalProcess (_) => panic ! () , } ; let mut flow_state = self . flow_state () . borrow_mut () ; let next_id_entry = flow_state . cycle_counts . entry (on_id) . or_default () ; let id = * next_id_entry ; * next_id_entry += 1 ; id } ; let ident = syn :: Ident :: new (& format ! ("cycle_{}" , next_id) , Span :: call_site ()) ; (TickCycle { ident : ident . clone () , expected_location : self . id () , _phantom : PhantomData , } , S :: create_source (ident , self . clone ()) ,) } pub fn cycle_with_initial < S : CycleCollectionWithInitial < 'a , TickCycleMarker , Location = Self > + DeferTick , > (& self , initial : S ,) -> (TickCycle < 'a , S > , S) where L : NoTick , { let next_id = { let on_id = match self . l . id () { LocationId :: Process (id) => id , LocationId :: Cluster (id) => id , LocationId :: Tick (_ , _) => panic ! () , LocationId :: ExternalProcess (_) => panic ! () , } ; let mut flow_state = self . flow_state () . borrow_mut () ; let next_id_entry = flow_state . cycle_counts . entry (on_id) . or_default () ; let id = * next_id_entry ; * next_id_entry += 1 ; id } ; let ident = syn :: Ident :: new (& format ! ("cycle_{}" , next_id) , Span :: call_site ()) ; (TickCycle { ident : ident . clone () , expected_location : self . id () , _phantom : PhantomData , } , S :: create_source (ident , initial , self . clone ()) ,) } } } pub use tick :: { NoTick , Tick , Timestamped } ; pub use crate :: location :: LocationId ; # [cfg (stageleft_macro)] impl LocationId { pub fn root (& self) -> & LocationId { match self { LocationId :: Process (_) => self , LocationId :: Cluster (_) => self , LocationId :: Tick (_ , id) => id . root () , LocationId :: ExternalProcess (_) => self , } } pub fn raw_id (& self) -> usize { match self { LocationId :: Process (id) => * id , LocationId :: Cluster (id) => * id , LocationId :: Tick (_ , _) => panic ! ("cannot get raw id for tick") , LocationId :: ExternalProcess (id) => * id , } } } pub fn check_matching_location < 'a , L : Location < 'a > > (l1 : & L , l2 : & L) { assert_eq ! (l1 . id () , l2 . id () , "locations do not match") ; } pub use crate :: location :: Location ; } pub use location :: cluster :: CLUSTER_SELF_ID ; pub use location :: { Cluster , ClusterId , ExternalProcess , Location , Process , Tick , Timestamped } ; # [cfg (feature = "build")] pub mod deploy { pub use std :: future :: Future ; pub use std :: io :: Error ; pub use std :: pin :: Pin ; pub use hydroflow :: bytes :: Bytes ; pub use hydroflow :: futures :: { Sink , Stream } ; pub use hydroflow_lang :: graph :: HydroflowGraph ; pub use serde :: de :: DeserializeOwned ; pub use serde :: Serialize ; pub use stageleft :: QuotedWithContext ; pub mod macro_runtime { pub use std :: cell :: RefCell ; pub use std :: future :: Future ; pub use std :: pin :: Pin ; pub use std :: rc :: Rc ; pub use hydroflow :: bytes :: Bytes ; pub use hydroflow :: futures :: { Sink , Stream } ; pub use hydroflow :: util :: deploy :: DeployPorts ; pub use hydroflow_lang :: graph :: HydroflowGraph ; pub use stageleft :: { QuotedWithContext , RuntimeData } ; pub use crate :: __staged :: deploy :: { ClusterSpec , Deploy , ExternalSpec , Node , ProcessSpec , RegisterPort } ; pub use crate :: __staged :: deploy_runtime :: HydroflowPlusMeta ; pub use crate :: deploy :: macro_runtime :: DeployRuntime ; # [cfg (stageleft_macro)] impl < 'a > Deploy < 'a > for DeployRuntime { type InstantiateEnv = () ; type CompileEnv = RuntimeData < & 'a DeployPorts < HydroflowPlusMeta > > ; type Process = DeployRuntimeNode ; type Cluster = DeployRuntimeCluster ; type ExternalProcess = DeployRuntimeNode ; type Port = String ; type ExternalRawPort = () ; type Meta = () ; type GraphId = usize ; fn has_trivial_node () -> bool { true } fn trivial_process (_id : usize) -> Self :: Process { DeployRuntimeNode { next_port : Rc :: new (RefCell :: new (0)) , } } fn trivial_cluster (_id : usize) -> Self :: Cluster { DeployRuntimeCluster { next_port : Rc :: new (RefCell :: new (0)) , } } fn allocate_process_port (process : & Self :: Process) -> Self :: Port { process . next_port () } fn allocate_cluster_port (cluster : & Self :: Cluster) -> Self :: Port { cluster . next_port () } fn allocate_external_port (_external : & Self :: ExternalProcess) -> Self :: Port { panic ! () ; } fn o2o_sink_source (env : & Self :: CompileEnv , _p1 : & Self :: Process , p1_port : & Self :: Port , _p2 : & Self :: Process , p2_port : & Self :: Port ,) -> (syn :: Expr , syn :: Expr) { crate :: deploy_runtime :: deploy_o2o (* env , p1_port . as_str () , p2_port . as_str ()) } fn o2o_connect (_p1 : & Self :: Process , _p1_port : & Self :: Port , _p2 : & Self :: Process , _p2_port : & Self :: Port ,) -> Box < dyn FnOnce () > { Box :: new (| | panic ! ()) } fn o2m_sink_source (env : & Self :: CompileEnv , _p1 : & Self :: Process , p1_port : & Self :: Port , _c2 : & Self :: Cluster , c2_port : & Self :: Port ,) -> (syn :: Expr , syn :: Expr) { crate :: deploy_runtime :: deploy_o2m (* env , p1_port . as_str () , c2_port . as_str ()) } fn o2m_connect (_p1 : & Self :: Process , _p1_port : & Self :: Port , _c2 : & Self :: Cluster , _c2_port : & Self :: Port ,) -> Box < dyn FnOnce () > { Box :: new (| | panic ! ()) } fn m2o_sink_source (env : & Self :: CompileEnv , _c1 : & Self :: Cluster , c1_port : & Self :: Port , _p2 : & Self :: Process , p2_port : & Self :: Port ,) -> (syn :: Expr , syn :: Expr) { crate :: deploy_runtime :: deploy_m2o (* env , c1_port . as_str () , p2_port . as_str ()) } fn m2o_connect (_c1 : & Self :: Cluster , _c1_port : & Self :: Port , _p2 : & Self :: Process , _p2_port : & Self :: Port ,) -> Box < dyn FnOnce () > { Box :: new (| | panic ! ()) } fn m2m_sink_source (env : & Self :: CompileEnv , _c1 : & Self :: Cluster , c1_port : & Self :: Port , _c2 : & Self :: Cluster , c2_port : & Self :: Port ,) -> (syn :: Expr , syn :: Expr) { crate :: deploy_runtime :: deploy_m2m (* env , c1_port . as_str () , c2_port . as_str ()) } fn m2m_connect (_c1 : & Self :: Cluster , _c1_port : & Self :: Port , _c2 : & Self :: Cluster , _c2_port : & Self :: Port ,) -> Box < dyn FnOnce () > { Box :: new (| | panic ! ()) } fn e2o_source (_compile_env : & Self :: CompileEnv , _p1 : & Self :: ExternalProcess , _p1_port : & Self :: Port , _p2 : & Self :: Process , _p2_port : & Self :: Port ,) -> syn :: Expr { panic ! () } fn e2o_connect (_p1 : & Self :: ExternalProcess , _p1_port : & Self :: Port , _p2 : & Self :: Process , _p2_port : & Self :: Port ,) -> Box < dyn FnOnce () > { panic ! () } fn o2e_sink (_compile_env : & Self :: CompileEnv , _p1 : & Self :: Process , _p1_port : & Self :: Port , _p2 : & Self :: ExternalProcess , _p2_port : & Self :: Port ,) -> syn :: Expr { panic ! () } fn o2e_connect (_p1 : & Self :: Process , _p1_port : & Self :: Port , _p2 : & Self :: ExternalProcess , _p2_port : & Self :: Port ,) -> Box < dyn FnOnce () > { panic ! () } fn cluster_ids (env : & Self :: CompileEnv , of_cluster : usize ,) -> impl QuotedWithContext < 'a , & 'a Vec < u32 > , () > + Copy + 'a { crate :: deploy_runtime :: cluster_members (* env , of_cluster) } fn cluster_self_id (env : & Self :: CompileEnv) -> impl QuotedWithContext < 'a , u32 , () > + Copy + 'a { crate :: deploy_runtime :: cluster_self_id (* env) } } pub use crate :: deploy :: macro_runtime :: DeployRuntimeNode ; # [cfg (stageleft_macro)] impl < 'a > RegisterPort < 'a , DeployRuntime > for DeployRuntimeNode { fn register (& self , _key : usize , _port : < DeployRuntime as Deploy > :: Port) { panic ! () } fn raw_port (& self , _key : usize) -> < DeployRuntime as Deploy > :: ExternalRawPort { panic ! () } # [expect (clippy :: manual_async_fn , reason = "buggy Clippy lint for lifetime bounds")] fn as_bytes_sink (& self , _key : usize ,) -> impl Future < Output = Pin < Box < dyn Sink < Bytes , Error = std :: io :: Error > > > > + 'a { async { panic ! () } } # [expect (clippy :: manual_async_fn , reason = "buggy Clippy lint for lifetime bounds")] fn as_bincode_sink < T : serde :: Serialize + 'static > (& self , _key : usize ,) -> impl Future < Output = Pin < Box < dyn Sink < T , Error = std :: io :: Error > > > > + 'a { async { panic ! () } } # [expect (clippy :: manual_async_fn , reason = "buggy Clippy lint for lifetime bounds")] fn as_bytes_source (& self , _key : usize ,) -> impl Future < Output = Pin < Box < dyn Stream < Item = Bytes > > > > + 'a { async { panic ! () } } # [expect (clippy :: manual_async_fn , reason = "buggy Clippy lint for lifetime bounds")] fn as_bincode_source < T : serde :: de :: DeserializeOwned + 'static > (& self , _key : usize ,) -> impl Future < Output = Pin < Box < dyn Stream < Item = T > > > > + 'a { async { panic ! () } } } # [cfg (stageleft_macro)] impl Node for DeployRuntimeNode { type Port = String ; type Meta = () ; type InstantiateEnv = () ; fn next_port (& self) -> String { let next_send_port = * self . next_port . borrow () ; * self . next_port . borrow_mut () += 1 ; format ! ("port_{}" , next_send_port) } fn update_meta (& mut self , _meta : & Self :: Meta) { } fn instantiate (& self , _env : & mut Self :: InstantiateEnv , _meta : & mut Self :: Meta , _graph : HydroflowGraph , _extra_stmts : Vec < syn :: Stmt > ,) { panic ! (".deploy() cannot be called on a DeployRuntimeNode") ; } } pub use crate :: deploy :: macro_runtime :: DeployRuntimeCluster ; # [cfg (stageleft_macro)] impl Node for DeployRuntimeCluster { type Port = String ; type Meta = () ; type InstantiateEnv = () ; fn next_port (& self) -> String { let next_send_port = * self . next_port . borrow () ; * self . next_port . borrow_mut () += 1 ; format ! ("port_{}" , next_send_port) } fn update_meta (& mut self , _meta : & Self :: Meta) { } fn instantiate (& self , _env : & mut Self :: InstantiateEnv , _meta : & mut Self :: Meta , _graph : HydroflowGraph , _extra_stmts : Vec < syn :: Stmt > ,) { panic ! (".deploy() cannot be called on a DeployRuntimeCluster") ; } } # [cfg (stageleft_macro)] impl ProcessSpec < '_ , DeployRuntime > for () { fn build (self , _id : usize , _name_hint : & str) -> DeployRuntimeNode { DeployRuntimeNode { next_port : Rc :: new (RefCell :: new (0)) , } } } # [cfg (stageleft_macro)] impl ClusterSpec < '_ , DeployRuntime > for () { fn build (self , _id : usize , _name_hint : & str) -> DeployRuntimeCluster { DeployRuntimeCluster { next_port : Rc :: new (RefCell :: new (0)) , } } } # [cfg (stageleft_macro)] impl ExternalSpec < '_ , DeployRuntime > for () { fn build (self , _id : usize , _name_hint : & str) -> DeployRuntimeNode { panic ! () } } } pub use macro_runtime :: * ; # [cfg (feature = "deploy")] pub mod trybuild { pub use std :: fs ; pub use std :: path :: PathBuf ; pub use hydroflow_lang :: graph :: { partition_graph , HydroflowGraph } ; pub use sha2 :: { Digest , Sha256 } ; pub use stageleft :: internal :: quote ; pub use syn :: visit_mut :: VisitMut ; pub use trybuild_internals_api :: cargo :: { self , Metadata } ; pub use trybuild_internals_api :: env :: Update ; pub use trybuild_internals_api :: run :: { PathDependency , Project } ; pub use trybuild_internals_api :: { dependencies , features , path , Runner } ; pub use super :: trybuild_rewriters :: { ReplaceCrateNameWithStaged , ReplaceCrateWithOrig } ; static IS_TEST : std :: sync :: atomic :: AtomicBool = std :: sync :: atomic :: AtomicBool :: new (false) ; pub fn init_test () { IS_TEST . store (true , std :: sync :: atomic :: Ordering :: Relaxed) ; } pub fn clean_name_hint (name_hint : & str) -> String { name_hint . replace ("::" , "__") . replace (" " , "_") . replace ("," , "_") . replace ("<" , "_") . replace (">" , "") . replace ("(" , "") . replace (")" , "") } pub fn create_graph_trybuild (graph : HydroflowGraph , extra_stmts : Vec < syn :: Stmt > , name_hint : & Option < String > ,) -> (String , (PathBuf , PathBuf , Option < Vec < String > >)) { let source_dir = cargo :: manifest_dir () . unwrap () ; let source_manifest = dependencies :: get_manifest (& source_dir) . unwrap () ; let crate_name = & source_manifest . package . name . to_string () . replace ("-" , "_") ; let is_test = IS_TEST . load (std :: sync :: atomic :: Ordering :: Relaxed) ; let mut generated_code = compile_graph_trybuild (graph , extra_stmts) ; ReplaceCrateNameWithStaged { crate_name : crate_name . clone () , } . visit_file_mut (& mut generated_code) ; let mut inlined_staged = stageleft_tool :: gen_staged_trybuild (& path ! (source_dir / "src" / "lib.rs") , crate_name . clone () , is_test ,) ; ReplaceCrateWithOrig { crate_name : crate_name . clone () , } . visit_file_mut (& mut inlined_staged) ; let source = prettyplease :: unparse (& syn :: parse_quote ! { # generated_code # [allow (unused , ambiguous_glob_reexports , clippy :: suspicious_else_formatting , unexpected_cfgs , reason = "generated code")] pub mod __staged { # inlined_staged } }) ; let hash = format ! ("{:X}" , Sha256 :: digest (& source)) . chars () . take (8) . collect :: < String > () ; let bin_name = if let Some (name_hint) = & name_hint { format ! ("{}_{}" , clean_name_hint (name_hint) , & hash) } else { hash } ; let trybuild_created = create_trybuild (& source , & bin_name , is_test) . unwrap () ; (bin_name , trybuild_created) } pub fn compile_graph_trybuild (graph : HydroflowGraph , extra_stmts : Vec < syn :: Stmt >) -> syn :: File { let partitioned_graph = partition_graph (graph) . expect ("Failed to partition (cycle detected).") ; let mut diagnostics = Vec :: new () ; let tokens = partitioned_graph . as_code (& quote ! { hydroflow_plus :: hydroflow } , true , quote ! () , & mut diagnostics ,) ; let source_ast : syn :: File = syn :: parse_quote ! { #! [allow (unused_imports , unused_crate_dependencies , missing_docs , non_snake_case)] use hydroflow_plus ::*; # [allow (unused)] fn __hfplus_runtime <'a > (__hydroflow_plus_trybuild_cli : &'a hydroflow_plus :: hydroflow :: util :: deploy :: DeployPorts < hydroflow_plus :: deploy_runtime :: HydroflowPlusMeta >) -> hydroflow_plus :: hydroflow :: scheduled :: graph :: Hydroflow <'a > { # (# extra_stmts) * # tokens } # [tokio :: main] async fn main () { let ports = hydroflow_plus :: hydroflow :: util :: deploy :: init_no_ack_start () . await ; let flow = __hfplus_runtime (& ports) ; println ! ("ack start") ; hydroflow_plus :: hydroflow :: util :: deploy :: launch_flow (flow) . await ; } } ; source_ast } pub fn create_trybuild (source : & str , bin : & str , is_test : bool ,) -> Result < (PathBuf , PathBuf , Option < Vec < String > >) , trybuild_internals_api :: error :: Error > { let Metadata { target_directory : target_dir , workspace_root : workspace , packages , } = cargo :: metadata () ? ; let source_dir = cargo :: manifest_dir () ? ; let mut source_manifest = dependencies :: get_manifest (& source_dir) ? ; if ! is_test { source_manifest . dev_dependencies . clear () ; } let mut features = features :: find () ; let path_dependencies = source_manifest . dependencies . iter () . filter_map (| (name , dep) | { let path = dep . path . as_ref () ? ; if packages . iter () . any (| p | & p . name == name) { None } else { Some (PathDependency { name : name . clone () , normalized_path : path . canonicalize () . ok () ? , }) } }) . collect () ; let crate_name = source_manifest . package . name . clone () ; let project_dir = path ! (target_dir / "hfplus_trybuild" / crate_name /) ; fs :: create_dir_all (& project_dir) ? ; let project_name = format ! ("{}-hfplus-trybuild" , crate_name) ; let mut manifest = Runner :: make_manifest (& workspace , & project_name , & source_dir , & packages , & [] , source_manifest ,) ? ; manifest . features . remove ("stageleft_devel") ; if let Some (enabled_features) = & mut features { enabled_features . retain (| feature | manifest . features . contains_key (feature) || feature == "default") ; manifest . features . get_mut ("default") . iter_mut () . for_each (| v | { v . retain (| f | f != "stageleft_devel") ; }) ; } let project = Project { dir : project_dir , source_dir , target_dir , name : project_name , update : Update :: env () ? , has_pass : false , has_compile_fail : false , features , workspace , path_dependencies , manifest , keep_going : false , } ; let manifest_toml = toml :: to_string (& project . manifest) ? ; fs :: write (path ! (project . dir / "Cargo.toml") , manifest_toml) ? ; fs :: create_dir_all (path ! (project . dir / "src" / "bin")) ? ; let out_path = path ! (project . dir / "src" / "bin" / format ! ("{bin}.rs")) ; if ! out_path . exists () || fs :: read_to_string (& out_path) ? != source { fs :: write (path ! (project . dir / "src" / "bin" / format ! ("{bin}.rs")) , source ,) ? ; } let workspace_cargo_lock = path ! (project . workspace / "Cargo.lock") ; if workspace_cargo_lock . exists () { let _ = fs :: copy (workspace_cargo_lock , path ! (project . dir / "Cargo.lock")) ; } else { let _ = cargo :: cargo (& project) . arg ("generate-lockfile") . status () ; } let workspace_dot_cargo_config_toml = path ! (project . workspace / ".cargo" / "config.toml") ; if workspace_dot_cargo_config_toml . exists () { let dot_cargo_folder = path ! (project . dir / ".cargo") ; fs :: create_dir_all (& dot_cargo_folder) ? ; let _ = fs :: copy (workspace_dot_cargo_config_toml , path ! (dot_cargo_folder / "config.toml") ,) ; } Ok ((project . dir . as_ref () . into () , path ! (project . target_dir / "hfplus_trybuild") , project . features ,)) } } # [cfg (feature = "deploy")] # [doc (hidden)] pub mod trybuild_rewriters { pub use syn :: visit_mut :: VisitMut ; pub use crate :: deploy :: trybuild_rewriters :: ReplaceCrateNameWithStaged ; # [cfg (stageleft_macro)] impl VisitMut for ReplaceCrateNameWithStaged { fn visit_type_path_mut (& mut self , i : & mut syn :: TypePath) { if let Some (first) = i . path . segments . first () { if first . ident == self . crate_name { let tail = i . path . segments . iter () . skip (1) . collect :: < Vec < _ > > () ; * i = syn :: parse_quote ! (crate :: __staged # (::# tail) *) ; } } syn :: visit_mut :: visit_type_path_mut (self , i) ; } } pub use crate :: deploy :: trybuild_rewriters :: ReplaceCrateWithOrig ; # [cfg (stageleft_macro)] impl VisitMut for ReplaceCrateWithOrig { fn visit_item_use_mut (& mut self , i : & mut syn :: ItemUse) { if let syn :: UseTree :: Path (p) = & mut i . tree { if p . ident == "crate" { p . ident = syn :: Ident :: new (& self . crate_name , p . ident . span ()) ; i . leading_colon = Some (Default :: default ()) ; } } syn :: visit_mut :: visit_item_use_mut (self , i) ; } } } # [cfg (feature = "deploy")] pub use trybuild :: init_test ; # [cfg (feature = "deploy")] pub mod deploy_graph { pub use std :: cell :: RefCell ; pub use std :: collections :: HashMap ; pub use std :: future :: Future ; pub use std :: io :: Error ; pub use std :: pin :: Pin ; pub use std :: rc :: Rc ; pub use std :: sync :: Arc ; pub use hydro_deploy :: custom_service :: CustomClientPort ; pub use hydro_deploy :: hydroflow_crate :: ports :: { DemuxSink , HydroflowSink , HydroflowSource , TaggedSource , } ; pub use hydro_deploy :: hydroflow_crate :: tracing_options :: TracingOptions ; pub use hydro_deploy :: hydroflow_crate :: HydroflowCrateService ; pub use hydro_deploy :: { CustomService , Deployment , Host , HydroflowCrate } ; pub use hydroflow :: bytes :: Bytes ; pub use hydroflow :: futures :: { Sink , SinkExt , Stream , StreamExt } ; pub use hydroflow :: util :: deploy :: { ConnectedSink , ConnectedSource } ; pub use hydroflow_lang :: graph :: HydroflowGraph ; pub use nameof :: name_of ; pub use serde :: de :: DeserializeOwned ; pub use serde :: Serialize ; pub use stageleft :: { QuotedWithContext , RuntimeData } ; pub use tokio :: sync :: RwLock ; pub use super :: trybuild :: create_graph_trybuild ; pub use super :: { ClusterSpec , Deploy , ExternalSpec , IntoProcessSpec , Node , ProcessSpec , RegisterPort } ; pub use crate :: __staged :: deploy_runtime :: * ; pub use crate :: deploy :: deploy_graph :: HydroDeploy ; # [cfg (stageleft_macro)] impl < 'a > Deploy < 'a > for HydroDeploy { type InstantiateEnv = Deployment ; type CompileEnv = () ; type Process = DeployNode ; type Cluster = DeployCluster ; type ExternalProcess = DeployExternal ; type Meta = HashMap < usize , Vec < u32 > > ; type GraphId = () ; type Port = String ; type ExternalRawPort = CustomClientPort ; fn allocate_process_port (process : & Self :: Process) -> Self :: Port { process . next_port () } fn allocate_cluster_port (cluster : & Self :: Cluster) -> Self :: Port { cluster . next_port () } fn allocate_external_port (external : & Self :: ExternalProcess) -> Self :: Port { external . next_port () } fn o2o_sink_source (_env : & () , _p1 : & Self :: Process , p1_port : & Self :: Port , _p2 : & Self :: Process , p2_port : & Self :: Port ,) -> (syn :: Expr , syn :: Expr) { let p1_port = p1_port . as_str () ; let p2_port = p2_port . as_str () ; deploy_o2o (RuntimeData :: new ("__hydroflow_plus_trybuild_cli") , p1_port , p2_port ,) } fn o2o_connect (p1 : & Self :: Process , p1_port : & Self :: Port , p2 : & Self :: Process , p2_port : & Self :: Port ,) -> Box < dyn FnOnce () > { let p1 = p1 . clone () ; let p1_port = p1_port . clone () ; let p2 = p2 . clone () ; let p2_port = p2_port . clone () ; Box :: new (move | | { let self_underlying_borrow = p1 . underlying . borrow () ; let self_underlying = self_underlying_borrow . as_ref () . unwrap () ; let source_port = self_underlying . try_read () . unwrap () . get_port (p1_port . clone () , self_underlying) ; let other_underlying_borrow = p2 . underlying . borrow () ; let other_underlying = other_underlying_borrow . as_ref () . unwrap () ; let recipient_port = other_underlying . try_read () . unwrap () . get_port (p2_port . clone () , other_underlying) ; source_port . send_to (& recipient_port) }) } fn o2m_sink_source (_env : & () , _p1 : & Self :: Process , p1_port : & Self :: Port , _c2 : & Self :: Cluster , c2_port : & Self :: Port ,) -> (syn :: Expr , syn :: Expr) { let p1_port = p1_port . as_str () ; let c2_port = c2_port . as_str () ; deploy_o2m (RuntimeData :: new ("__hydroflow_plus_trybuild_cli") , p1_port , c2_port ,) } fn o2m_connect (p1 : & Self :: Process , p1_port : & Self :: Port , c2 : & Self :: Cluster , c2_port : & Self :: Port ,) -> Box < dyn FnOnce () > { let p1 = p1 . clone () ; let p1_port = p1_port . clone () ; let c2 = c2 . clone () ; let c2_port = c2_port . clone () ; Box :: new (move | | { let self_underlying_borrow = p1 . underlying . borrow () ; let self_underlying = self_underlying_borrow . as_ref () . unwrap () ; let source_port = self_underlying . try_read () . unwrap () . get_port (p1_port . clone () , self_underlying) ; let recipient_port = DemuxSink { demux : c2 . members . borrow () . iter () . enumerate () . map (| (id , c) | { let n = c . underlying . try_read () . unwrap () ; (id as u32 , Arc :: new (n . get_port (c2_port . clone () , & c . underlying)) as Arc < dyn HydroflowSink + 'static > ,) }) . collect () , } ; source_port . send_to (& recipient_port) }) } fn m2o_sink_source (_env : & () , _c1 : & Self :: Cluster , c1_port : & Self :: Port , _p2 : & Self :: Process , p2_port : & Self :: Port ,) -> (syn :: Expr , syn :: Expr) { let c1_port = c1_port . as_str () ; let p2_port = p2_port . as_str () ; deploy_m2o (RuntimeData :: new ("__hydroflow_plus_trybuild_cli") , c1_port , p2_port ,) } fn m2o_connect (c1 : & Self :: Cluster , c1_port : & Self :: Port , p2 : & Self :: Process , p2_port : & Self :: Port ,) -> Box < dyn FnOnce () > { let c1 = c1 . clone () ; let c1_port = c1_port . clone () ; let p2 = p2 . clone () ; let p2_port = p2_port . clone () ; Box :: new (move | | { let other_underlying_borrow = p2 . underlying . borrow () ; let other_underlying = other_underlying_borrow . as_ref () . unwrap () ; let recipient_port = other_underlying . try_read () . unwrap () . get_port (p2_port . clone () , other_underlying) . merge () ; for (i , node) in c1 . members . borrow () . iter () . enumerate () { let source_port = node . underlying . try_read () . unwrap () . get_port (c1_port . clone () , & node . underlying) ; TaggedSource { source : Arc :: new (source_port) , tag : i as u32 , } . send_to (& recipient_port) ; } }) } fn m2m_sink_source (_env : & () , _c1 : & Self :: Cluster , c1_port : & Self :: Port , _c2 : & Self :: Cluster , c2_port : & Self :: Port ,) -> (syn :: Expr , syn :: Expr) { let c1_port = c1_port . as_str () ; let c2_port = c2_port . as_str () ; deploy_m2m (RuntimeData :: new ("__hydroflow_plus_trybuild_cli") , c1_port , c2_port ,) } fn m2m_connect (c1 : & Self :: Cluster , c1_port : & Self :: Port , c2 : & Self :: Cluster , c2_port : & Self :: Port ,) -> Box < dyn FnOnce () > { let c1 = c1 . clone () ; let c1_port = c1_port . clone () ; let c2 = c2 . clone () ; let c2_port = c2_port . clone () ; Box :: new (move | | { for (i , sender) in c1 . members . borrow () . iter () . enumerate () { let source_port = sender . underlying . try_read () . unwrap () . get_port (c1_port . clone () , & sender . underlying) ; let recipient_port = DemuxSink { demux : c2 . members . borrow () . iter () . enumerate () . map (| (id , c) | { let n = c . underlying . try_read () . unwrap () ; (id as u32 , Arc :: new (n . get_port (c2_port . clone () , & c . underlying) . merge ()) as Arc < dyn HydroflowSink + 'static > ,) }) . collect () , } ; TaggedSource { source : Arc :: new (source_port) , tag : i as u32 , } . send_to (& recipient_port) ; } }) } fn e2o_source (_compile_env : & Self :: CompileEnv , _p1 : & Self :: ExternalProcess , p1_port : & Self :: Port , _p2 : & Self :: Process , p2_port : & Self :: Port ,) -> syn :: Expr { let p1_port = p1_port . as_str () ; let p2_port = p2_port . as_str () ; deploy_e2o (RuntimeData :: new ("__hydroflow_plus_trybuild_cli") , p1_port , p2_port ,) } fn e2o_connect (p1 : & Self :: ExternalProcess , p1_port : & Self :: Port , p2 : & Self :: Process , p2_port : & Self :: Port ,) -> Box < dyn FnOnce () > { let p1 = p1 . clone () ; let p1_port = p1_port . clone () ; let p2 = p2 . clone () ; let p2_port = p2_port . clone () ; Box :: new (move | | { let self_underlying_borrow = p1 . underlying . borrow () ; let self_underlying = self_underlying_borrow . as_ref () . unwrap () ; let source_port = self_underlying . try_read () . unwrap () . declare_client (self_underlying) ; let other_underlying_borrow = p2 . underlying . borrow () ; let other_underlying = other_underlying_borrow . as_ref () . unwrap () ; let recipient_port = other_underlying . try_read () . unwrap () . get_port (p2_port . clone () , other_underlying) ; source_port . send_to (& recipient_port) ; p1 . client_ports . borrow_mut () . insert (p1_port . clone () , source_port) ; }) } fn o2e_sink (_compile_env : & Self :: CompileEnv , _p1 : & Self :: Process , p1_port : & Self :: Port , _p2 : & Self :: ExternalProcess , p2_port : & Self :: Port ,) -> syn :: Expr { let p1_port = p1_port . as_str () ; let p2_port = p2_port . as_str () ; deploy_o2e (RuntimeData :: new ("__hydroflow_plus_trybuild_cli") , p1_port , p2_port ,) } fn o2e_connect (p1 : & Self :: Process , p1_port : & Self :: Port , p2 : & Self :: ExternalProcess , p2_port : & Self :: Port ,) -> Box < dyn FnOnce () > { let p1 = p1 . clone () ; let p1_port = p1_port . clone () ; let p2 = p2 . clone () ; let p2_port = p2_port . clone () ; Box :: new (move | | { let self_underlying_borrow = p1 . underlying . borrow () ; let self_underlying = self_underlying_borrow . as_ref () . unwrap () ; let source_port = self_underlying . try_read () . unwrap () . get_port (p1_port . clone () , self_underlying) ; let other_underlying_borrow = p2 . underlying . borrow () ; let other_underlying = other_underlying_borrow . as_ref () . unwrap () ; let recipient_port = other_underlying . try_read () . unwrap () . declare_client (other_underlying) ; source_port . send_to (& recipient_port) ; p2 . client_ports . borrow_mut () . insert (p2_port . clone () , recipient_port) ; }) } fn cluster_ids (_env : & Self :: CompileEnv , of_cluster : usize ,) -> impl QuotedWithContext < 'a , & 'a Vec < u32 > , () > + Copy + 'a { cluster_members (RuntimeData :: new ("__hydroflow_plus_trybuild_cli") , of_cluster ,) } fn cluster_self_id (_env : & Self :: CompileEnv) -> impl QuotedWithContext < 'a , u32 , () > + Copy + 'a { cluster_self_id (RuntimeData :: new ("__hydroflow_plus_trybuild_cli")) } } pub use crate :: deploy :: deploy_graph :: DeployCrateWrapper ; pub use crate :: deploy :: deploy_graph :: TrybuildHost ; # [cfg (stageleft_macro)] impl From < Arc < dyn Host > > for TrybuildHost { fn from (host : Arc < dyn Host >) -> Self { Self { host , display_name : None , rustflags : None , tracing : None , name_hint : None , cluster_idx : None , } } } # [cfg (stageleft_macro)] impl < H : Host + 'static > From < Arc < H > > for TrybuildHost { fn from (host : Arc < H >) -> Self { Self { host , display_name : None , rustflags : None , tracing : None , name_hint : None , cluster_idx : None , } } } # [cfg (stageleft_macro)] impl TrybuildHost { pub fn new (host : Arc < dyn Host >) -> Self { Self { host , display_name : None , rustflags : None , tracing : None , name_hint : None , cluster_idx : None , } } pub fn display_name (self , display_name : impl Into < String >) -> Self { if self . display_name . is_some () { panic ! ("{} already set" , name_of ! (display_name in Self)) ; } Self { display_name : Some (display_name . into ()) , .. self } } pub fn rustflags (self , rustflags : impl Into < String >) -> Self { if self . rustflags . is_some () { panic ! ("{} already set" , name_of ! (rustflags in Self)) ; } Self { rustflags : Some (rustflags . into ()) , .. self } } pub fn tracing (self , tracing : TracingOptions) -> Self { if self . tracing . is_some () { panic ! ("{} already set" , name_of ! (tracing in Self)) ; } Self { tracing : Some (tracing) , .. self } } } # [cfg (stageleft_macro)] impl IntoProcessSpec < '_ , HydroDeploy > for Arc < dyn Host > { type ProcessSpec = TrybuildHost ; fn into_process_spec (self) -> TrybuildHost { TrybuildHost { host : self , display_name : None , rustflags : None , tracing : None , name_hint : None , cluster_idx : None , } } } # [cfg (stageleft_macro)] impl < H : Host + 'static > IntoProcessSpec < '_ , HydroDeploy > for Arc < H > { type ProcessSpec = TrybuildHost ; fn into_process_spec (self) -> TrybuildHost { TrybuildHost { host : self , display_name : None , rustflags : None , tracing : None , name_hint : None , cluster_idx : None , } } } pub use crate :: deploy :: deploy_graph :: DeployExternal ; # [cfg (stageleft_macro)] impl DeployExternal { pub fn take_port (& self , key : usize) -> CustomClientPort { self . client_ports . borrow_mut () . remove (self . allocated_ports . borrow () . get (& key) . unwrap ()) . unwrap () } } # [cfg (stageleft_macro)] impl < 'a > RegisterPort < 'a , HydroDeploy > for DeployExternal { fn register (& self , key : usize , port : < HydroDeploy as Deploy > :: Port) { self . allocated_ports . borrow_mut () . insert (key , port) ; } fn raw_port (& self , key : usize) -> < HydroDeploy as Deploy > :: ExternalRawPort { self . client_ports . borrow_mut () . remove (self . allocated_ports . borrow () . get (& key) . unwrap ()) . unwrap () } fn as_bytes_sink (& self , key : usize ,) -> impl Future < Output = Pin < Box < dyn Sink < Bytes , Error = Error > > > > + 'a { let port = self . raw_port (key) ; async move { let sink = port . connect () . await . into_sink () ; sink as Pin < Box < dyn Sink < Bytes , Error = Error > > > } } fn as_bincode_sink < T : Serialize + 'static > (& self , key : usize ,) -> impl Future < Output = Pin < Box < dyn Sink < T , Error = Error > > > > + 'a { let port = self . raw_port (key) ; async move { let sink = port . connect () . await . into_sink () ; Box :: pin (sink . with (| item | async move { Ok (bincode :: serialize (& item) . unwrap () . into ()) })) as Pin < Box < dyn Sink < T , Error = Error > > > } } fn as_bytes_source (& self , key : usize ,) -> impl Future < Output = Pin < Box < dyn Stream < Item = Bytes > > > > + 'a { let port = self . raw_port (key) ; async move { let source = port . connect () . await . into_source () ; Box :: pin (source . map (| r | r . unwrap () . freeze ())) as Pin < Box < dyn Stream < Item = Bytes > > > } } fn as_bincode_source < T : DeserializeOwned + 'static > (& self , key : usize ,) -> impl Future < Output = Pin < Box < dyn Stream < Item = T > > > > + 'a { let port = self . raw_port (key) ; async move { let source = port . connect () . await . into_source () ; Box :: pin (source . map (| item | bincode :: deserialize (& item . unwrap ()) . unwrap ())) as Pin < Box < dyn Stream < Item = T > > > } } } # [cfg (stageleft_macro)] impl Node for DeployExternal { type Port = String ; type Meta = HashMap < usize , Vec < u32 > > ; type InstantiateEnv = Deployment ; fn next_port (& self) -> Self :: Port { let next_port = * self . next_port . borrow () ; * self . next_port . borrow_mut () += 1 ; format ! ("port_{}" , next_port) } fn instantiate (& self , env : & mut Self :: InstantiateEnv , _meta : & mut Self :: Meta , _graph : HydroflowGraph , _extra_stmts : Vec < syn :: Stmt > ,) { let service = env . CustomService (self . host . clone () , vec ! []) ; * self . underlying . borrow_mut () = Some (service) ; } fn update_meta (& mut self , _meta : & Self :: Meta) { } } # [cfg (stageleft_macro)] impl ExternalSpec < '_ , HydroDeploy > for Arc < dyn Host > { fn build (self , _id : usize , _name_hint : & str) -> DeployExternal { DeployExternal { next_port : Rc :: new (RefCell :: new (0)) , host : self , underlying : Rc :: new (RefCell :: new (None)) , allocated_ports : Rc :: new (RefCell :: new (HashMap :: new ())) , client_ports : Rc :: new (RefCell :: new (HashMap :: new ())) , } } } # [cfg (stageleft_macro)] impl < H : Host + 'static > ExternalSpec < '_ , HydroDeploy > for Arc < H > { fn build (self , _id : usize , _name_hint : & str) -> DeployExternal { DeployExternal { next_port : Rc :: new (RefCell :: new (0)) , host : self , underlying : Rc :: new (RefCell :: new (None)) , allocated_ports : Rc :: new (RefCell :: new (HashMap :: new ())) , client_ports : Rc :: new (RefCell :: new (HashMap :: new ())) , } } } pub use crate :: deploy :: deploy_graph :: CrateOrTrybuild ; pub use crate :: deploy :: deploy_graph :: DeployNode ; # [cfg (stageleft_macro)] impl DeployCrateWrapper for DeployNode { fn underlying (& self) -> Arc < RwLock < HydroflowCrateService > > { self . underlying . borrow () . as_ref () . unwrap () . clone () } } # [cfg (stageleft_macro)] impl Node for DeployNode { type Port = String ; type Meta = HashMap < usize , Vec < u32 > > ; type InstantiateEnv = Deployment ; fn next_port (& self) -> String { let next_port = * self . next_port . borrow () ; * self . next_port . borrow_mut () += 1 ; format ! ("port_{}" , next_port) } fn update_meta (& mut self , meta : & Self :: Meta) { let underlying_node = self . underlying . borrow () ; let mut n = underlying_node . as_ref () . unwrap () . try_write () . unwrap () ; n . update_meta (HydroflowPlusMeta { clusters : meta . clone () , cluster_id : None , subgraph_id : self . id , }) ; } fn instantiate (& self , env : & mut Self :: InstantiateEnv , _meta : & mut Self :: Meta , graph : HydroflowGraph , extra_stmts : Vec < syn :: Stmt > ,) { let service = match self . service_spec . borrow_mut () . take () . unwrap () { CrateOrTrybuild :: Crate (c) => c , CrateOrTrybuild :: Trybuild (trybuild) => { let (bin_name , (dir , target_dir , features)) = create_graph_trybuild (graph , extra_stmts , & trybuild . name_hint) ; create_trybuild_service (trybuild , & dir , & target_dir , & features , & bin_name) } } ; * self . underlying . borrow_mut () = Some (env . add_service (service)) ; } } pub use crate :: deploy :: deploy_graph :: DeployClusterNode ; # [cfg (stageleft_macro)] impl DeployCrateWrapper for DeployClusterNode { fn underlying (& self) -> Arc < RwLock < HydroflowCrateService > > { self . underlying . clone () } } pub use crate :: deploy :: deploy_graph :: DeployCluster ; # [cfg (stageleft_macro)] impl DeployCluster { pub fn members (& self) -> Vec < DeployClusterNode > { self . members . borrow () . clone () } } # [cfg (stageleft_macro)] impl Node for DeployCluster { type Port = String ; type Meta = HashMap < usize , Vec < u32 > > ; type InstantiateEnv = Deployment ; fn next_port (& self) -> String { let next_port = * self . next_port . borrow () ; * self . next_port . borrow_mut () += 1 ; format ! ("port_{}" , next_port) } fn instantiate (& self , env : & mut Self :: InstantiateEnv , meta : & mut Self :: Meta , graph : HydroflowGraph , extra_stmts : Vec < syn :: Stmt > ,) { let has_trybuild = self . cluster_spec . borrow () . as_ref () . unwrap () . iter () . any (| spec | matches ! (spec , CrateOrTrybuild :: Trybuild { .. })) ; let maybe_trybuild = if has_trybuild { Some (create_graph_trybuild (graph , extra_stmts , & self . name_hint)) } else { None } ; let cluster_nodes = self . cluster_spec . borrow_mut () . take () . unwrap () . into_iter () . map (| spec | { let service = match spec { CrateOrTrybuild :: Crate (c) => c , CrateOrTrybuild :: Trybuild (trybuild) => { let (bin_name , (dir , target_dir , features)) = maybe_trybuild . as_ref () . unwrap () ; create_trybuild_service (trybuild , dir , target_dir , features , bin_name) } } ; env . add_service (service) }) . collect :: < Vec < _ > > () ; meta . insert (self . id , (0 .. (cluster_nodes . len () as u32)) . collect ()) ; * self . members . borrow_mut () = cluster_nodes . into_iter () . map (| n | DeployClusterNode { underlying : n }) . collect () ; } fn update_meta (& mut self , meta : & Self :: Meta) { for (cluster_id , node) in self . members . borrow () . iter () . enumerate () { let mut n = node . underlying . try_write () . unwrap () ; n . update_meta (HydroflowPlusMeta { clusters : meta . clone () , cluster_id : Some (cluster_id as u32) , subgraph_id : self . id , }) ; } } } pub use crate :: deploy :: deploy_graph :: DeployProcessSpec ; # [cfg (stageleft_macro)] impl DeployProcessSpec { pub fn new (t : HydroflowCrate) -> Self { Self (t) } } # [cfg (stageleft_macro)] impl ProcessSpec < '_ , HydroDeploy > for DeployProcessSpec { fn build (self , id : usize , _name_hint : & str) -> DeployNode { DeployNode { id , next_port : Rc :: new (RefCell :: new (0)) , service_spec : Rc :: new (RefCell :: new (Some (CrateOrTrybuild :: Crate (self . 0)))) , underlying : Rc :: new (RefCell :: new (None)) , } } } # [cfg (stageleft_macro)] impl ProcessSpec < '_ , HydroDeploy > for TrybuildHost { fn build (mut self , id : usize , name_hint : & str) -> DeployNode { self . name_hint = Some (format ! ("{} (process {id})" , name_hint)) ; DeployNode { id , next_port : Rc :: new (RefCell :: new (0)) , service_spec : Rc :: new (RefCell :: new (Some (CrateOrTrybuild :: Trybuild (self)))) , underlying : Rc :: new (RefCell :: new (None)) , } } } pub use crate :: deploy :: deploy_graph :: DeployClusterSpec ; # [cfg (stageleft_macro)] impl DeployClusterSpec { pub fn new (crates : Vec < HydroflowCrate >) -> Self { Self (crates) } } # [cfg (stageleft_macro)] impl ClusterSpec < '_ , HydroDeploy > for DeployClusterSpec { fn build (self , id : usize , _name_hint : & str) -> DeployCluster { DeployCluster { id , next_port : Rc :: new (RefCell :: new (0)) , cluster_spec : Rc :: new (RefCell :: new (Some (self . 0 . into_iter () . map (CrateOrTrybuild :: Crate) . collect () ,))) , members : Rc :: new (RefCell :: new (vec ! [])) , name_hint : None , } } } # [cfg (stageleft_macro)] impl < T : Into < TrybuildHost > , I : IntoIterator < Item = T > > ClusterSpec < '_ , HydroDeploy > for I { fn build (self , id : usize , name_hint : & str) -> DeployCluster { let name_hint = format ! ("{} (cluster {id})" , name_hint) ; DeployCluster { id , next_port : Rc :: new (RefCell :: new (0)) , cluster_spec : Rc :: new (RefCell :: new (Some (self . into_iter () . enumerate () . map (| (idx , b) | { let mut b = b . into () ; b . name_hint = Some (name_hint . clone ()) ; b . cluster_idx = Some (idx) ; CrateOrTrybuild :: Trybuild (b) }) . collect () ,))) , members : Rc :: new (RefCell :: new (vec ! [])) , name_hint : Some (name_hint) , } } } pub fn create_trybuild_service (trybuild : TrybuildHost , dir : & std :: path :: PathBuf , target_dir : & std :: path :: PathBuf , features : & Option < Vec < String > > , bin_name : & str ,) -> HydroflowCrate { let mut ret = HydroflowCrate :: new (dir , trybuild . host) . target_dir (target_dir) . bin (bin_name) . no_default_features () ; if let Some (display_name) = trybuild . display_name { ret = ret . display_name (display_name) ; } else if let Some (name_hint) = trybuild . name_hint { if let Some (cluster_idx) = trybuild . cluster_idx { ret = ret . display_name (format ! ("{} / {}" , name_hint , cluster_idx)) ; } else { ret = ret . display_name (name_hint) ; } } if let Some (rustflags) = trybuild . rustflags { ret = ret . rustflags (rustflags) ; } if let Some (tracing) = trybuild . tracing { ret = ret . tracing (tracing) ; } if let Some (features) = features { ret = ret . features (features . clone ()) ; } ret } } # [cfg (feature = "deploy")] pub use deploy_graph :: * ; pub mod in_memory_graph { pub use hydroflow_lang :: graph :: HydroflowGraph ; pub use super :: { LocalDeploy , Node , ProcessSpec } ; pub use crate :: deploy :: in_memory_graph :: SingleProcessGraph ; # [cfg (stageleft_macro)] impl LocalDeploy < '_ > for SingleProcessGraph { type Process = SingleNode ; type Cluster = SingleNode ; type ExternalProcess = SingleNode ; type Meta = () ; type GraphId = () ; fn has_trivial_node () -> bool { true } fn trivial_process (_id : usize) -> Self :: Process { SingleNode { } } fn trivial_cluster (_id : usize) -> Self :: Cluster { SingleNode { } } } # [cfg (stageleft_macro)] impl ProcessSpec < '_ , SingleProcessGraph > for () { fn build (self , _id : usize , _name_hint : & str) -> SingleNode { SingleNode { } } } pub use crate :: deploy :: in_memory_graph :: SingleNode ; # [cfg (stageleft_macro)] impl Node for SingleNode { type Port = () ; type Meta = () ; type InstantiateEnv = () ; fn next_port (& self) { panic ! () ; } fn update_meta (& mut self , _meta : & Self :: Meta) { } fn instantiate (& self , _env : & mut Self :: InstantiateEnv , _meta : & mut Self :: Meta , _graph : HydroflowGraph , _extra_stmts : Vec < syn :: Stmt > ,) { } } pub use crate :: deploy :: in_memory_graph :: MultiGraph ; # [cfg (stageleft_macro)] impl LocalDeploy < '_ > for MultiGraph { type Process = MultiNode ; type Cluster = MultiNode ; type ExternalProcess = MultiNode ; type Meta = () ; type GraphId = usize ; fn has_trivial_node () -> bool { true } fn trivial_process (_id : usize) -> Self :: Process { MultiNode { } } fn trivial_cluster (_id : usize) -> Self :: Cluster { MultiNode { } } } # [cfg (stageleft_macro)] impl ProcessSpec < '_ , MultiGraph > for () { fn build (self , _id : usize , _name_hint : & str) -> MultiNode { MultiNode { } } } pub use crate :: deploy :: in_memory_graph :: MultiNode ; # [cfg (stageleft_macro)] impl Node for MultiNode { type Port = () ; type Meta = () ; type InstantiateEnv = () ; fn next_port (& self) { panic ! () ; } fn update_meta (& mut self , _meta : & Self :: Meta) { } fn instantiate (& self , _env : & mut Self :: InstantiateEnv , _meta : & mut Self :: Meta , _graph : HydroflowGraph , _extra_stmts : Vec < syn :: Stmt > ,) { } } } pub use in_memory_graph :: * ; pub use crate :: deploy :: LocalDeploy ; pub use crate :: deploy :: Deploy ; # [cfg (stageleft_macro)] impl < 'a , T : Deploy < 'a , Process = N , Cluster = C , ExternalProcess = E , Meta = M , GraphId = R > , N : Node < Meta = M > , C : Node < Meta = M > , E : Node < Meta = M > , M : Default , R , > LocalDeploy < 'a > for T { type Process = N ; type Cluster = C ; type ExternalProcess = E ; type Meta = M ; type GraphId = R ; fn has_trivial_node () -> bool { < T as Deploy < 'a > > :: has_trivial_node () } fn trivial_process (id : usize) -> Self :: Process { < T as Deploy < 'a > > :: trivial_process (id) } fn trivial_cluster (id : usize) -> Self :: Cluster { < T as Deploy < 'a > > :: trivial_cluster (id) } } pub use crate :: deploy :: ProcessSpec ; pub use crate :: deploy :: IntoProcessSpec ; # [cfg (stageleft_macro)] impl < 'a , D : LocalDeploy < 'a > + ? Sized , T : ProcessSpec < 'a , D > > IntoProcessSpec < 'a , D > for T { type ProcessSpec = T ; fn into_process_spec (self) -> Self :: ProcessSpec { self } } pub use crate :: deploy :: ClusterSpec ; pub use crate :: deploy :: ExternalSpec ; pub use crate :: deploy :: Node ; pub use crate :: deploy :: RegisterPort ; } pub mod deploy_runtime { pub use std :: collections :: HashMap ; pub use hydroflow :: util :: deploy :: { ConnectedDemux , ConnectedDirect , ConnectedSink , ConnectedSource , ConnectedTagged , DeployPorts , } ; pub use serde :: { Deserialize , Serialize } ; pub use stageleft :: { q , QuotedWithContext , RuntimeData } ; pub use crate :: deploy_runtime :: HydroflowPlusMeta ; pub fn cluster_members (cli : RuntimeData < & DeployPorts < HydroflowPlusMeta > > , of_cluster : usize ,) -> impl QuotedWithContext < & Vec < u32 > , () > + Copy { q ! (cli . meta . clusters . get (& of_cluster) . unwrap ()) } pub fn cluster_self_id (cli : RuntimeData < & DeployPorts < HydroflowPlusMeta > > ,) -> impl QuotedWithContext < u32 , () > + Copy { q ! (cli . meta . cluster_id . expect ("Tried to read Cluster ID on a non-cluster node")) } pub fn deploy_o2o (env : RuntimeData < & DeployPorts < HydroflowPlusMeta > > , p1_port : & str , p2_port : & str ,) -> (syn :: Expr , syn :: Expr) { ({ q ! ({ env . port (p1_port) . connect_local_blocking ::< ConnectedDirect > () . into_sink () }) . splice_untyped_ctx (& ()) } , { q ! ({ env . port (p2_port) . connect_local_blocking ::< ConnectedDirect > () . into_source () }) . splice_untyped_ctx (& ()) } ,) } pub fn deploy_o2m (env : RuntimeData < & DeployPorts < HydroflowPlusMeta > > , p1_port : & str , c2_port : & str ,) -> (syn :: Expr , syn :: Expr) { ({ q ! ({ env . port (p1_port) . connect_local_blocking ::< ConnectedDemux < ConnectedDirect >> () . into_sink () }) . splice_untyped_ctx (& ()) } , { q ! ({ env . port (c2_port) . connect_local_blocking ::< ConnectedDirect > () . into_source () }) . splice_untyped_ctx (& ()) } ,) } pub fn deploy_m2o (env : RuntimeData < & DeployPorts < HydroflowPlusMeta > > , c1_port : & str , p2_port : & str ,) -> (syn :: Expr , syn :: Expr) { ({ q ! ({ env . port (c1_port) . connect_local_blocking ::< ConnectedDirect > () . into_sink () }) . splice_untyped_ctx (& ()) } , { q ! ({ env . port (p2_port) . connect_local_blocking ::< ConnectedTagged < ConnectedDirect >> () . into_source () }) . splice_untyped_ctx (& ()) } ,) } pub fn deploy_m2m (env : RuntimeData < & DeployPorts < HydroflowPlusMeta > > , c1_port : & str , c2_port : & str ,) -> (syn :: Expr , syn :: Expr) { ({ q ! ({ env . port (c1_port) . connect_local_blocking ::< ConnectedDemux < ConnectedDirect >> () . into_sink () }) . splice_untyped_ctx (& ()) } , { q ! ({ env . port (c2_port) . connect_local_blocking ::< ConnectedTagged < ConnectedDirect >> () . into_source () }) . splice_untyped_ctx (& ()) } ,) } pub fn deploy_e2o (env : RuntimeData < & DeployPorts < HydroflowPlusMeta > > , _e1_port : & str , p2_port : & str ,) -> syn :: Expr { q ! ({ env . port (p2_port) . connect_local_blocking ::< ConnectedDirect > () . into_source () }) . splice_untyped_ctx (& ()) } pub fn deploy_o2e (env : RuntimeData < & DeployPorts < HydroflowPlusMeta > > , p1_port : & str , _e2_port : & str ,) -> syn :: Expr { q ! ({ env . port (p1_port) . connect_local_blocking ::< ConnectedDirect > () . into_sink () }) . splice_untyped_ctx (& ()) } } pub mod cycle { pub use crate :: __staged :: location :: { Location , LocationId } ; pub use crate :: __staged :: staging_util :: Invariant ; pub use crate :: cycle :: ForwardRefMarker ; pub use crate :: cycle :: TickCycleMarker ; pub use crate :: cycle :: DeferTick ; pub use crate :: cycle :: CycleComplete ; pub use crate :: cycle :: CycleCollection ; pub use crate :: cycle :: CycleCollectionWithInitial ; pub use crate :: cycle :: ForwardRef ; # [cfg (stageleft_macro)] impl < 'a , S : CycleComplete < 'a , ForwardRefMarker > > ForwardRef < 'a , S > { pub fn complete (self , stream : S) { let ident = self . ident ; S :: complete (stream , ident , self . expected_location) } } pub use crate :: cycle :: TickCycle ; # [cfg (stageleft_macro)] impl < 'a , S : CycleComplete < 'a , TickCycleMarker > + DeferTick > TickCycle < 'a , S > { pub fn complete_next_tick (self , stream : S) { let ident = self . ident ; S :: complete (stream . defer_tick () , ident , self . expected_location) } } } pub mod builder { pub use std :: cell :: RefCell ; pub use std :: collections :: HashMap ; pub use std :: marker :: PhantomData ; pub use std :: rc :: Rc ; # [cfg (feature = "build")] pub use compiled :: CompiledFlow ; # [cfg (feature = "build")] pub use deploy :: { DeployFlow , DeployResult } ; pub use stageleft :: * ; # [cfg (feature = "build")] pub use crate :: __staged :: deploy :: { ClusterSpec , Deploy , ExternalSpec , IntoProcessSpec , LocalDeploy } ; pub use crate :: __staged :: ir :: HfPlusLeaf ; pub use crate :: __staged :: location :: { Cluster , ExternalProcess , Process } ; pub use crate :: __staged :: staging_util :: Invariant ; # [cfg (feature = "build")] pub mod built { pub use std :: collections :: { BTreeMap , HashMap } ; pub use std :: marker :: PhantomData ; pub use hydroflow_lang :: graph :: { eliminate_extra_unions_tees , HydroflowGraph } ; pub use super :: compiled :: CompiledFlow ; pub use super :: deploy :: { DeployFlow , DeployResult } ; pub use crate :: __staged :: deploy :: { ClusterSpec , Deploy , ExternalSpec , IntoProcessSpec , LocalDeploy } ; pub use crate :: __staged :: ir :: HfPlusLeaf ; pub use crate :: __staged :: location :: { Cluster , ExternalProcess , Process } ; pub use crate :: __staged :: staging_util :: Invariant ; pub use crate :: builder :: built :: BuiltFlow ; # [cfg (stageleft_macro)] impl Drop for BuiltFlow < '_ > { fn drop (& mut self) { if ! self . used { panic ! ("Dropped BuiltFlow without instantiating, you may have forgotten to call `compile` or `deploy`.") ; } } } pub fn build_inner (ir : & mut Vec < HfPlusLeaf >) -> BTreeMap < usize , HydroflowGraph > { let mut builders = BTreeMap :: new () ; let mut built_tees = HashMap :: new () ; let mut next_stmt_id = 0 ; for leaf in ir { leaf . emit (& mut builders , & mut built_tees , & mut next_stmt_id) ; } builders . into_iter () . map (| (k , v) | { let (mut flat_graph , _ , _) = v . build () ; eliminate_extra_unions_tees (& mut flat_graph) ; (k , flat_graph) }) . collect () } # [cfg (stageleft_macro)] impl < 'a > BuiltFlow < 'a > { pub fn ir (& self) -> & Vec < HfPlusLeaf > { & self . ir } pub fn optimize_with (mut self , f : impl FnOnce (Vec < HfPlusLeaf >) -> Vec < HfPlusLeaf >) -> Self { self . used = true ; BuiltFlow { ir : f (std :: mem :: take (& mut self . ir)) , processes : std :: mem :: take (& mut self . processes) , clusters : std :: mem :: take (& mut self . clusters) , used : false , _phantom : PhantomData , } } pub fn with_default_optimize < D : LocalDeploy < 'a > > (self) -> DeployFlow < 'a , D > { self . optimize_with (crate :: rewrites :: persist_pullup :: persist_pullup) . into_deploy () } fn into_deploy < D : LocalDeploy < 'a > > (mut self) -> DeployFlow < 'a , D > { self . used = true ; let processes = if D :: has_trivial_node () { self . processes . iter () . map (| id | (* id , D :: trivial_process (* id))) . collect () } else { HashMap :: new () } ; let clusters = if D :: has_trivial_node () { self . clusters . iter () . map (| id | (* id , D :: trivial_cluster (* id))) . collect () } else { HashMap :: new () } ; DeployFlow { ir : std :: mem :: take (& mut self . ir) , nodes : processes , clusters , externals : HashMap :: new () , used : false , _phantom : PhantomData , } } pub fn with_process < P , D : LocalDeploy < 'a > > (self , process : & Process < P > , spec : impl IntoProcessSpec < 'a , D > ,) -> DeployFlow < 'a , D > { self . into_deploy () . with_process (process , spec) } pub fn with_external < P , D : LocalDeploy < 'a > > (self , process : & ExternalProcess < P > , spec : impl ExternalSpec < 'a , D > ,) -> DeployFlow < 'a , D > { self . into_deploy () . with_external (process , spec) } pub fn with_cluster < C , D : LocalDeploy < 'a > > (self , cluster : & Cluster < C > , spec : impl ClusterSpec < 'a , D > ,) -> DeployFlow < 'a , D > { self . into_deploy () . with_cluster (cluster , spec) } pub fn compile < D : Deploy < 'a > > (self , env : & D :: CompileEnv) -> CompiledFlow < 'a , D :: GraphId > { self . into_deploy :: < D > () . compile (env) } pub fn compile_no_network < D : LocalDeploy < 'a > > (self) -> CompiledFlow < 'a , D :: GraphId > { self . into_deploy :: < D > () . compile_no_network () } pub fn deploy < D : Deploy < 'a , CompileEnv = () > > (self , env : & mut D :: InstantiateEnv ,) -> DeployResult < 'a , D > { self . into_deploy :: < D > () . deploy (env) } } } # [cfg (feature = "build")] pub mod compiled { pub use std :: collections :: BTreeMap ; pub use std :: marker :: PhantomData ; pub use hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydroflow_lang :: graph :: { partition_graph , HydroflowGraph } ; pub use proc_macro2 :: TokenStream ; pub use quote :: quote ; pub use stageleft :: runtime_support :: FreeVariableWithContext ; pub use stageleft :: QuotedWithContext ; pub use crate :: __staged :: staging_util :: Invariant ; pub use crate :: builder :: compiled :: CompiledFlow ; # [cfg (stageleft_macro)] impl < ID > CompiledFlow < '_ , ID > { pub fn hydroflow_ir (& self) -> & BTreeMap < usize , HydroflowGraph > { & self . hydroflow_ir } pub fn take_ir (self) -> BTreeMap < usize , HydroflowGraph > { self . hydroflow_ir } } # [cfg (stageleft_macro)] impl < 'a > CompiledFlow < 'a , usize > { pub fn with_dynamic_id (self , id : impl QuotedWithContext < 'a , usize , () > ,) -> CompiledFlowWithId < 'a > { let hydroflow_crate = proc_macro_crate :: crate_name ("hydroflow_plus") . expect ("hydroflow_plus should be present in `Cargo.toml`") ; let root = match hydroflow_crate { proc_macro_crate :: FoundCrate :: Itself => quote ! { hydroflow_plus :: hydroflow } , proc_macro_crate :: FoundCrate :: Name (name) => { let ident = syn :: Ident :: new (& name , proc_macro2 :: Span :: call_site ()) ; quote ! { # ident :: hydroflow } } } ; let mut conditioned_tokens = None ; for (subgraph_id , flat_graph) in self . hydroflow_ir { let partitioned_graph = partition_graph (flat_graph) . expect ("Failed to partition (cycle detected).") ; let mut diagnostics = Vec :: new () ; let tokens = partitioned_graph . as_code (& root , true , quote :: quote ! () , & mut diagnostics) ; let my_extra_stmts = self . extra_stmts . get (& subgraph_id) . cloned () . unwrap_or_default () ; if let Some (conditioned_tokens) = conditioned_tokens . as_mut () { * conditioned_tokens = syn :: parse_quote ! { # conditioned_tokens else if __given_id == # subgraph_id { # (# my_extra_stmts) * # tokens } } ; } else { conditioned_tokens = Some (syn :: parse_quote ! { if __given_id == # subgraph_id { # (# my_extra_stmts) * # tokens } }) ; } } let conditioned_tokens : TokenStream = conditioned_tokens . unwrap () ; let id = id . splice_untyped () ; CompiledFlowWithId { tokens : syn :: parse_quote ! ({ let __given_id = # id ; # conditioned_tokens else { panic ! ("Invalid node id: {}" , __given_id) ; } }) , _phantom : PhantomData , } } } # [cfg (stageleft_macro)] impl < 'a , Ctx > QuotedWithContext < 'a , Hydroflow < 'a > , Ctx > for CompiledFlow < 'a , () > { } # [cfg (stageleft_macro)] impl < 'a , Ctx > FreeVariableWithContext < Ctx > for CompiledFlow < 'a , () > { type O = Hydroflow < 'a > ; fn to_tokens (mut self , _ctx : & Ctx) -> (Option < TokenStream > , Option < TokenStream >) { let hydroflow_crate = proc_macro_crate :: crate_name ("hydroflow_plus") . expect ("hydroflow_plus should be present in `Cargo.toml`") ; let root = match hydroflow_crate { proc_macro_crate :: FoundCrate :: Itself => quote ! { hydroflow_plus :: hydroflow } , proc_macro_crate :: FoundCrate :: Name (name) => { let ident = syn :: Ident :: new (& name , proc_macro2 :: Span :: call_site ()) ; quote ! { # ident :: hydroflow } } } ; if self . hydroflow_ir . len () != 1 { panic ! ("Expected exactly one subgraph in the Hydroflow IR") ; } let flat_graph = self . hydroflow_ir . remove (& 0) . unwrap () ; let partitioned_graph = partition_graph (flat_graph) . expect ("Failed to partition (cycle detected).") ; let mut diagnostics = Vec :: new () ; let tokens = partitioned_graph . as_code (& root , true , quote :: quote ! () , & mut diagnostics) ; (None , Some (tokens)) } } pub use crate :: builder :: compiled :: CompiledFlowWithId ; # [cfg (stageleft_macro)] impl < 'a , Ctx > QuotedWithContext < 'a , Hydroflow < 'a > , Ctx > for CompiledFlowWithId < 'a > { } # [cfg (stageleft_macro)] impl < 'a , Ctx > FreeVariableWithContext < Ctx > for CompiledFlowWithId < 'a > { type O = Hydroflow < 'a > ; fn to_tokens (self , _ctx : & Ctx) -> (Option < TokenStream > , Option < TokenStream >) { (None , Some (self . tokens)) } } } # [cfg (feature = "build")] pub mod deploy { pub use std :: collections :: { BTreeMap , HashMap } ; pub use std :: io :: Error ; pub use std :: marker :: PhantomData ; pub use std :: pin :: Pin ; pub use hydroflow :: bytes :: Bytes ; pub use hydroflow :: futures :: { Sink , Stream } ; pub use proc_macro2 :: Span ; pub use serde :: de :: DeserializeOwned ; pub use serde :: Serialize ; pub use stageleft :: QuotedWithContext ; pub use super :: built :: build_inner ; pub use super :: compiled :: CompiledFlow ; pub use crate :: __staged :: deploy :: { ClusterSpec , Deploy , ExternalSpec , IntoProcessSpec , LocalDeploy , Node , ProcessSpec , RegisterPort , } ; pub use crate :: __staged :: ir :: HfPlusLeaf ; pub use crate :: __staged :: location :: external_process :: { ExternalBincodeSink , ExternalBincodeStream , ExternalBytesPort , } ; pub use crate :: __staged :: location :: { Cluster , ExternalProcess , Location , LocationId , Process } ; pub use crate :: __staged :: staging_util :: Invariant ; pub use crate :: builder :: deploy :: DeployFlow ; # [cfg (stageleft_macro)] impl < 'a , D : LocalDeploy < 'a > > Drop for DeployFlow < 'a , D > { fn drop (& mut self) { if ! self . used { panic ! ("Dropped DeployFlow without instantiating, you may have forgotten to call `compile` or `deploy`.") ; } } } # [cfg (stageleft_macro)] impl < 'a , D : LocalDeploy < 'a > > DeployFlow < 'a , D > { pub fn ir (& self) -> & Vec < HfPlusLeaf > { & self . ir } pub fn with_process < P > (mut self , process : & Process < P > , spec : impl IntoProcessSpec < 'a , D > ,) -> Self { let tag_name = std :: any :: type_name :: < P > () . to_string () ; self . nodes . insert (process . id , spec . into_process_spec () . build (process . id , & tag_name) ,) ; self } pub fn with_external < P > (mut self , process : & ExternalProcess < P > , spec : impl ExternalSpec < 'a , D > ,) -> Self { let tag_name = std :: any :: type_name :: < P > () . to_string () ; self . externals . insert (process . id , spec . build (process . id , & tag_name)) ; self } pub fn with_cluster < C > (mut self , cluster : & Cluster < C > , spec : impl ClusterSpec < 'a , D >) -> Self { let tag_name = std :: any :: type_name :: < C > () . to_string () ; self . clusters . insert (cluster . id , spec . build (cluster . id , & tag_name)) ; self } pub fn compile_no_network (mut self) -> CompiledFlow < 'a , D :: GraphId > { self . used = true ; CompiledFlow { hydroflow_ir : build_inner (& mut self . ir) , extra_stmts : BTreeMap :: new () , _phantom : PhantomData , } } } # [cfg (stageleft_macro)] impl < 'a , D : Deploy < 'a > > DeployFlow < 'a , D > { pub fn compile (mut self , env : & D :: CompileEnv) -> CompiledFlow < 'a , D :: GraphId > { self . used = true ; let mut seen_tees : HashMap < _ , _ > = HashMap :: new () ; let mut flow_state_networked : Vec < HfPlusLeaf > = std :: mem :: take (& mut self . ir) . into_iter () . map (| leaf | { leaf . compile_network :: < D > (env , & mut seen_tees , & self . nodes , & self . clusters , & self . externals ,) }) . collect () ; let extra_stmts = self . extra_stmts (env) ; CompiledFlow { hydroflow_ir : build_inner (& mut flow_state_networked) , extra_stmts , _phantom : PhantomData , } } fn extra_stmts (& self , env : & < D as Deploy < 'a > > :: CompileEnv) -> BTreeMap < usize , Vec < syn :: Stmt > > { let all_locations_count = self . nodes . len () + self . clusters . len () ; let mut extra_stmts : BTreeMap < usize , Vec < syn :: Stmt > > = BTreeMap :: new () ; for & c_id in self . clusters . keys () { let self_id_ident = syn :: Ident :: new (& format ! ("__hydroflow_plus_cluster_self_id_{}" , c_id) , Span :: call_site () ,) ; let self_id_expr = D :: cluster_self_id (env) . splice_untyped () ; extra_stmts . entry (c_id) . or_default () . push (syn :: parse_quote ! { let # self_id_ident = # self_id_expr ; }) ; for other_location in 0 .. all_locations_count { let other_id_ident = syn :: Ident :: new (& format ! ("__hydroflow_plus_cluster_ids_{}" , c_id) , Span :: call_site () ,) ; let other_id_expr = D :: cluster_ids (env , c_id) . splice_untyped () ; extra_stmts . entry (other_location) . or_default () . push (syn :: parse_quote ! { let # other_id_ident = # other_id_expr ; }) ; } } extra_stmts } } # [cfg (stageleft_macro)] impl < 'a , D : Deploy < 'a , CompileEnv = () > > DeployFlow < 'a , D > { # [must_use] pub fn deploy (mut self , env : & mut D :: InstantiateEnv) -> DeployResult < 'a , D > { self . used = true ; let mut seen_tees_instantiate : HashMap < _ , _ > = HashMap :: new () ; let mut flow_state_networked : Vec < HfPlusLeaf > = std :: mem :: take (& mut self . ir) . into_iter () . map (| leaf | { leaf . compile_network :: < D > (& () , & mut seen_tees_instantiate , & self . nodes , & self . clusters , & self . externals ,) }) . collect () ; let mut compiled = build_inner (& mut flow_state_networked) ; let mut extra_stmts = self . extra_stmts (& ()) ; let mut meta = D :: Meta :: default () ; let (mut processes , mut clusters , mut externals) = (std :: mem :: take (& mut self . nodes) . into_iter () . map (| (node_id , node) | { node . instantiate (env , & mut meta , compiled . remove (& node_id) . unwrap () , extra_stmts . remove (& node_id) . unwrap_or_default () ,) ; (node_id , node) }) . collect :: < HashMap < _ , _ > > () , std :: mem :: take (& mut self . clusters) . into_iter () . map (| (cluster_id , cluster) | { cluster . instantiate (env , & mut meta , compiled . remove (& cluster_id) . unwrap () , extra_stmts . remove (& cluster_id) . unwrap_or_default () ,) ; (cluster_id , cluster) }) . collect :: < HashMap < _ , _ > > () , std :: mem :: take (& mut self . externals) . into_iter () . map (| (external_id , external) | { external . instantiate (env , & mut meta , compiled . remove (& external_id) . unwrap () , extra_stmts . remove (& external_id) . unwrap_or_default () ,) ; (external_id , external) }) . collect :: < HashMap < _ , _ > > () ,) ; for node in processes . values_mut () { node . update_meta (& meta) ; } for cluster in clusters . values_mut () { cluster . update_meta (& meta) ; } for external in externals . values_mut () { external . update_meta (& meta) ; } let mut seen_tees_connect = HashMap :: new () ; for leaf in flow_state_networked { leaf . connect_network (& mut seen_tees_connect) ; } DeployResult { processes , clusters , externals , } } } pub use crate :: builder :: deploy :: DeployResult ; # [cfg (stageleft_macro)] impl < 'a , D : Deploy < 'a > > DeployResult < 'a , D > { pub fn get_process < P > (& self , p : & Process < P >) -> & D :: Process { let id = match p . id () { LocationId :: Process (id) => id , _ => panic ! ("Process ID expected") , } ; self . processes . get (& id) . unwrap () } pub fn get_cluster < C > (& self , c : & Cluster < 'a , C >) -> & D :: Cluster { let id = match c . id () { LocationId :: Cluster (id) => id , _ => panic ! ("Cluster ID expected") , } ; self . clusters . get (& id) . unwrap () } pub fn get_external < P > (& self , p : & ExternalProcess < P >) -> & D :: ExternalProcess { self . externals . get (& p . id) . unwrap () } pub fn raw_port (& self , port : ExternalBytesPort) -> D :: ExternalRawPort { self . externals . get (& port . process_id) . unwrap () . raw_port (port . port_id) } pub async fn connect_sink_bytes (& self , port : ExternalBytesPort ,) -> Pin < Box < dyn Sink < Bytes , Error = Error > > > { self . externals . get (& port . process_id) . unwrap () . as_bytes_sink (port . port_id) . await } pub async fn connect_sink_bincode < T : Serialize + DeserializeOwned + 'static > (& self , port : ExternalBincodeSink < T > ,) -> Pin < Box < dyn Sink < T , Error = Error > > > { self . externals . get (& port . process_id) . unwrap () . as_bincode_sink (port . port_id) . await } pub async fn connect_source_bytes (& self , port : ExternalBytesPort ,) -> Pin < Box < dyn Stream < Item = Bytes > > > { self . externals . get (& port . process_id) . unwrap () . as_bytes_source (port . port_id) . await } pub async fn connect_source_bincode < T : Serialize + DeserializeOwned + 'static > (& self , port : ExternalBincodeStream < T > ,) -> Pin < Box < dyn Stream < Item = T > > > { self . externals . get (& port . process_id) . unwrap () . as_bincode_source (port . port_id) . await } } } pub use crate :: builder :: FlowStateInner ; pub type FlowState = Rc < RefCell < FlowStateInner > > ; pub use crate :: builder :: FLOW_USED_MESSAGE ; pub use crate :: builder :: FlowBuilder ; # [cfg (stageleft_macro)] impl Drop for FlowBuilder < '_ > { fn drop (& mut self) { if ! self . finalized { panic ! ("Dropped FlowBuilder without finalizing, you may have forgotten to call `with_default_optimize`, `optimize_with`, or `finalize`.") ; } } } # [cfg (stageleft_macro)] impl QuotedContext for FlowBuilder < '_ > { fn create () -> Self { FlowBuilder :: new () } } # [cfg (stageleft_macro)] impl < 'a > FlowBuilder < 'a > { # [expect (clippy :: new_without_default , reason = "call `new` explicitly, not `default`")] pub fn new () -> FlowBuilder < 'a > { FlowBuilder { flow_state : Rc :: new (RefCell :: new (FlowStateInner { leaves : Some (vec ! []) , next_external_out : 0 , cycle_counts : HashMap :: new () , next_clock_id : 0 , })) , nodes : RefCell :: new (vec ! []) , clusters : RefCell :: new (vec ! []) , next_node_id : RefCell :: new (0) , finalized : false , _phantom : PhantomData , } } # [cfg (feature = "build")] pub fn finalize (mut self) -> built :: BuiltFlow < 'a > { self . finalized = true ; built :: BuiltFlow { ir : self . flow_state . borrow_mut () . leaves . take () . unwrap () , processes : self . nodes . replace (vec ! []) , clusters : self . clusters . replace (vec ! []) , used : false , _phantom : PhantomData , } } # [cfg (feature = "build")] pub fn with_default_optimize < D : LocalDeploy < 'a > > (self) -> DeployFlow < 'a , D > { self . finalize () . with_default_optimize () } # [cfg (feature = "build")] pub fn optimize_with (self , f : impl FnOnce (Vec < HfPlusLeaf >) -> Vec < HfPlusLeaf > ,) -> built :: BuiltFlow < 'a > { self . finalize () . optimize_with (f) } pub fn flow_state (& self) -> & FlowState { & self . flow_state } pub fn process < P > (& self) -> Process < 'a , P > { let mut next_node_id = self . next_node_id . borrow_mut () ; let id = * next_node_id ; * next_node_id += 1 ; self . nodes . borrow_mut () . push (id) ; Process { id , flow_state : self . flow_state () . clone () , _phantom : PhantomData , } } pub fn external_process < P > (& self) -> ExternalProcess < 'a , P > { let mut next_node_id = self . next_node_id . borrow_mut () ; let id = * next_node_id ; * next_node_id += 1 ; self . nodes . borrow_mut () . push (id) ; ExternalProcess { id , flow_state : self . flow_state () . clone () , _phantom : PhantomData , } } pub fn cluster < C > (& self) -> Cluster < 'a , C > { let mut next_node_id = self . next_node_id . borrow_mut () ; let id = * next_node_id ; * next_node_id += 1 ; self . clusters . borrow_mut () . push (id) ; Cluster { id , flow_state : self . flow_state () . clone () , _phantom : PhantomData , } } # [cfg (feature = "build")] pub fn with_process < P , D : LocalDeploy < 'a > > (self , process : & Process < P > , spec : impl IntoProcessSpec < 'a , D > ,) -> DeployFlow < 'a , D > { self . with_default_optimize () . with_process (process , spec) } # [cfg (feature = "build")] pub fn with_external < P , D : LocalDeploy < 'a > > (self , process : & ExternalProcess < P > , spec : impl ExternalSpec < 'a , D > ,) -> DeployFlow < 'a , D > { self . with_default_optimize () . with_external (process , spec) } # [cfg (feature = "build")] pub fn with_cluster < C , D : LocalDeploy < 'a > > (self , cluster : & Cluster < C > , spec : impl ClusterSpec < 'a , D > ,) -> DeployFlow < 'a , D > { self . with_default_optimize () . with_cluster (cluster , spec) } # [cfg (feature = "build")] pub fn compile < D : Deploy < 'a > > (self , env : & D :: CompileEnv) -> CompiledFlow < 'a , D :: GraphId > { self . with_default_optimize :: < D > () . compile (env) } # [cfg (feature = "build")] pub fn compile_no_network < D : LocalDeploy < 'a > > (self) -> CompiledFlow < 'a , D :: GraphId > { self . with_default_optimize :: < D > () . compile_no_network () } # [cfg (feature = "build")] pub fn deploy < D : Deploy < 'a , CompileEnv = () > > (self , env : & mut D :: InstantiateEnv ,) -> DeployResult < 'a , D > { self . with_default_optimize () . deploy (env) } } } pub use builder :: FlowBuilder ; pub mod ir { pub use core :: panic ; pub use std :: cell :: RefCell ; # [cfg (feature = "build")] pub use std :: collections :: BTreeMap ; pub use std :: collections :: HashMap ; pub use std :: fmt :: Debug ; pub use std :: ops :: Deref ; pub use std :: rc :: Rc ; # [cfg (feature = "build")] pub use hydroflow_lang :: graph :: FlatGraphBuilder ; # [cfg (feature = "build")] pub use proc_macro2 :: Span ; pub use proc_macro2 :: TokenStream ; pub use quote :: ToTokens ; # [cfg (feature = "build")] pub use syn :: parse_quote ; # [cfg (feature = "build")] pub use crate :: __staged :: deploy :: { Deploy , RegisterPort } ; pub use crate :: __staged :: location :: LocationId ; pub use crate :: ir :: DebugExpr ; # [cfg (stageleft_macro)] impl From < syn :: Expr > for DebugExpr { fn from (expr : syn :: Expr) -> DebugExpr { DebugExpr (expr) } } # [cfg (stageleft_macro)] impl Deref for DebugExpr { type Target = syn :: Expr ; fn deref (& self) -> & Self :: Target { & self . 0 } } # [cfg (stageleft_macro)] impl ToTokens for DebugExpr { fn to_tokens (& self , tokens : & mut TokenStream) { self . 0 . to_tokens (tokens) ; } } # [cfg (stageleft_macro)] impl Debug for DebugExpr { fn fmt (& self , f : & mut std :: fmt :: Formatter < '_ >) -> std :: fmt :: Result { write ! (f , "{}" , self . 0 . to_token_stream ()) } } pub use crate :: ir :: DebugInstantiate ; # [cfg (stageleft_macro)] impl Debug for DebugInstantiate { fn fmt (& self , f : & mut std :: fmt :: Formatter < '_ >) -> std :: fmt :: Result { write ! (f , "<network instantiate>") } } pub use crate :: ir :: HfPlusSource ; pub use crate :: ir :: HfPlusLeaf ; # [cfg (stageleft_macro)] impl HfPlusLeaf { # [cfg (feature = "build")] pub fn compile_network < 'a , D : Deploy < 'a > > (self , compile_env : & D :: CompileEnv , seen_tees : & mut SeenTees , nodes : & HashMap < usize , D :: Process > , clusters : & HashMap < usize , D :: Cluster > , externals : & HashMap < usize , D :: ExternalProcess > ,) -> HfPlusLeaf { self . transform_children (| n , s | { n . compile_network :: < D > (compile_env , s , nodes , clusters , externals) ; } , seen_tees ,) } pub fn connect_network (self , seen_tees : & mut SeenTees) -> HfPlusLeaf { self . transform_children (| n , s | { n . connect_network (s) ; } , seen_tees ,) } pub fn transform_children (self , mut transform : impl FnMut (& mut HfPlusNode , & mut SeenTees) , seen_tees : & mut SeenTees ,) -> HfPlusLeaf { match self { HfPlusLeaf :: ForEach { f , mut input } => { transform (& mut input , seen_tees) ; HfPlusLeaf :: ForEach { f , input } } HfPlusLeaf :: DestSink { sink , mut input } => { transform (& mut input , seen_tees) ; HfPlusLeaf :: DestSink { sink , input } } HfPlusLeaf :: CycleSink { ident , location_kind , mut input , } => { transform (& mut input , seen_tees) ; HfPlusLeaf :: CycleSink { ident , location_kind , input , } } } } # [cfg (feature = "build")] pub fn emit (& self , graph_builders : & mut BTreeMap < usize , FlatGraphBuilder > , built_tees : & mut HashMap < * const RefCell < HfPlusNode > , (syn :: Ident , usize) > , next_stmt_id : & mut usize ,) { match self { HfPlusLeaf :: ForEach { f , input } => { let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; graph_builders . entry (input_location_id) . or_default () . add_statement (parse_quote ! { # input_ident -> for_each (# f) ; }) ; } HfPlusLeaf :: DestSink { sink , input } => { let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; graph_builders . entry (input_location_id) . or_default () . add_statement (parse_quote ! { # input_ident -> dest_sink (# sink) ; }) ; } HfPlusLeaf :: CycleSink { ident , location_kind , input , } => { let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; let location_id = match location_kind . root () { LocationId :: Process (id) => id , LocationId :: Cluster (id) => id , LocationId :: Tick (_ , _) => panic ! () , LocationId :: ExternalProcess (_) => panic ! () , } ; assert_eq ! (input_location_id , * location_id , "cycle_sink location mismatch") ; graph_builders . entry (* location_id) . or_default () . add_statement (parse_quote ! { # ident = # input_ident ; }) ; } } } } type PrintedTees = RefCell < Option < (usize , HashMap < * const RefCell < HfPlusNode > , usize >) > > ; thread_local ! { static PRINTED_TEES : PrintedTees = const { RefCell :: new (None) } ; } pub fn dbg_dedup_tee < T > (f : impl FnOnce () -> T) -> T { PRINTED_TEES . with (| printed_tees | { let mut printed_tees_mut = printed_tees . borrow_mut () ; * printed_tees_mut = Some ((0 , HashMap :: new ())) ; drop (printed_tees_mut) ; let ret = f () ; let mut printed_tees_mut = printed_tees . borrow_mut () ; * printed_tees_mut = None ; ret }) } pub use crate :: ir :: TeeNode ; # [cfg (stageleft_macro)] impl Debug for TeeNode { fn fmt (& self , f : & mut std :: fmt :: Formatter < '_ >) -> std :: fmt :: Result { PRINTED_TEES . with (| printed_tees | { let mut printed_tees_mut_borrow = printed_tees . borrow_mut () ; let printed_tees_mut = printed_tees_mut_borrow . as_mut () ; if let Some (printed_tees_mut) = printed_tees_mut { if let Some (existing) = printed_tees_mut . 1 . get (& (self . 0 . as_ref () as * const RefCell < HfPlusNode >)) { write ! (f , "<tee {}>" , existing) } else { let next_id = printed_tees_mut . 0 ; printed_tees_mut . 0 += 1 ; printed_tees_mut . 1 . insert (self . 0 . as_ref () as * const RefCell < HfPlusNode > , next_id) ; drop (printed_tees_mut_borrow) ; write ! (f , "<tee {}>: " , next_id) ? ; Debug :: fmt (& self . 0 . borrow () , f) } } else { drop (printed_tees_mut_borrow) ; write ! (f , "<tee>: ") ? ; Debug :: fmt (& self . 0 . borrow () , f) } }) } } pub use crate :: ir :: HfPlusNode ; pub type SeenTees = HashMap < * const RefCell < HfPlusNode > , Rc < RefCell < HfPlusNode > > > ; # [cfg (stageleft_macro)] impl < 'a > HfPlusNode { # [cfg (feature = "build")] pub fn compile_network < D : Deploy < 'a > > (& mut self , compile_env : & D :: CompileEnv , seen_tees : & mut SeenTees , nodes : & HashMap < usize , D :: Process > , clusters : & HashMap < usize , D :: Cluster > , externals : & HashMap < usize , D :: ExternalProcess > ,) { self . transform_children (| n , s | n . compile_network :: < D > (compile_env , s , nodes , clusters , externals) , seen_tees ,) ; if let HfPlusNode :: Network { from_location , from_key , to_location , to_key , instantiate_fn , .. } = self { let (sink_expr , source_expr , connect_fn) = match instantiate_fn { DebugInstantiate :: Building () => instantiate_network :: < D > (from_location , * from_key , to_location , * to_key , nodes , clusters , externals , compile_env ,) , DebugInstantiate :: Finalized (_ , _ , _) => panic ! ("network already finalized") , } ; * instantiate_fn = DebugInstantiate :: Finalized (sink_expr , source_expr , Some (connect_fn)) ; } } pub fn connect_network (& mut self , seen_tees : & mut SeenTees) { self . transform_children (| n , s | n . connect_network (s) , seen_tees) ; if let HfPlusNode :: Network { instantiate_fn , .. } = self { match instantiate_fn { DebugInstantiate :: Building () => panic ! ("network not built") , DebugInstantiate :: Finalized (_ , _ , connect_fn) => { connect_fn . take () . unwrap () () ; } } } } pub fn transform_bottom_up < C > (& mut self , mut transform : impl FnMut (& mut HfPlusNode , & mut C) + Copy , seen_tees : & mut SeenTees , ctx : & mut C ,) { self . transform_children (| n , s | n . transform_bottom_up (transform , s , ctx) , seen_tees) ; transform (self , ctx) } # [inline (always)] pub fn transform_children (& mut self , mut transform : impl FnMut (& mut HfPlusNode , & mut SeenTees) , seen_tees : & mut SeenTees ,) { match self { HfPlusNode :: Placeholder => { panic ! () ; } HfPlusNode :: Source { .. } => { } HfPlusNode :: CycleSource { .. } => { } HfPlusNode :: Tee { inner } => { if let Some (transformed) = seen_tees . get (& (inner . 0 . as_ref () as * const RefCell < HfPlusNode >)) { * inner = TeeNode (transformed . clone ()) ; } else { let transformed_cell = Rc :: new (RefCell :: new (HfPlusNode :: Placeholder)) ; seen_tees . insert (inner . 0 . as_ref () as * const RefCell < HfPlusNode > , transformed_cell . clone () ,) ; let mut orig = inner . 0 . replace (HfPlusNode :: Placeholder) ; transform (& mut orig , seen_tees) ; * transformed_cell . borrow_mut () = orig ; * inner = TeeNode (transformed_cell) ; } } HfPlusNode :: Persist (inner) => transform (inner . as_mut () , seen_tees) , HfPlusNode :: Unpersist (inner) => transform (inner . as_mut () , seen_tees) , HfPlusNode :: Delta (inner) => transform (inner . as_mut () , seen_tees) , HfPlusNode :: Chain (left , right) => { transform (left . as_mut () , seen_tees) ; transform (right . as_mut () , seen_tees) ; } HfPlusNode :: CrossProduct (left , right) => { transform (left . as_mut () , seen_tees) ; transform (right . as_mut () , seen_tees) ; } HfPlusNode :: CrossSingleton (left , right) => { transform (left . as_mut () , seen_tees) ; transform (right . as_mut () , seen_tees) ; } HfPlusNode :: Join (left , right) => { transform (left . as_mut () , seen_tees) ; transform (right . as_mut () , seen_tees) ; } HfPlusNode :: Difference (left , right) => { transform (left . as_mut () , seen_tees) ; transform (right . as_mut () , seen_tees) ; } HfPlusNode :: AntiJoin (left , right) => { transform (left . as_mut () , seen_tees) ; transform (right . as_mut () , seen_tees) ; } HfPlusNode :: Map { input , .. } => { transform (input . as_mut () , seen_tees) ; } HfPlusNode :: FlatMap { input , .. } => { transform (input . as_mut () , seen_tees) ; } HfPlusNode :: Filter { input , .. } => { transform (input . as_mut () , seen_tees) ; } HfPlusNode :: FilterMap { input , .. } => { transform (input . as_mut () , seen_tees) ; } HfPlusNode :: Sort (input) => { transform (input . as_mut () , seen_tees) ; } HfPlusNode :: DeferTick (input) => { transform (input . as_mut () , seen_tees) ; } HfPlusNode :: Enumerate { input , .. } => { transform (input . as_mut () , seen_tees) ; } HfPlusNode :: Inspect { input , .. } => { transform (input . as_mut () , seen_tees) ; } HfPlusNode :: Unique (input) => { transform (input . as_mut () , seen_tees) ; } HfPlusNode :: Fold { input , .. } => { transform (input . as_mut () , seen_tees) ; } HfPlusNode :: FoldKeyed { input , .. } => { transform (input . as_mut () , seen_tees) ; } HfPlusNode :: Reduce { input , .. } => { transform (input . as_mut () , seen_tees) ; } HfPlusNode :: ReduceKeyed { input , .. } => { transform (input . as_mut () , seen_tees) ; } HfPlusNode :: Network { input , .. } => { transform (input . as_mut () , seen_tees) ; } } } # [cfg (feature = "build")] pub fn emit (& self , graph_builders : & mut BTreeMap < usize , FlatGraphBuilder > , built_tees : & mut HashMap < * const RefCell < HfPlusNode > , (syn :: Ident , usize) > , next_stmt_id : & mut usize ,) -> (syn :: Ident , usize) { match self { HfPlusNode :: Placeholder => { panic ! () } HfPlusNode :: Persist (inner) => { let (inner_ident , location) = inner . emit (graph_builders , built_tees , next_stmt_id) ; let persist_id = * next_stmt_id ; * next_stmt_id += 1 ; let persist_ident = syn :: Ident :: new (& format ! ("stream_{}" , persist_id) , Span :: call_site ()) ; let builder = graph_builders . entry (location) . or_default () ; builder . add_statement (parse_quote ! { # persist_ident = # inner_ident -> persist ::<'static > () ; }) ; (persist_ident , location) } HfPlusNode :: Unpersist (_) => { panic ! ("Unpersist is a marker node and should have been optimized away. This is likely a compiler bug.") } HfPlusNode :: Delta (inner) => { let (inner_ident , location) = inner . emit (graph_builders , built_tees , next_stmt_id) ; let delta_id = * next_stmt_id ; * next_stmt_id += 1 ; let delta_ident = syn :: Ident :: new (& format ! ("stream_{}" , delta_id) , Span :: call_site ()) ; let builder = graph_builders . entry (location) . or_default () ; builder . add_statement (parse_quote ! { # delta_ident = # inner_ident -> multiset_delta () ; }) ; (delta_ident , location) } HfPlusNode :: Source { source , location_kind , } => { let location_id = match location_kind { LocationId :: Process (id) => id , LocationId :: Cluster (id) => id , LocationId :: Tick (_ , _) => panic ! () , LocationId :: ExternalProcess (id) => id , } ; if let HfPlusSource :: ExternalNetwork () = source { (syn :: Ident :: new ("DUMMY" , Span :: call_site ()) , * location_id) } else { let source_id = * next_stmt_id ; * next_stmt_id += 1 ; let source_ident = syn :: Ident :: new (& format ! ("stream_{}" , source_id) , Span :: call_site ()) ; let source_stmt = match source { HfPlusSource :: Stream (expr) => { parse_quote ! { # source_ident = source_stream (# expr) ; } } HfPlusSource :: ExternalNetwork () => { unreachable ! () } HfPlusSource :: Iter (expr) => { parse_quote ! { # source_ident = source_iter (# expr) ; } } HfPlusSource :: Spin () => { parse_quote ! { # source_ident = spin () ; } } } ; graph_builders . entry (* location_id) . or_default () . add_statement (source_stmt) ; (source_ident , * location_id) } } HfPlusNode :: CycleSource { ident , location_kind , } => { let location_id = match location_kind . root () { LocationId :: Process (id) => id , LocationId :: Cluster (id) => id , LocationId :: Tick (_ , _) => panic ! () , LocationId :: ExternalProcess (_) => panic ! () , } ; (ident . clone () , * location_id) } HfPlusNode :: Tee { inner } => { if let Some (ret) = built_tees . get (& (inner . 0 . as_ref () as * const RefCell < HfPlusNode >)) { ret . clone () } else { let (inner_ident , inner_location_id) = inner . 0 . borrow () . emit (graph_builders , built_tees , next_stmt_id) ; let tee_id = * next_stmt_id ; * next_stmt_id += 1 ; let tee_ident = syn :: Ident :: new (& format ! ("stream_{}" , tee_id) , Span :: call_site ()) ; let builder = graph_builders . entry (inner_location_id) . or_default () ; builder . add_statement (parse_quote ! { # tee_ident = # inner_ident -> tee () ; }) ; built_tees . insert (inner . 0 . as_ref () as * const RefCell < HfPlusNode > , (tee_ident . clone () , inner_location_id) ,) ; (tee_ident , inner_location_id) } } HfPlusNode :: Chain (left , right) => { let (left_ident , left_location_id) = left . emit (graph_builders , built_tees , next_stmt_id) ; let (right_ident , right_location_id) = right . emit (graph_builders , built_tees , next_stmt_id) ; assert_eq ! (left_location_id , right_location_id , "chain inputs must be in the same location") ; let union_id = * next_stmt_id ; * next_stmt_id += 1 ; let chain_ident = syn :: Ident :: new (& format ! ("stream_{}" , union_id) , Span :: call_site ()) ; let builder = graph_builders . entry (left_location_id) . or_default () ; builder . add_statement (parse_quote ! { # chain_ident = chain () ; }) ; builder . add_statement (parse_quote ! { # left_ident -> [0] # chain_ident ; }) ; builder . add_statement (parse_quote ! { # right_ident -> [1] # chain_ident ; }) ; (chain_ident , left_location_id) } HfPlusNode :: CrossSingleton (left , right) => { let (left_ident , left_location_id) = left . emit (graph_builders , built_tees , next_stmt_id) ; let (right_ident , right_location_id) = right . emit (graph_builders , built_tees , next_stmt_id) ; assert_eq ! (left_location_id , right_location_id , "cross_singleton inputs must be in the same location") ; let union_id = * next_stmt_id ; * next_stmt_id += 1 ; let cross_ident = syn :: Ident :: new (& format ! ("stream_{}" , union_id) , Span :: call_site ()) ; let builder = graph_builders . entry (left_location_id) . or_default () ; builder . add_statement (parse_quote ! { # cross_ident = cross_singleton () ; }) ; builder . add_statement (parse_quote ! { # left_ident -> [input] # cross_ident ; }) ; builder . add_statement (parse_quote ! { # right_ident -> [single] # cross_ident ; }) ; (cross_ident , left_location_id) } HfPlusNode :: CrossProduct (..) | HfPlusNode :: Join (..) => { let operator : syn :: Ident = if matches ! (self , HfPlusNode :: CrossProduct (..)) { parse_quote ! (cross_join_multiset) } else { parse_quote ! (join_multiset) } ; let (HfPlusNode :: CrossProduct (left , right) | HfPlusNode :: Join (left , right)) = self else { unreachable ! () } ; let (left_inner , left_was_persist) = if let HfPlusNode :: Persist (left) = left . as_ref () { (left , true) } else { (left , false) } ; let (right_inner , right_was_persist) = if let HfPlusNode :: Persist (right) = right . as_ref () { (right , true) } else { (right , false) } ; let (left_ident , left_location_id) = left_inner . emit (graph_builders , built_tees , next_stmt_id) ; let (right_ident , right_location_id) = right_inner . emit (graph_builders , built_tees , next_stmt_id) ; assert_eq ! (left_location_id , right_location_id , "join / cross product inputs must be in the same location") ; let stream_id = * next_stmt_id ; * next_stmt_id += 1 ; let stream_ident = syn :: Ident :: new (& format ! ("stream_{}" , stream_id) , Span :: call_site ()) ; let builder = graph_builders . entry (left_location_id) . or_default () ; match (left_was_persist , right_was_persist) { (true , true) => { builder . add_statement (parse_quote ! { # stream_ident = # operator ::<'static , 'static > () ; }) ; } (true , false) => { builder . add_statement (parse_quote ! { # stream_ident = # operator ::<'static , 'tick > () ; }) ; } (false , true) => { builder . add_statement (parse_quote ! { # stream_ident = # operator ::<'tick , 'static > () ; }) ; } (false , false) => { builder . add_statement (parse_quote ! { # stream_ident = # operator ::<'tick , 'tick > () ; }) ; } } ; builder . add_statement (parse_quote ! { # left_ident -> [0] # stream_ident ; }) ; builder . add_statement (parse_quote ! { # right_ident -> [1] # stream_ident ; }) ; (stream_ident , left_location_id) } HfPlusNode :: Difference (..) | HfPlusNode :: AntiJoin (..) => { let operator : syn :: Ident = if matches ! (self , HfPlusNode :: Difference (..)) { parse_quote ! (difference_multiset) } else { parse_quote ! (anti_join_multiset) } ; let (HfPlusNode :: Difference (left , right) | HfPlusNode :: AntiJoin (left , right)) = self else { unreachable ! () } ; let (right , right_was_persist) = if let HfPlusNode :: Persist (right) = right . as_ref () { (right , true) } else { (right , false) } ; let (left_ident , left_location_id) = left . emit (graph_builders , built_tees , next_stmt_id) ; let (right_ident , right_location_id) = right . emit (graph_builders , built_tees , next_stmt_id) ; assert_eq ! (left_location_id , right_location_id , "difference / anti join inputs must be in the same location") ; let stream_id = * next_stmt_id ; * next_stmt_id += 1 ; let stream_ident = syn :: Ident :: new (& format ! ("stream_{}" , stream_id) , Span :: call_site ()) ; let builder = graph_builders . entry (left_location_id) . or_default () ; if right_was_persist { builder . add_statement (parse_quote ! { # stream_ident = # operator ::<'tick , 'static > () ; }) ; } else { builder . add_statement (parse_quote ! { # stream_ident = # operator ::<'tick , 'tick > () ; }) ; } builder . add_statement (parse_quote ! { # left_ident -> [pos] # stream_ident ; }) ; builder . add_statement (parse_quote ! { # right_ident -> [neg] # stream_ident ; }) ; (stream_ident , left_location_id) } HfPlusNode :: Map { f , input } => { let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; let map_id = * next_stmt_id ; * next_stmt_id += 1 ; let map_ident = syn :: Ident :: new (& format ! ("stream_{}" , map_id) , Span :: call_site ()) ; let builder = graph_builders . entry (input_location_id) . or_default () ; builder . add_statement (parse_quote ! { # map_ident = # input_ident -> map (# f) ; }) ; (map_ident , input_location_id) } HfPlusNode :: FlatMap { f , input } => { let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; let flat_map_id = * next_stmt_id ; * next_stmt_id += 1 ; let flat_map_ident = syn :: Ident :: new (& format ! ("stream_{}" , flat_map_id) , Span :: call_site ()) ; let builder = graph_builders . entry (input_location_id) . or_default () ; builder . add_statement (parse_quote ! { # flat_map_ident = # input_ident -> flat_map (# f) ; }) ; (flat_map_ident , input_location_id) } HfPlusNode :: Filter { f , input } => { let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; let filter_id = * next_stmt_id ; * next_stmt_id += 1 ; let filter_ident = syn :: Ident :: new (& format ! ("stream_{}" , filter_id) , Span :: call_site ()) ; let builder = graph_builders . entry (input_location_id) . or_default () ; builder . add_statement (parse_quote ! { # filter_ident = # input_ident -> filter (# f) ; }) ; (filter_ident , input_location_id) } HfPlusNode :: FilterMap { f , input } => { let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; let filter_map_id = * next_stmt_id ; * next_stmt_id += 1 ; let filter_map_ident = syn :: Ident :: new (& format ! ("stream_{}" , filter_map_id) , Span :: call_site ()) ; let builder = graph_builders . entry (input_location_id) . or_default () ; builder . add_statement (parse_quote ! { # filter_map_ident = # input_ident -> filter_map (# f) ; }) ; (filter_map_ident , input_location_id) } HfPlusNode :: Sort (input) => { let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; let sort_id = * next_stmt_id ; * next_stmt_id += 1 ; let sort_ident = syn :: Ident :: new (& format ! ("stream_{}" , sort_id) , Span :: call_site ()) ; let builder = graph_builders . entry (input_location_id) . or_default () ; builder . add_statement (parse_quote ! { # sort_ident = # input_ident -> sort () ; }) ; (sort_ident , input_location_id) } HfPlusNode :: DeferTick (input) => { let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; let defer_tick_id = * next_stmt_id ; * next_stmt_id += 1 ; let defer_tick_ident = syn :: Ident :: new (& format ! ("stream_{}" , defer_tick_id) , Span :: call_site ()) ; let builder = graph_builders . entry (input_location_id) . or_default () ; builder . add_statement (parse_quote ! { # defer_tick_ident = # input_ident -> defer_tick_lazy () ; }) ; (defer_tick_ident , input_location_id) } HfPlusNode :: Enumerate { is_static , input } => { let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; let enumerate_id = * next_stmt_id ; * next_stmt_id += 1 ; let enumerate_ident = syn :: Ident :: new (& format ! ("stream_{}" , enumerate_id) , Span :: call_site ()) ; let builder = graph_builders . entry (input_location_id) . or_default () ; if * is_static { builder . add_statement (parse_quote ! { # enumerate_ident = # input_ident -> enumerate ::<'static > () ; }) ; } else { builder . add_statement (parse_quote ! { # enumerate_ident = # input_ident -> enumerate ::<'tick > () ; }) ; } (enumerate_ident , input_location_id) } HfPlusNode :: Inspect { f , input } => { let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; let inspect_id = * next_stmt_id ; * next_stmt_id += 1 ; let inspect_ident = syn :: Ident :: new (& format ! ("stream_{}" , inspect_id) , Span :: call_site ()) ; let builder = graph_builders . entry (input_location_id) . or_default () ; builder . add_statement (parse_quote ! { # inspect_ident = # input_ident -> inspect (# f) ; }) ; (inspect_ident , input_location_id) } HfPlusNode :: Unique (input) => { let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; let unique_id = * next_stmt_id ; * next_stmt_id += 1 ; let unique_ident = syn :: Ident :: new (& format ! ("stream_{}" , unique_id) , Span :: call_site ()) ; let builder = graph_builders . entry (input_location_id) . or_default () ; builder . add_statement (parse_quote ! { # unique_ident = # input_ident -> unique ::<'tick > () ; }) ; (unique_ident , input_location_id) } HfPlusNode :: Fold { .. } | HfPlusNode :: FoldKeyed { .. } => { let operator : syn :: Ident = if matches ! (self , HfPlusNode :: Fold { .. }) { parse_quote ! (fold) } else { parse_quote ! (fold_keyed) } ; let (HfPlusNode :: Fold { init , acc , input } | HfPlusNode :: FoldKeyed { init , acc , input }) = self else { unreachable ! () } ; let (input , input_was_persist) = if let HfPlusNode :: Persist (input) = input . as_ref () { (input , true) } else { (input , false) } ; let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; let reduce_id = * next_stmt_id ; * next_stmt_id += 1 ; let fold_ident = syn :: Ident :: new (& format ! ("stream_{}" , reduce_id) , Span :: call_site ()) ; let builder = graph_builders . entry (input_location_id) . or_default () ; if input_was_persist { builder . add_statement (parse_quote ! { # fold_ident = # input_ident -> # operator ::<'static > (# init , # acc) ; }) ; } else { builder . add_statement (parse_quote ! { # fold_ident = # input_ident -> # operator ::<'tick > (# init , # acc) ; }) ; } (fold_ident , input_location_id) } HfPlusNode :: Reduce { .. } | HfPlusNode :: ReduceKeyed { .. } => { let operator : syn :: Ident = if matches ! (self , HfPlusNode :: Reduce { .. }) { parse_quote ! (reduce) } else { parse_quote ! (reduce_keyed) } ; let (HfPlusNode :: Reduce { f , input } | HfPlusNode :: ReduceKeyed { f , input }) = self else { unreachable ! () } ; let (input , input_was_persist) = if let HfPlusNode :: Persist (input) = input . as_ref () { (input , true) } else { (input , false) } ; let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; let reduce_id = * next_stmt_id ; * next_stmt_id += 1 ; let reduce_ident = syn :: Ident :: new (& format ! ("stream_{}" , reduce_id) , Span :: call_site ()) ; let builder = graph_builders . entry (input_location_id) . or_default () ; if input_was_persist { builder . add_statement (parse_quote ! { # reduce_ident = # input_ident -> # operator ::<'static > (# f) ; }) ; } else { builder . add_statement (parse_quote ! { # reduce_ident = # input_ident -> # operator ::<'tick > (# f) ; }) ; } (reduce_ident , input_location_id) } HfPlusNode :: Network { from_location : _ , from_key : _ , to_location , to_key : _ , serialize_fn : serialize_pipeline , instantiate_fn , deserialize_fn : deserialize_pipeline , input , } => { let (sink_expr , source_expr , _connect_fn) = match instantiate_fn { DebugInstantiate :: Building () => { panic ! ("Expected the network to be finalized") } DebugInstantiate :: Finalized (sink , source , connect_fn) => { (sink , source , connect_fn) } } ; let (input_ident , input_location_id) = input . emit (graph_builders , built_tees , next_stmt_id) ; let sender_builder = graph_builders . entry (input_location_id) . or_default () ; if let Some (serialize_pipeline) = serialize_pipeline { sender_builder . add_statement (parse_quote ! { # input_ident -> map (# serialize_pipeline) -> dest_sink (# sink_expr) ; }) ; } else { sender_builder . add_statement (parse_quote ! { # input_ident -> dest_sink (# sink_expr) ; }) ; } let to_id = match to_location { LocationId :: Process (id) => id , LocationId :: Cluster (id) => id , LocationId :: Tick (_ , _) => panic ! () , LocationId :: ExternalProcess (id) => id , } ; let receiver_builder = graph_builders . entry (* to_id) . or_default () ; let receiver_stream_id = * next_stmt_id ; * next_stmt_id += 1 ; let receiver_stream_ident = syn :: Ident :: new (& format ! ("stream_{}" , receiver_stream_id) , Span :: call_site ()) ; if let Some (deserialize_pipeline) = deserialize_pipeline { receiver_builder . add_statement (parse_quote ! { # receiver_stream_ident = source_stream (# source_expr) -> map (# deserialize_pipeline) ; }) ; } else { receiver_builder . add_statement (parse_quote ! { # receiver_stream_ident = source_stream (# source_expr) ; }) ; } (receiver_stream_ident , * to_id) } } } } # [cfg (feature = "build")] # [expect (clippy :: too_many_arguments , reason = "networking internals")] pub fn instantiate_network < 'a , D : Deploy < 'a > > (from_location : & mut LocationId , from_key : Option < usize > , to_location : & mut LocationId , to_key : Option < usize > , nodes : & HashMap < usize , D :: Process > , clusters : & HashMap < usize , D :: Cluster > , externals : & HashMap < usize , D :: ExternalProcess > , compile_env : & D :: CompileEnv ,) -> (syn :: Expr , syn :: Expr , Box < dyn FnOnce () >) { let ((sink , source) , connect_fn) = match (from_location , to_location) { (LocationId :: Process (from) , LocationId :: Process (to)) => { let from_node = nodes . get (from) . unwrap_or_else (| | { panic ! ("A process used in the graph was not instantiated: {}" , from) }) . clone () ; let to_node = nodes . get (to) . unwrap_or_else (| | { panic ! ("A process used in the graph was not instantiated: {}" , to) }) . clone () ; let sink_port = D :: allocate_process_port (& from_node) ; let source_port = D :: allocate_process_port (& to_node) ; (D :: o2o_sink_source (compile_env , & from_node , & sink_port , & to_node , & source_port) , D :: o2o_connect (& from_node , & sink_port , & to_node , & source_port) ,) } (LocationId :: Process (from) , LocationId :: Cluster (to)) => { let from_node = nodes . get (from) . unwrap_or_else (| | { panic ! ("A process used in the graph was not instantiated: {}" , from) }) . clone () ; let to_node = clusters . get (to) . unwrap_or_else (| | { panic ! ("A cluster used in the graph was not instantiated: {}" , to) }) . clone () ; let sink_port = D :: allocate_process_port (& from_node) ; let source_port = D :: allocate_cluster_port (& to_node) ; (D :: o2m_sink_source (compile_env , & from_node , & sink_port , & to_node , & source_port) , D :: o2m_connect (& from_node , & sink_port , & to_node , & source_port) ,) } (LocationId :: Cluster (from) , LocationId :: Process (to)) => { let from_node = clusters . get (from) . unwrap_or_else (| | { panic ! ("A cluster used in the graph was not instantiated: {}" , from) }) . clone () ; let to_node = nodes . get (to) . unwrap_or_else (| | { panic ! ("A process used in the graph was not instantiated: {}" , to) }) . clone () ; let sink_port = D :: allocate_cluster_port (& from_node) ; let source_port = D :: allocate_process_port (& to_node) ; (D :: m2o_sink_source (compile_env , & from_node , & sink_port , & to_node , & source_port) , D :: m2o_connect (& from_node , & sink_port , & to_node , & source_port) ,) } (LocationId :: Cluster (from) , LocationId :: Cluster (to)) => { let from_node = clusters . get (from) . unwrap_or_else (| | { panic ! ("A cluster used in the graph was not instantiated: {}" , from) }) . clone () ; let to_node = clusters . get (to) . unwrap_or_else (| | { panic ! ("A cluster used in the graph was not instantiated: {}" , to) }) . clone () ; let sink_port = D :: allocate_cluster_port (& from_node) ; let source_port = D :: allocate_cluster_port (& to_node) ; (D :: m2m_sink_source (compile_env , & from_node , & sink_port , & to_node , & source_port) , D :: m2m_connect (& from_node , & sink_port , & to_node , & source_port) ,) } (LocationId :: ExternalProcess (from) , LocationId :: Process (to)) => { let from_node = externals . get (from) . unwrap_or_else (| | { panic ! ("A external used in the graph was not instantiated: {}" , from) }) . clone () ; let to_node = nodes . get (to) . unwrap_or_else (| | { panic ! ("A process used in the graph was not instantiated: {}" , to) }) . clone () ; let sink_port = D :: allocate_external_port (& from_node) ; let source_port = D :: allocate_process_port (& to_node) ; from_node . register (from_key . unwrap () , sink_port . clone ()) ; ((parse_quote ! (DUMMY) , D :: e2o_source (compile_env , & from_node , & sink_port , & to_node , & source_port) ,) , D :: e2o_connect (& from_node , & sink_port , & to_node , & source_port) ,) } (LocationId :: ExternalProcess (_from) , LocationId :: Cluster (_to)) => { todo ! ("NYI") } (LocationId :: ExternalProcess (_) , LocationId :: ExternalProcess (_)) => { panic ! ("Cannot send from external to external") } (LocationId :: Process (from) , LocationId :: ExternalProcess (to)) => { let from_node = nodes . get (from) . unwrap_or_else (| | { panic ! ("A process used in the graph was not instantiated: {}" , from) }) . clone () ; let to_node = externals . get (to) . unwrap_or_else (| | { panic ! ("A external used in the graph was not instantiated: {}" , to) }) . clone () ; let sink_port = D :: allocate_process_port (& from_node) ; let source_port = D :: allocate_external_port (& to_node) ; to_node . register (to_key . unwrap () , source_port . clone ()) ; ((D :: o2e_sink (compile_env , & from_node , & sink_port , & to_node , & source_port) , parse_quote ! (DUMMY) ,) , D :: o2e_connect (& from_node , & sink_port , & to_node , & source_port) ,) } (LocationId :: Cluster (_from) , LocationId :: ExternalProcess (_to)) => { todo ! ("NYI") } (LocationId :: Tick (_ , _) , _) => panic ! () , (_ , LocationId :: Tick (_ , _)) => panic ! () , } ; (sink , source , connect_fn) } } pub mod rewrites { pub mod persist_pullup { pub use std :: cell :: RefCell ; pub use std :: collections :: HashSet ; pub use crate :: __staged :: ir :: * ; pub fn persist_pullup_node (node : & mut HfPlusNode , persist_pulled_tees : & mut HashSet < * const RefCell < HfPlusNode > > ,) { * node = match_box :: match_box ! { match std :: mem :: replace (node , HfPlusNode :: Placeholder) { HfPlusNode :: Unpersist (mb ! (* HfPlusNode :: Persist (mb ! (* behind_persist)))) => behind_persist , HfPlusNode :: Delta (mb ! (* HfPlusNode :: Persist (mb ! (* behind_persist)))) => behind_persist , HfPlusNode :: Tee { inner } => { if persist_pulled_tees . contains (& (inner . 0 . as_ref () as * const RefCell < HfPlusNode >)) { HfPlusNode :: Persist (Box :: new (HfPlusNode :: Tee { inner : TeeNode (inner . 0 . clone ()) , })) } else if matches ! (* inner . 0 . borrow () , HfPlusNode :: Persist (_)) { persist_pulled_tees . insert (inner . 0 . as_ref () as * const RefCell < HfPlusNode >) ; if let HfPlusNode :: Persist (behind_persist) = inner . 0 . replace (HfPlusNode :: Placeholder) { * inner . 0 . borrow_mut () = * behind_persist ; } else { unreachable ! () } HfPlusNode :: Persist (Box :: new (HfPlusNode :: Tee { inner : TeeNode (inner . 0 . clone ()) , })) } else { HfPlusNode :: Tee { inner } } } HfPlusNode :: Map { f , input : mb ! (* HfPlusNode :: Persist (behind_persist)) , } => HfPlusNode :: Persist (Box :: new (HfPlusNode :: Map { f , input : behind_persist , })) , HfPlusNode :: FilterMap { f , input : mb ! (* HfPlusNode :: Persist (behind_persist)) , } => HfPlusNode :: Persist (Box :: new (HfPlusNode :: FilterMap { f , input : behind_persist , })) , HfPlusNode :: FlatMap { f , input : mb ! (* HfPlusNode :: Persist (behind_persist)) , } => HfPlusNode :: Persist (Box :: new (HfPlusNode :: FlatMap { f , input : behind_persist , })) , HfPlusNode :: Filter { f , input : mb ! (* HfPlusNode :: Persist (behind_persist)) , } => HfPlusNode :: Persist (Box :: new (HfPlusNode :: Filter { f , input : behind_persist , })) , HfPlusNode :: Network { from_location , from_key , to_location , to_key , serialize_fn , instantiate_fn , deserialize_fn , input : mb ! (* HfPlusNode :: Persist (behind_persist)) , .. } => HfPlusNode :: Persist (Box :: new (HfPlusNode :: Network { from_location , from_key , to_location , to_key , serialize_fn , instantiate_fn , deserialize_fn , input : behind_persist , })) , HfPlusNode :: Chain (mb ! (* HfPlusNode :: Persist (left)) , mb ! (* HfPlusNode :: Persist (right))) => { HfPlusNode :: Persist (Box :: new (HfPlusNode :: Chain (left , right))) } HfPlusNode :: CrossProduct (mb ! (* HfPlusNode :: Persist (left)) , mb ! (* HfPlusNode :: Persist (right))) => { HfPlusNode :: Persist (Box :: new (HfPlusNode :: Delta (Box :: new (HfPlusNode :: CrossProduct (Box :: new (HfPlusNode :: Persist (left)) , Box :: new (HfPlusNode :: Persist (right)) ,) ,)))) } HfPlusNode :: Join (mb ! (* HfPlusNode :: Persist (left)) , mb ! (* HfPlusNode :: Persist (right))) => { HfPlusNode :: Persist (Box :: new (HfPlusNode :: Delta (Box :: new (HfPlusNode :: Join (Box :: new (HfPlusNode :: Persist (left)) , Box :: new (HfPlusNode :: Persist (right)) ,))))) } HfPlusNode :: Unique (mb ! (* HfPlusNode :: Persist (inner))) => { HfPlusNode :: Persist (Box :: new (HfPlusNode :: Delta (Box :: new (HfPlusNode :: Unique (Box :: new (HfPlusNode :: Persist (inner)) ,))))) } node => node , } } ; } pub fn persist_pullup (ir : Vec < HfPlusLeaf >) -> Vec < HfPlusLeaf > { let mut seen_tees = Default :: default () ; let mut persist_pulled_tees = Default :: default () ; ir . into_iter () . map (| l | { l . transform_children (| n , s | n . transform_bottom_up (persist_pullup_node , s , & mut persist_pulled_tees) , & mut seen_tees ,) }) . collect () } # [cfg (stageleft_macro)] pub mod tests { pub use stageleft :: * ; pub use crate :: __staged :: deploy :: MultiGraph ; pub use crate :: __staged :: location :: Location ; # [test] pub fn persist_pullup_through_map () { let flow = crate :: builder :: FlowBuilder :: new () ; let process = flow . process :: < () > () ; process . source_iter (q ! (0 .. 10)) . map (q ! (| v | v + 1)) . for_each (q ! (| n | println ! ("{}" , n))) ; let built = flow . finalize () ; insta :: assert_debug_snapshot ! (built . ir ()) ; let optimized = built . optimize_with (super :: persist_pullup) ; insta :: assert_debug_snapshot ! (optimized . ir ()) ; for (id , graph) in optimized . compile_no_network :: < MultiGraph > () . hydroflow_ir () { insta :: with_settings ! ({ snapshot_suffix => format ! ("surface_graph_{id}") } , { insta :: assert_snapshot ! (graph . surface_syntax_string ()) ; }) ; } } # [test] pub fn persist_pullup_behind_tee () { let flow = crate :: builder :: FlowBuilder :: new () ; let process = flow . process :: < () > () ; let tick = process . tick () ; let before_tee = unsafe { process . source_iter (q ! (0 .. 10)) . timestamped (& tick) . tick_batch () . persist () } ; before_tee . clone () . map (q ! (| v | v + 1)) . all_ticks () . for_each (q ! (| n | println ! ("{}" , n))) ; before_tee . clone () . map (q ! (| v | v + 1)) . all_ticks () . for_each (q ! (| n | println ! ("{}" , n))) ; let built = flow . finalize () ; insta :: assert_debug_snapshot ! (built . ir ()) ; let optimized = built . optimize_with (super :: persist_pullup) ; insta :: assert_debug_snapshot ! (optimized . ir ()) ; for (id , graph) in optimized . compile_no_network :: < MultiGraph > () . hydroflow_ir () { insta :: with_settings ! ({ snapshot_suffix => format ! ("surface_graph_{id}") } , { insta :: assert_snapshot ! (graph . surface_syntax_string ()) ; }) ; } } } } pub mod profiler { pub use std :: cell :: RefCell ; pub use hydroflow :: futures :: channel :: mpsc :: UnboundedSender ; pub use stageleft :: * ; pub use super :: profiler as myself ; pub use crate :: __staged :: ir :: * ; pub fn increment_counter (count : & mut u64) { * count += 1 ; } pub fn quoted_any_fn < 'a , F : Fn (& usize) + 'a , Q : IntoQuotedMut < 'a , F , () > > (q : Q) -> Q { q } # [doc = " Add a profiling node before each node to count the cardinality of its input"] pub fn add_profiling_node < 'a > (node : & mut HfPlusNode , counters : RuntimeData < & 'a RefCell < Vec < u64 > > > , counter_queue : RuntimeData < & 'a RefCell < UnboundedSender < (usize , u64) > > > , id : & mut u32 , seen_tees : & mut SeenTees ,) { let my_id = * id ; * id += 1 ; node . transform_children (| node , seen_tees | add_profiling_node (node , counters , counter_queue , id , seen_tees) , seen_tees ,) ; let orig_node = std :: mem :: replace (node , HfPlusNode :: Placeholder) ; * node = HfPlusNode :: Inspect { f : quoted_any_fn (q ! ({ counter_queue . borrow () . unbounded_send ((my_id as usize , counters . borrow () [my_id as usize])) . unwrap () ; counters . borrow_mut () [my_id as usize] = 0 ; move | _ | { myself :: increment_counter (& mut counters . borrow_mut () [my_id as usize]) ; } })) . splice_untyped () . into () , input : Box :: new (orig_node) , } } # [doc = " Count the cardinality of each input and periodically output to a file"] pub fn profiling < 'a > (ir : Vec < HfPlusLeaf > , counters : RuntimeData < & 'a RefCell < Vec < u64 > > > , counter_queue : RuntimeData < & 'a RefCell < UnboundedSender < (usize , u64) > > > ,) -> Vec < HfPlusLeaf > { let mut id = 0 ; let mut seen_tees = Default :: default () ; ir . into_iter () . map (| l | { l . transform_children (| node , seen_tees | { add_profiling_node (node , counters , counter_queue , & mut id , seen_tees) } , & mut seen_tees ,) }) . collect () } # [cfg (stageleft_macro)] pub mod tests { pub use stageleft :: * ; pub use crate :: __staged :: deploy :: MultiGraph ; pub use crate :: __staged :: location :: Location ; # [test] pub fn profiler_wrapping_all_operators () { let flow = crate :: builder :: FlowBuilder :: new () ; let process = flow . process :: < () > () ; process . source_iter (q ! (0 .. 10)) . map (q ! (| v | v + 1)) . for_each (q ! (| n | println ! ("{}" , n))) ; let built = flow . finalize () ; insta :: assert_debug_snapshot ! (& built . ir ()) ; let counters = RuntimeData :: new ("Fake") ; let counter_queue = RuntimeData :: new ("Fake") ; let pushed_down = built . optimize_with (crate :: rewrites :: persist_pullup :: persist_pullup) . optimize_with (| ir | super :: profiling (ir , counters , counter_queue)) ; insta :: assert_debug_snapshot ! (& pushed_down . ir ()) ; let _ = pushed_down . compile_no_network :: < MultiGraph > () ; } } } pub mod properties { pub use std :: collections :: HashSet ; pub use stageleft :: * ; pub use crate :: __staged :: ir :: { HfPlusLeaf , HfPlusNode , SeenTees } ; pub use crate :: rewrites :: properties :: PropertyDatabase ; # [doc = " Allows us to convert the hydroflow datatype for folds to a binary operation for the algebra"] # [doc = " property tests."] # [allow (clippy :: allow_attributes , dead_code , reason = "staged programming")] pub fn convert_hf_to_binary < I , A : Default , F : Fn (& mut A , I) > (f : F) -> impl Fn (I , I) -> A { move | a , b | { let mut acc = Default :: default () ; f (& mut acc , a) ; f (& mut acc , b) ; acc } } # [cfg (stageleft_macro)] impl PropertyDatabase { # [doc = " Tags the expression as commutative."] pub fn add_commutative_tag < 'a , I , A , F : Fn (& mut A , I) , Ctx , Q : QuotedWithContext < 'a , F , Ctx > + Clone , > (& mut self , expr : Q , ctx : & Ctx ,) -> Q { let expr_clone = expr . clone () ; self . commutative . insert (expr_clone . splice_untyped_ctx (ctx)) ; expr } pub fn is_tagged_commutative (& self , expr : & syn :: Expr) -> bool { self . commutative . contains (expr) } } pub fn properties_optimize_node (node : & mut HfPlusNode , db : & PropertyDatabase , seen_tees : & mut SeenTees ,) { node . transform_children (| node , seen_tees | properties_optimize_node (node , db , seen_tees) , seen_tees ,) ; match node { HfPlusNode :: ReduceKeyed { f , .. } if db . is_tagged_commutative (& f . 0) => { dbg ! ("IDENTIFIED COMMUTATIVE OPTIMIZATION for {:?}" , & f) ; } _ => { } } } pub fn properties_optimize (ir : Vec < HfPlusLeaf > , db : & PropertyDatabase) -> Vec < HfPlusLeaf > { let mut seen_tees = Default :: default () ; ir . into_iter () . map (| l | { l . transform_children (| node , seen_tees | properties_optimize_node (node , db , seen_tees) , & mut seen_tees ,) }) . collect () } # [cfg (stageleft_macro)] pub mod tests { pub use super :: * ; pub use crate :: __staged :: deploy :: SingleProcessGraph ; pub use crate :: __staged :: location :: Location ; pub use crate :: __staged :: FlowBuilder ; # [test] pub fn test_property_database () { let mut db = PropertyDatabase :: default () ; assert ! (! db . is_tagged_commutative (& (q ! (| a : & mut i32 , b : i32 | * a += b) . splice_untyped_ctx (& ())))) ; let _ = db . add_commutative_tag (q ! (| a : & mut i32 , b : i32 | * a += b) , & ()) ; assert ! (db . is_tagged_commutative (& (q ! (| a : & mut i32 , b : i32 | * a += b) . splice_untyped_ctx (& ())))) ; } # [test] pub fn test_property_optimized () { let flow = FlowBuilder :: new () ; let mut database = PropertyDatabase :: default () ; let process = flow . process :: < () > () ; let tick = process . tick () ; let counter_func = q ! (| count : & mut i32 , _ | * count += 1) ; let _ = database . add_commutative_tag (counter_func , & tick) ; unsafe { process . source_iter (q ! (vec ! [])) . map (q ! (| string : String | (string , ()))) . timestamped (& tick) . tick_batch () } . fold_keyed (q ! (|| 0) , counter_func) . all_ticks () . for_each (q ! (| (string , count) | println ! ("{}: {}" , string , count))) ; let built = flow . optimize_with (| ir | properties_optimize (ir , & database)) . with_default_optimize :: < SingleProcessGraph > () ; insta :: assert_debug_snapshot ! (built . ir ()) ; let _ = built . compile_no_network () ; } } } } pub mod staging_util { pub use std :: marker :: PhantomData ; pub use proc_macro2 :: { Span , TokenStream } ; pub use quote :: quote ; pub type Invariant < 'a , D = () > = PhantomData < (fn (& 'a ()) -> & 'a () , D) > ; pub fn get_this_crate () -> TokenStream { let hydroflow_crate = proc_macro_crate :: crate_name ("hydroflow_plus") . expect ("hydroflow_plus should be present in `Cargo.toml`") ; match hydroflow_crate { proc_macro_crate :: FoundCrate :: Itself => quote ! { hydroflow_plus } , proc_macro_crate :: FoundCrate :: Name (name) => { let ident = syn :: Ident :: new (& name , Span :: call_site ()) ; quote ! { # ident } } } } } # [cfg (stageleft_macro)] # [stageleft :: runtime] # [cfg (test)] mod tests { # [ctor :: ctor] fn init () { crate :: deploy :: init_test () ; } }
\ No newline at end of file diff --git a/doc/src/hydroflow_plus/rewrites/mod.rs.html b/doc/src/hydroflow_plus/rewrites/mod.rs.html deleted file mode 100644 index 5c0d8e4e2f5a..000000000000 --- a/doc/src/hydroflow_plus/rewrites/mod.rs.html +++ /dev/null @@ -1,7 +0,0 @@ -mod.rs - source
1
-2
-3
-
pub mod persist_pullup;
-pub mod profiler;
-pub mod properties;
-
\ No newline at end of file diff --git a/doc/src/hydroflow_plus/staging_util.rs.html b/doc/src/hydroflow_plus/staging_util.rs.html deleted file mode 100644 index 7b8e93482c9f..000000000000 --- a/doc/src/hydroflow_plus/staging_util.rs.html +++ /dev/null @@ -1,37 +0,0 @@ -staging_util.rs - source
1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-
use std::marker::PhantomData;
-
-use proc_macro2::{Span, TokenStream};
-use quote::quote;
-
-pub type Invariant<'a, D = ()> = PhantomData<(fn(&'a ()) -> &'a (), D)>;
-
-pub fn get_this_crate() -> TokenStream {
-    let hydroflow_crate = proc_macro_crate::crate_name("hydroflow_plus")
-        .expect("hydroflow_plus should be present in `Cargo.toml`");
-    match hydroflow_crate {
-        proc_macro_crate::FoundCrate::Itself => quote! { hydroflow_plus },
-        proc_macro_crate::FoundCrate::Name(name) => {
-            let ident = syn::Ident::new(&name, Span::call_site());
-            quote! { #ident }
-        }
-    }
-}
-
\ No newline at end of file diff --git a/doc/src/hydroflow_plus_std/home/runner/work/hydroflow/hydroflow/target/debug/build/hydroflow_plus_std-bb1028ab13681a15/out/lib_pub.rs.html b/doc/src/hydroflow_plus_std/home/runner/work/hydroflow/hydroflow/target/debug/build/hydroflow_plus_std-bb1028ab13681a15/out/lib_pub.rs.html deleted file mode 100644 index 7059c1cbb127..000000000000 --- a/doc/src/hydroflow_plus_std/home/runner/work/hydroflow/hydroflow/target/debug/build/hydroflow_plus_std-bb1028ab13681a15/out/lib_pub.rs.html +++ /dev/null @@ -1,2 +0,0 @@ -lib_pub.rs - source
1
-
pub mod quorum { pub use std :: hash :: Hash ; pub use hydroflow_plus :: * ; pub use location :: NoTick ; # [expect (clippy :: type_complexity , reason = "stream types with ordering")] pub fn collect_quorum_with_response < 'a , L : Location < 'a > + NoTick , Order , K : Clone + Eq + Hash , V : Clone , E : Clone , > (responses : Stream < (K , Result < V , E >) , Timestamped < L > , Unbounded , Order > , min : usize , max : usize ,) -> (Stream < (K , V) , Timestamped < L > , Unbounded , Order > , Stream < (K , E) , Timestamped < L > , Unbounded , Order > ,) { let tick = responses . timestamp_source () ; let (not_all_complete_cycle , not_all) = tick . cycle :: < Stream < _ , _ , _ , Order > > () ; let current_responses = not_all . union (unsafe { responses . clone () . tick_batch () }) ; let count_per_key = current_responses . clone () . fold_keyed_commutative (q ! (move || (0 , 0)) , q ! (move | accum , value | { if value . is_ok () { accum . 0 += 1 ; } else { accum . 1 += 1 ; } }) ,) ; let not_reached_min_count = count_per_key . clone () . filter_map (q ! (move | (key , (success , _error)) | if success < min { Some (key) } else { None })) ; let reached_min_count = count_per_key . clone () . filter_map (q ! (move | (key , (success , _error)) | if success >= min { Some (key) } else { None })) ; let just_reached_quorum = if max == min { not_all_complete_cycle . complete_next_tick (current_responses . clone () . anti_join (reached_min_count)) ; current_responses . anti_join (not_reached_min_count) } else { let (min_but_not_max_complete_cycle , min_but_not_max) = tick . cycle () ; let received_from_all = count_per_key . filter_map (q ! (move | (key , (success , error)) | if (success + error) >= max { Some (key) } else { None })) ; min_but_not_max_complete_cycle . complete_next_tick (reached_min_count . filter_not_in (received_from_all . clone ())) ; not_all_complete_cycle . complete_next_tick (current_responses . clone () . anti_join (received_from_all)) ; current_responses . anti_join (not_reached_min_count) . anti_join (min_but_not_max) } ; (just_reached_quorum . filter_map (q ! (move | (key , res) | match res { Ok (v) => Some ((key , v)) , Err (_) => None , })) . all_ticks () , responses . filter_map (q ! (move | (key , res) | match res { Ok (_) => None , Err (e) => Some ((key , e)) , })) ,) } # [expect (clippy :: type_complexity , reason = "stream types with ordering")] pub fn collect_quorum < 'a , L : Location < 'a > + NoTick , Order , K : Clone + Eq + Hash , E : Clone > (responses : Stream < (K , Result < () , E >) , Timestamped < L > , Unbounded , Order > , min : usize , max : usize ,) -> (Stream < K , Timestamped < L > , Unbounded , Order > , Stream < (K , E) , Timestamped < L > , Unbounded , Order > ,) { let tick = responses . timestamp_source () ; let (not_all_complete_cycle , not_all) = tick . cycle :: < Stream < _ , _ , _ , Order > > () ; let current_responses = not_all . union (unsafe { responses . clone () . tick_batch () }) ; let count_per_key = current_responses . clone () . fold_keyed_commutative (q ! (move || (0 , 0)) , q ! (move | accum , value | { if value . is_ok () { accum . 0 += 1 ; } else { accum . 1 += 1 ; } }) ,) ; let reached_min_count = count_per_key . clone () . filter_map (q ! (move | (key , (success , _error)) | if success >= min { Some (key) } else { None })) ; let just_reached_quorum = if max == min { not_all_complete_cycle . complete_next_tick (current_responses . clone () . anti_join (reached_min_count . clone ()) ,) ; reached_min_count } else { let (min_but_not_max_complete_cycle , min_but_not_max) = tick . cycle () ; let received_from_all = count_per_key . filter_map (q ! (move | (key , (success , error)) | if (success + error) >= max { Some (key) } else { None })) ; min_but_not_max_complete_cycle . complete_next_tick (reached_min_count . clone () . filter_not_in (received_from_all . clone ()) ,) ; not_all_complete_cycle . complete_next_tick (current_responses . anti_join (received_from_all)) ; reached_min_count . filter_not_in (min_but_not_max) } ; (just_reached_quorum . all_ticks () , responses . filter_map (q ! (move | (key , res) | match res { Ok (_) => None , Err (e) => Some ((key , e)) , })) ,) } } pub mod request_response { pub use std :: hash :: Hash ; pub use hydroflow_plus :: * ; pub use location :: NoTick ; type JoinResponses < K , M , V , L > = Stream < (K , (M , V)) , Timestamped < L > , Unbounded , NoOrder > ; # [doc = " Given an incoming stream of request-response responses, joins with metadata generated"] # [doc = " at request time that is stored in-memory."] # [doc = ""] # [doc = " The metadata must be generated in the same or a previous tick than the response,"] # [doc = " typically at request time. Only one response element should be produced with a given"] # [doc = " key, same for the metadata stream."] pub fn join_responses < 'a , K : Clone + Eq + Hash , M : Clone , V : Clone , L : Location < 'a > + NoTick > (tick : & Tick < L > , responses : Stream < (K , V) , Timestamped < L > , Unbounded , NoOrder > , metadata : Stream < (K , M) , Tick < L > , Bounded , NoOrder > ,) -> JoinResponses < K , M , V , L > { let (remaining_to_join_complete_cycle , remaining_to_join) = tick . cycle :: < Stream < _ , _ , _ , NoOrder > > () ; let remaining_and_new : Stream < (K , M) , Tick < L > , Bounded , _ > = remaining_to_join . union (metadata) ; let responses = unsafe { responses . tick_batch () } ; let joined_this_tick = remaining_and_new . clone () . join (responses . clone ()) . map (q ! (| (key , (meta , resp)) | (key , (meta , resp)))) ; remaining_to_join_complete_cycle . complete_next_tick (remaining_and_new . anti_join (responses . map (q ! (| (key , _) | key)))) ; joined_this_tick . all_ticks () } } # [cfg (stageleft_macro)] # [stageleft :: runtime] # [cfg (test)] mod tests { # [ctor :: ctor] fn init () { hydroflow_plus :: deploy :: init_test () ; } }
\ No newline at end of file diff --git a/doc/src/hydroflow_plus_test/cluster/mod.rs.html b/doc/src/hydroflow_plus_test/cluster/mod.rs.html deleted file mode 100644 index ce2af6b3b57e..000000000000 --- a/doc/src/hydroflow_plus_test/cluster/mod.rs.html +++ /dev/null @@ -1,17 +0,0 @@ -mod.rs - source
1
-2
-3
-4
-5
-6
-7
-8
-
pub mod compute_pi;
-pub mod many_to_many;
-pub mod map_reduce;
-pub mod paxos;
-pub mod paxos_bench;
-pub mod paxos_kv;
-pub mod simple_cluster;
-pub mod two_pc;
-
\ No newline at end of file diff --git a/doc/src/hydroflow_plus_test/distributed/mod.rs.html b/doc/src/hydroflow_plus_test/distributed/mod.rs.html deleted file mode 100644 index cd3c422dbb87..000000000000 --- a/doc/src/hydroflow_plus_test/distributed/mod.rs.html +++ /dev/null @@ -1,3 +0,0 @@ -mod.rs - source
1
-
pub mod first_ten;
-
\ No newline at end of file diff --git a/doc/src/hydroflow_plus_test/lib.rs.html b/doc/src/hydroflow_plus_test/lib.rs.html deleted file mode 100644 index 8cf0fceff589..000000000000 --- a/doc/src/hydroflow_plus_test/lib.rs.html +++ /dev/null @@ -1,23 +0,0 @@ -lib.rs - source
1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-
stageleft::stageleft_no_entry_crate!();
-
-pub mod cluster;
-pub mod distributed;
-
-#[doc(hidden)]
-#[stageleft::runtime]
-mod docs {
-    #[doc = include_str!("../../docs/docs/hydroflow_plus/consistency.md")]
-    mod consistency {}
-}
-
\ No newline at end of file diff --git a/doc/src/hydroflow_plus_test_local/home/runner/work/hydroflow/hydroflow/target/debug/build/hydroflow_plus_test_local-1c2a745bf14c0570/out/lib_pub.rs.html b/doc/src/hydroflow_plus_test_local/home/runner/work/hydroflow/hydroflow/target/debug/build/hydroflow_plus_test_local-1c2a745bf14c0570/out/lib_pub.rs.html deleted file mode 100644 index c1e5ad037fb5..000000000000 --- a/doc/src/hydroflow_plus_test_local/home/runner/work/hydroflow/hydroflow/target/debug/build/hydroflow_plus_test_local-1c2a745bf14c0570/out/lib_pub.rs.html +++ /dev/null @@ -1,2 +0,0 @@ -lib_pub.rs - source
1
-
# [cfg (stageleft_macro)] pub mod local { pub mod chat_app { pub use hydroflow :: tokio :: sync :: mpsc :: UnboundedSender ; pub use hydroflow :: tokio_stream :: wrappers :: UnboundedReceiverStream ; pub use hydroflow_plus :: deploy :: SingleProcessGraph ; pub use hydroflow_plus :: hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydroflow_plus :: * ; pub use stageleft :: { Quoted , RuntimeData } ; # [cfg (stageleft_macro)] # [stageleft :: entry] pub fn chat_app < 'a > (flow : FlowBuilder < 'a > , users_stream : RuntimeData < UnboundedReceiverStream < u32 > > , messages : RuntimeData < UnboundedReceiverStream < String > > , output : RuntimeData < & 'a UnboundedSender < (u32 , String) > > , replay_messages : bool ,) -> impl Quoted < 'a , Hydroflow < 'a > > { let process = flow . process :: < () > () ; let tick = process . tick () ; let users = unsafe { process . source_stream (users_stream) . timestamped (& tick) . tick_batch () } . persist () ; let messages = process . source_stream (messages) ; let messages = if replay_messages { unsafe { messages . timestamped (& tick) . tick_batch () } . persist () } else { unsafe { messages . timestamped (& tick) . tick_batch () } } ; let messages = messages . map (q ! (| s | s . to_uppercase ())) ; let mut joined = users . cross_product (messages) ; if replay_messages { joined = joined . delta () ; } joined . all_ticks () . for_each (q ! (| t | { output . send (t) . unwrap () ; })) ; flow . compile_no_network :: < SingleProcessGraph > () } # [cfg (stageleft_macro)] # [stageleft :: runtime] # [cfg (test)] mod tests { use hydroflow :: assert_graphvis_snapshots ; use hydroflow :: util :: collect_ready ; # [test] fn test_chat_app_no_replay () { let (users_send , users) = hydroflow :: util :: unbounded_channel () ; let (messages_send , messages) = hydroflow :: util :: unbounded_channel () ; let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut chat_server = super :: chat_app ! (users , messages , & out , false) ; assert_graphvis_snapshots ! (chat_server) ; users_send . send (1) . unwrap () ; users_send . send (2) . unwrap () ; messages_send . send ("hello" . to_string ()) . unwrap () ; messages_send . send ("world" . to_string ()) . unwrap () ; chat_server . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [(1 , "HELLO" . to_string ()) , (2 , "HELLO" . to_string ()) , (1 , "WORLD" . to_string ()) , (2 , "WORLD" . to_string ())]) ; users_send . send (3) . unwrap () ; messages_send . send ("goodbye" . to_string ()) . unwrap () ; chat_server . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [(1 , "GOODBYE" . to_string ()) , (2 , "GOODBYE" . to_string ()) , (3 , "GOODBYE" . to_string ())]) ; } # [test] fn test_chat_app_replay () { let (users_send , users) = hydroflow :: util :: unbounded_channel () ; let (messages_send , messages) = hydroflow :: util :: unbounded_channel () ; let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut chat_server = super :: chat_app ! (users , messages , & out , true) ; assert_graphvis_snapshots ! (chat_server) ; users_send . send (1) . unwrap () ; users_send . send (2) . unwrap () ; messages_send . send ("hello" . to_string ()) . unwrap () ; messages_send . send ("world" . to_string ()) . unwrap () ; chat_server . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [(1 , "HELLO" . to_string ()) , (2 , "HELLO" . to_string ()) , (1 , "WORLD" . to_string ()) , (2 , "WORLD" . to_string ())]) ; users_send . send (3) . unwrap () ; messages_send . send ("goodbye" . to_string ()) . unwrap () ; chat_server . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [(3 , "HELLO" . to_string ()) , (3 , "WORLD" . to_string ()) , (1 , "GOODBYE" . to_string ()) , (2 , "GOODBYE" . to_string ()) , (3 , "GOODBYE" . to_string ())]) ; } } } pub mod compute_pi { pub use std :: time :: Duration ; pub use hydroflow_plus :: deploy :: SingleProcessGraph ; pub use hydroflow_plus :: hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydroflow_plus :: * ; pub use stageleft :: { Quoted , RuntimeData } ; pub fn compute_pi < 'a > (flow : & FlowBuilder < 'a > , batch_size : RuntimeData < usize >) -> Process < 'a , () > { let process = flow . process () ; let tick = process . tick () ; let trials = tick . spin_batch (q ! (batch_size)) . map (q ! (| _ | rand :: random ::< (f64 , f64) > ())) . map (q ! (| (x , y) | x * x + y * y < 1.0)) . fold (q ! (|| (0u64 , 0u64)) , q ! (| (inside , total) , sample_inside | { if sample_inside { * inside += 1 ; } * total += 1 ; }) ,) . all_ticks () . drop_timestamp () ; let estimate = trials . reduce (q ! (| (inside , total) , (inside_batch , total_batch) | { * inside += inside_batch ; * total += total_batch ; })) ; unsafe { estimate . sample_every (q ! (Duration :: from_secs (1))) } . for_each (q ! (| (inside , total) | { println ! ("pi: {} ({} trials)" , 4.0 * inside as f64 / total as f64 , total) ; })) ; process } # [cfg (stageleft_macro)] # [stageleft :: entry] pub fn compute_pi_runtime < 'a > (flow : FlowBuilder < 'a > , batch_size : RuntimeData < usize > ,) -> impl Quoted < 'a , Hydroflow < 'a > > { let _ = compute_pi (& flow , batch_size) ; flow . compile_no_network :: < SingleProcessGraph > () } } pub mod count_elems { pub use hydroflow :: tokio :: sync :: mpsc :: UnboundedSender ; pub use hydroflow :: tokio_stream :: wrappers :: UnboundedReceiverStream ; pub use hydroflow_plus :: deploy :: SingleProcessGraph ; pub use hydroflow_plus :: hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydroflow_plus :: * ; pub use stageleft :: { Quoted , RuntimeData } ; pub fn count_elems_generic < 'a , T : 'a > (flow : FlowBuilder < 'a > , input_stream : RuntimeData < UnboundedReceiverStream < T > > , output : RuntimeData < & 'a UnboundedSender < u32 > > ,) -> impl Quoted < 'a , Hydroflow < 'a > > { let process = flow . process :: < () > () ; let tick = process . tick () ; let source = process . source_stream (input_stream) ; let count = unsafe { source . map (q ! (| _ | 1)) . timestamped (& tick) . tick_batch () } . fold (q ! (|| 0) , q ! (| a , b | * a += b)) . all_ticks () ; count . for_each (q ! (| v | { output . send (v) . unwrap () ; })) ; flow . compile_no_network :: < SingleProcessGraph > () } # [cfg (stageleft_macro)] # [stageleft :: entry] pub fn count_elems < 'a > (flow : FlowBuilder < 'a > , input_stream : RuntimeData < UnboundedReceiverStream < usize > > , output : RuntimeData < & 'a UnboundedSender < u32 > > ,) -> impl Quoted < 'a , Hydroflow < 'a > > { count_elems_generic (flow , input_stream , output) } # [cfg (stageleft_macro)] # [stageleft :: runtime] # [cfg (test)] mod tests { use hydroflow :: assert_graphvis_snapshots ; use hydroflow :: util :: collect_ready ; # [test] pub fn test_count () { let (in_send , input) = hydroflow :: util :: unbounded_channel () ; let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut count = super :: count_elems ! (input , & out) ; assert_graphvis_snapshots ! (count) ; in_send . send (1) . unwrap () ; in_send . send (1) . unwrap () ; in_send . send (1) . unwrap () ; count . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [3]) ; } } } pub mod first_ten { pub use hydroflow_plus :: deploy :: SingleProcessGraph ; pub use hydroflow_plus :: hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydroflow_plus :: * ; pub use stageleft :: Quoted ; pub fn first_ten (flow : & FlowBuilder) { let process = flow . process :: < () > () ; let numbers = process . source_iter (q ! (0 .. 10)) ; numbers . for_each (q ! (| n | println ! ("{}" , n))) ; } # [cfg (stageleft_macro)] # [stageleft :: entry] pub fn first_ten_runtime < 'a > (flow : FlowBuilder < 'a >) -> impl Quoted < 'a , Hydroflow < 'a > > { first_ten (& flow) ; flow . compile_no_network :: < SingleProcessGraph > () } # [cfg (stageleft_macro)] # [stageleft :: runtime] # [cfg (test)] mod tests { # [test] fn instantiate_first_ten () { let _ = super :: first_ten_runtime ! () ; } } } pub mod graph_reachability { pub use hydroflow :: tokio :: sync :: mpsc :: UnboundedSender ; pub use hydroflow :: tokio_stream :: wrappers :: UnboundedReceiverStream ; pub use hydroflow_plus :: deploy :: SingleProcessGraph ; pub use hydroflow_plus :: hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydroflow_plus :: * ; pub use stageleft :: { Quoted , RuntimeData } ; # [cfg (stageleft_macro)] # [stageleft :: entry] pub fn graph_reachability < 'a > (flow : FlowBuilder < 'a > , roots : RuntimeData < UnboundedReceiverStream < u32 > > , edges : RuntimeData < UnboundedReceiverStream < (u32 , u32) > > , reached_out : RuntimeData < & 'a UnboundedSender < u32 > > ,) -> impl Quoted < 'a , Hydroflow < 'a > > { let process = flow . process :: < () > () ; let roots = process . source_stream (roots) ; let edges = process . source_stream (edges) ; let reachability_tick = process . tick () ; let (set_reached_cycle , reached_cycle) = reachability_tick . cycle :: < Stream < _ , _ , _ , NoOrder > > () ; let reached = unsafe { roots . timestamped (& reachability_tick) . tick_batch () . union (reached_cycle) } ; let reachable = reached . clone () . map (q ! (| r | (r , ()))) . join (unsafe { edges . timestamped (& reachability_tick) . tick_batch () . persist () }) . map (q ! (| (_from , (_ , to)) | to)) ; set_reached_cycle . complete_next_tick (reached . clone () . union (reachable)) ; reached . all_ticks () . unique () . for_each (q ! (| v | { reached_out . send (v) . unwrap () ; })) ; flow . compile_no_network :: < SingleProcessGraph > () } # [cfg (stageleft_macro)] # [stageleft :: runtime] # [cfg (test)] mod tests { use hydroflow :: assert_graphvis_snapshots ; use hydroflow :: util :: collect_ready ; # [test] pub fn test_reachability () { let (roots_send , roots) = hydroflow :: util :: unbounded_channel () ; let (edges_send , edges) = hydroflow :: util :: unbounded_channel () ; let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut reachability = super :: graph_reachability ! (roots , edges , & out) ; assert_graphvis_snapshots ! (reachability) ; roots_send . send (1) . unwrap () ; roots_send . send (2) . unwrap () ; edges_send . send ((1 , 2)) . unwrap () ; edges_send . send ((2 , 3)) . unwrap () ; edges_send . send ((3 , 4)) . unwrap () ; edges_send . send ((4 , 5)) . unwrap () ; reachability . run_tick () ; reachability . run_tick () ; reachability . run_tick () ; reachability . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [1 , 2 , 3 , 4 , 5]) ; } } } pub mod negation { pub use hydroflow :: tokio :: sync :: mpsc :: UnboundedSender ; pub use hydroflow_plus :: deploy :: SingleProcessGraph ; pub use hydroflow_plus :: hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydroflow_plus :: * ; pub use stageleft :: { Quoted , RuntimeData } ; # [cfg (stageleft_macro)] # [stageleft :: entry] pub fn test_difference < 'a > (flow : FlowBuilder < 'a > , output : RuntimeData < & 'a UnboundedSender < u32 > > , persist1 : bool , persist2 : bool ,) -> impl Quoted < 'a , Hydroflow < 'a > > { let process = flow . process :: < () > () ; let tick = process . tick () ; let mut source = unsafe { process . source_iter (q ! (0 .. 5)) . timestamped (& tick) . tick_batch () } ; if persist1 { source = source . persist () ; } let mut source2 = unsafe { process . source_iter (q ! (3 .. 6)) . timestamped (& tick) . tick_batch () } ; if persist2 { source2 = source2 . persist () ; } source . filter_not_in (source2) . all_ticks () . for_each (q ! (| v | { output . send (v) . unwrap () ; })) ; flow . compile_no_network :: < SingleProcessGraph > () } # [cfg (stageleft_macro)] # [stageleft :: entry] pub fn test_anti_join < 'a > (flow : FlowBuilder < 'a > , output : RuntimeData < & 'a UnboundedSender < u32 > > , persist1 : bool , persist2 : bool ,) -> impl Quoted < 'a , Hydroflow < 'a > > { let process = flow . process :: < () > () ; let tick = process . tick () ; let mut source = unsafe { process . source_iter (q ! (0 .. 5)) . map (q ! (| v | (v , v))) . timestamped (& tick) . tick_batch () } ; if persist1 { source = source . persist () ; } let mut source2 = unsafe { process . source_iter (q ! (3 .. 6)) . timestamped (& tick) . tick_batch () } ; if persist2 { source2 = source2 . persist () ; } source . anti_join (source2) . all_ticks () . for_each (q ! (| v | { output . send (v . 0) . unwrap () ; })) ; flow . compile_no_network :: < SingleProcessGraph > () } # [cfg (stageleft_macro)] # [stageleft :: runtime] # [cfg (test)] mod tests { use hydroflow :: assert_graphvis_snapshots ; use hydroflow :: util :: collect_ready ; # [test] fn test_difference_tick_tick () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_difference ! (& out , false , false) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [] as & [u32]) ; } # [test] fn test_difference_tick_static () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_difference ! (& out , false , true) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [] as & [u32]) ; } # [test] fn test_difference_static_tick () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_difference ! (& out , true , false) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2 , 3 , 4]) ; } # [test] fn test_difference_static_static () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_difference ! (& out , true , true) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; } # [test] fn test_anti_join_tick_tick () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_anti_join ! (& out , false , false) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [] as & [u32]) ; } # [test] fn test_anti_join_tick_static () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_anti_join ! (& out , false , true) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [] as & [u32]) ; } # [test] fn test_anti_join_static_tick () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_anti_join ! (& out , true , false) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2 , 3 , 4]) ; } # [test] fn test_anti_join_static_static () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_anti_join ! (& out , true , true) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; } } } pub mod teed_join { pub use hydroflow :: futures :: stream :: Stream ; pub use hydroflow :: tokio :: sync :: mpsc :: UnboundedSender ; pub use hydroflow :: tokio_stream :: wrappers :: UnboundedReceiverStream ; pub use hydroflow_plus :: deploy :: MultiGraph ; pub use hydroflow_plus :: hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydroflow_plus :: * ; pub use stageleft :: { Quoted , RuntimeData } ; pub struct N0 { } pub struct N1 { } # [cfg (stageleft_macro)] # [stageleft :: entry (UnboundedReceiverStream < u32 >)] pub fn teed_join < 'a , S : Stream < Item = u32 > + Unpin + 'a > (flow : FlowBuilder < 'a > , input_stream : RuntimeData < S > , output : RuntimeData < & 'a UnboundedSender < u32 > > , send_twice : bool , subgraph_id : RuntimeData < usize > ,) -> impl Quoted < 'a , Hydroflow < 'a > > { let node_zero = flow . process :: < N0 > () ; let node_one = flow . process :: < N1 > () ; let n0_tick = node_zero . tick () ; let source = unsafe { node_zero . source_stream (input_stream) . timestamped (& n0_tick) . tick_batch () } ; let map1 = source . clone () . map (q ! (| v | (v + 1 , ()))) ; let map2 = source . map (q ! (| v | (v - 1 , ()))) ; let joined = map1 . join (map2) . map (q ! (| t | t . 0)) ; joined . clone () . all_ticks () . for_each (q ! (| v | { output . send (v) . unwrap () ; })) ; if send_twice { joined . all_ticks () . for_each (q ! (| v | { output . send (v) . unwrap () ; })) ; } let source_node_id_1 = node_one . source_iter (q ! (0 .. 5)) ; source_node_id_1 . for_each (q ! (| v | { output . send (v) . unwrap () ; })) ; flow . compile_no_network :: < MultiGraph > () . with_dynamic_id (subgraph_id) } # [cfg (stageleft_macro)] # [stageleft :: runtime] # [cfg (test)] mod tests { use hydroflow :: assert_graphvis_snapshots ; use hydroflow :: util :: collect_ready ; # [test] fn test_teed_join () { let (in_send , input) = hydroflow :: util :: unbounded_channel () ; let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut joined = super :: teed_join ! (input , & out , false , 0) ; assert_graphvis_snapshots ! (joined) ; in_send . send (1) . unwrap () ; in_send . send (2) . unwrap () ; in_send . send (3) . unwrap () ; in_send . send (4) . unwrap () ; joined . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [2 , 3]) ; } # [test] fn test_teed_join_twice () { let (in_send , input) = hydroflow :: util :: unbounded_channel () ; let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut joined = super :: teed_join ! (input , & out , true , 0) ; assert_graphvis_snapshots ! (joined) ; in_send . send (1) . unwrap () ; in_send . send (2) . unwrap () ; in_send . send (3) . unwrap () ; in_send . send (4) . unwrap () ; joined . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [2 , 2 , 3 , 3]) ; } # [test] fn test_teed_join_multi_node () { let (_ , input) = hydroflow :: util :: unbounded_channel () ; let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut joined = super :: teed_join ! (input , & out , true , 1) ; assert_graphvis_snapshots ! (joined) ; joined . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2 , 3 , 4]) ; } } } } # [cfg (not (stageleft_macro))] pub mod local { pub mod chat_app { pub use hydroflow :: tokio :: sync :: mpsc :: UnboundedSender ; pub use hydroflow :: tokio_stream :: wrappers :: UnboundedReceiverStream ; pub use hydroflow_plus :: deploy :: SingleProcessGraph ; pub use hydroflow_plus :: hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydroflow_plus :: * ; pub use stageleft :: { Quoted , RuntimeData } ; # [cfg (stageleft_macro)] # [stageleft :: entry] pub fn chat_app < 'a > (flow : FlowBuilder < 'a > , users_stream : RuntimeData < UnboundedReceiverStream < u32 > > , messages : RuntimeData < UnboundedReceiverStream < String > > , output : RuntimeData < & 'a UnboundedSender < (u32 , String) > > , replay_messages : bool ,) -> impl Quoted < 'a , Hydroflow < 'a > > { let process = flow . process :: < () > () ; let tick = process . tick () ; let users = unsafe { process . source_stream (users_stream) . timestamped (& tick) . tick_batch () } . persist () ; let messages = process . source_stream (messages) ; let messages = if replay_messages { unsafe { messages . timestamped (& tick) . tick_batch () } . persist () } else { unsafe { messages . timestamped (& tick) . tick_batch () } } ; let messages = messages . map (q ! (| s | s . to_uppercase ())) ; let mut joined = users . cross_product (messages) ; if replay_messages { joined = joined . delta () ; } joined . all_ticks () . for_each (q ! (| t | { output . send (t) . unwrap () ; })) ; flow . compile_no_network :: < SingleProcessGraph > () } # [cfg (stageleft_macro)] # [stageleft :: runtime] # [cfg (test)] mod tests { use hydroflow :: assert_graphvis_snapshots ; use hydroflow :: util :: collect_ready ; # [test] fn test_chat_app_no_replay () { let (users_send , users) = hydroflow :: util :: unbounded_channel () ; let (messages_send , messages) = hydroflow :: util :: unbounded_channel () ; let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut chat_server = super :: chat_app ! (users , messages , & out , false) ; assert_graphvis_snapshots ! (chat_server) ; users_send . send (1) . unwrap () ; users_send . send (2) . unwrap () ; messages_send . send ("hello" . to_string ()) . unwrap () ; messages_send . send ("world" . to_string ()) . unwrap () ; chat_server . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [(1 , "HELLO" . to_string ()) , (2 , "HELLO" . to_string ()) , (1 , "WORLD" . to_string ()) , (2 , "WORLD" . to_string ())]) ; users_send . send (3) . unwrap () ; messages_send . send ("goodbye" . to_string ()) . unwrap () ; chat_server . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [(1 , "GOODBYE" . to_string ()) , (2 , "GOODBYE" . to_string ()) , (3 , "GOODBYE" . to_string ())]) ; } # [test] fn test_chat_app_replay () { let (users_send , users) = hydroflow :: util :: unbounded_channel () ; let (messages_send , messages) = hydroflow :: util :: unbounded_channel () ; let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut chat_server = super :: chat_app ! (users , messages , & out , true) ; assert_graphvis_snapshots ! (chat_server) ; users_send . send (1) . unwrap () ; users_send . send (2) . unwrap () ; messages_send . send ("hello" . to_string ()) . unwrap () ; messages_send . send ("world" . to_string ()) . unwrap () ; chat_server . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [(1 , "HELLO" . to_string ()) , (2 , "HELLO" . to_string ()) , (1 , "WORLD" . to_string ()) , (2 , "WORLD" . to_string ())]) ; users_send . send (3) . unwrap () ; messages_send . send ("goodbye" . to_string ()) . unwrap () ; chat_server . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [(3 , "HELLO" . to_string ()) , (3 , "WORLD" . to_string ()) , (1 , "GOODBYE" . to_string ()) , (2 , "GOODBYE" . to_string ()) , (3 , "GOODBYE" . to_string ())]) ; } } } pub mod compute_pi { pub use std :: time :: Duration ; pub use hydroflow_plus :: deploy :: SingleProcessGraph ; pub use hydroflow_plus :: hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydroflow_plus :: * ; pub use stageleft :: { Quoted , RuntimeData } ; pub fn compute_pi < 'a > (flow : & FlowBuilder < 'a > , batch_size : RuntimeData < usize >) -> Process < 'a , () > { let process = flow . process () ; let tick = process . tick () ; let trials = tick . spin_batch (q ! (batch_size)) . map (q ! (| _ | rand :: random ::< (f64 , f64) > ())) . map (q ! (| (x , y) | x * x + y * y < 1.0)) . fold (q ! (|| (0u64 , 0u64)) , q ! (| (inside , total) , sample_inside | { if sample_inside { * inside += 1 ; } * total += 1 ; }) ,) . all_ticks () . drop_timestamp () ; let estimate = trials . reduce (q ! (| (inside , total) , (inside_batch , total_batch) | { * inside += inside_batch ; * total += total_batch ; })) ; unsafe { estimate . sample_every (q ! (Duration :: from_secs (1))) } . for_each (q ! (| (inside , total) | { println ! ("pi: {} ({} trials)" , 4.0 * inside as f64 / total as f64 , total) ; })) ; process } # [cfg (stageleft_macro)] # [stageleft :: entry] pub fn compute_pi_runtime < 'a > (flow : FlowBuilder < 'a > , batch_size : RuntimeData < usize > ,) -> impl Quoted < 'a , Hydroflow < 'a > > { let _ = compute_pi (& flow , batch_size) ; flow . compile_no_network :: < SingleProcessGraph > () } } pub mod count_elems { pub use hydroflow :: tokio :: sync :: mpsc :: UnboundedSender ; pub use hydroflow :: tokio_stream :: wrappers :: UnboundedReceiverStream ; pub use hydroflow_plus :: deploy :: SingleProcessGraph ; pub use hydroflow_plus :: hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydroflow_plus :: * ; pub use stageleft :: { Quoted , RuntimeData } ; pub fn count_elems_generic < 'a , T : 'a > (flow : FlowBuilder < 'a > , input_stream : RuntimeData < UnboundedReceiverStream < T > > , output : RuntimeData < & 'a UnboundedSender < u32 > > ,) -> impl Quoted < 'a , Hydroflow < 'a > > { let process = flow . process :: < () > () ; let tick = process . tick () ; let source = process . source_stream (input_stream) ; let count = unsafe { source . map (q ! (| _ | 1)) . timestamped (& tick) . tick_batch () } . fold (q ! (|| 0) , q ! (| a , b | * a += b)) . all_ticks () ; count . for_each (q ! (| v | { output . send (v) . unwrap () ; })) ; flow . compile_no_network :: < SingleProcessGraph > () } # [cfg (stageleft_macro)] # [stageleft :: entry] pub fn count_elems < 'a > (flow : FlowBuilder < 'a > , input_stream : RuntimeData < UnboundedReceiverStream < usize > > , output : RuntimeData < & 'a UnboundedSender < u32 > > ,) -> impl Quoted < 'a , Hydroflow < 'a > > { count_elems_generic (flow , input_stream , output) } # [cfg (stageleft_macro)] # [stageleft :: runtime] # [cfg (test)] mod tests { use hydroflow :: assert_graphvis_snapshots ; use hydroflow :: util :: collect_ready ; # [test] pub fn test_count () { let (in_send , input) = hydroflow :: util :: unbounded_channel () ; let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut count = super :: count_elems ! (input , & out) ; assert_graphvis_snapshots ! (count) ; in_send . send (1) . unwrap () ; in_send . send (1) . unwrap () ; in_send . send (1) . unwrap () ; count . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [3]) ; } } } pub mod first_ten { pub use hydroflow_plus :: deploy :: SingleProcessGraph ; pub use hydroflow_plus :: hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydroflow_plus :: * ; pub use stageleft :: Quoted ; pub fn first_ten (flow : & FlowBuilder) { let process = flow . process :: < () > () ; let numbers = process . source_iter (q ! (0 .. 10)) ; numbers . for_each (q ! (| n | println ! ("{}" , n))) ; } # [cfg (stageleft_macro)] # [stageleft :: entry] pub fn first_ten_runtime < 'a > (flow : FlowBuilder < 'a >) -> impl Quoted < 'a , Hydroflow < 'a > > { first_ten (& flow) ; flow . compile_no_network :: < SingleProcessGraph > () } # [cfg (stageleft_macro)] # [stageleft :: runtime] # [cfg (test)] mod tests { # [test] fn instantiate_first_ten () { let _ = super :: first_ten_runtime ! () ; } } } pub mod graph_reachability { pub use hydroflow :: tokio :: sync :: mpsc :: UnboundedSender ; pub use hydroflow :: tokio_stream :: wrappers :: UnboundedReceiverStream ; pub use hydroflow_plus :: deploy :: SingleProcessGraph ; pub use hydroflow_plus :: hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydroflow_plus :: * ; pub use stageleft :: { Quoted , RuntimeData } ; # [cfg (stageleft_macro)] # [stageleft :: entry] pub fn graph_reachability < 'a > (flow : FlowBuilder < 'a > , roots : RuntimeData < UnboundedReceiverStream < u32 > > , edges : RuntimeData < UnboundedReceiverStream < (u32 , u32) > > , reached_out : RuntimeData < & 'a UnboundedSender < u32 > > ,) -> impl Quoted < 'a , Hydroflow < 'a > > { let process = flow . process :: < () > () ; let roots = process . source_stream (roots) ; let edges = process . source_stream (edges) ; let reachability_tick = process . tick () ; let (set_reached_cycle , reached_cycle) = reachability_tick . cycle :: < Stream < _ , _ , _ , NoOrder > > () ; let reached = unsafe { roots . timestamped (& reachability_tick) . tick_batch () . union (reached_cycle) } ; let reachable = reached . clone () . map (q ! (| r | (r , ()))) . join (unsafe { edges . timestamped (& reachability_tick) . tick_batch () . persist () }) . map (q ! (| (_from , (_ , to)) | to)) ; set_reached_cycle . complete_next_tick (reached . clone () . union (reachable)) ; reached . all_ticks () . unique () . for_each (q ! (| v | { reached_out . send (v) . unwrap () ; })) ; flow . compile_no_network :: < SingleProcessGraph > () } # [cfg (stageleft_macro)] # [stageleft :: runtime] # [cfg (test)] mod tests { use hydroflow :: assert_graphvis_snapshots ; use hydroflow :: util :: collect_ready ; # [test] pub fn test_reachability () { let (roots_send , roots) = hydroflow :: util :: unbounded_channel () ; let (edges_send , edges) = hydroflow :: util :: unbounded_channel () ; let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut reachability = super :: graph_reachability ! (roots , edges , & out) ; assert_graphvis_snapshots ! (reachability) ; roots_send . send (1) . unwrap () ; roots_send . send (2) . unwrap () ; edges_send . send ((1 , 2)) . unwrap () ; edges_send . send ((2 , 3)) . unwrap () ; edges_send . send ((3 , 4)) . unwrap () ; edges_send . send ((4 , 5)) . unwrap () ; reachability . run_tick () ; reachability . run_tick () ; reachability . run_tick () ; reachability . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [1 , 2 , 3 , 4 , 5]) ; } } } pub mod negation { pub use hydroflow :: tokio :: sync :: mpsc :: UnboundedSender ; pub use hydroflow_plus :: deploy :: SingleProcessGraph ; pub use hydroflow_plus :: hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydroflow_plus :: * ; pub use stageleft :: { Quoted , RuntimeData } ; # [cfg (stageleft_macro)] # [stageleft :: entry] pub fn test_difference < 'a > (flow : FlowBuilder < 'a > , output : RuntimeData < & 'a UnboundedSender < u32 > > , persist1 : bool , persist2 : bool ,) -> impl Quoted < 'a , Hydroflow < 'a > > { let process = flow . process :: < () > () ; let tick = process . tick () ; let mut source = unsafe { process . source_iter (q ! (0 .. 5)) . timestamped (& tick) . tick_batch () } ; if persist1 { source = source . persist () ; } let mut source2 = unsafe { process . source_iter (q ! (3 .. 6)) . timestamped (& tick) . tick_batch () } ; if persist2 { source2 = source2 . persist () ; } source . filter_not_in (source2) . all_ticks () . for_each (q ! (| v | { output . send (v) . unwrap () ; })) ; flow . compile_no_network :: < SingleProcessGraph > () } # [cfg (stageleft_macro)] # [stageleft :: entry] pub fn test_anti_join < 'a > (flow : FlowBuilder < 'a > , output : RuntimeData < & 'a UnboundedSender < u32 > > , persist1 : bool , persist2 : bool ,) -> impl Quoted < 'a , Hydroflow < 'a > > { let process = flow . process :: < () > () ; let tick = process . tick () ; let mut source = unsafe { process . source_iter (q ! (0 .. 5)) . map (q ! (| v | (v , v))) . timestamped (& tick) . tick_batch () } ; if persist1 { source = source . persist () ; } let mut source2 = unsafe { process . source_iter (q ! (3 .. 6)) . timestamped (& tick) . tick_batch () } ; if persist2 { source2 = source2 . persist () ; } source . anti_join (source2) . all_ticks () . for_each (q ! (| v | { output . send (v . 0) . unwrap () ; })) ; flow . compile_no_network :: < SingleProcessGraph > () } # [cfg (stageleft_macro)] # [stageleft :: runtime] # [cfg (test)] mod tests { use hydroflow :: assert_graphvis_snapshots ; use hydroflow :: util :: collect_ready ; # [test] fn test_difference_tick_tick () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_difference ! (& out , false , false) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [] as & [u32]) ; } # [test] fn test_difference_tick_static () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_difference ! (& out , false , true) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [] as & [u32]) ; } # [test] fn test_difference_static_tick () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_difference ! (& out , true , false) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2 , 3 , 4]) ; } # [test] fn test_difference_static_static () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_difference ! (& out , true , true) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; } # [test] fn test_anti_join_tick_tick () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_anti_join ! (& out , false , false) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [] as & [u32]) ; } # [test] fn test_anti_join_tick_static () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_anti_join ! (& out , false , true) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [] as & [u32]) ; } # [test] fn test_anti_join_static_tick () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_anti_join ! (& out , true , false) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2 , 3 , 4]) ; } # [test] fn test_anti_join_static_static () { let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut flow = super :: test_anti_join ! (& out , true , true) ; assert_graphvis_snapshots ! (flow) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; flow . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2]) ; } } } pub mod teed_join { pub use hydroflow :: futures :: stream :: Stream ; pub use hydroflow :: tokio :: sync :: mpsc :: UnboundedSender ; pub use hydroflow :: tokio_stream :: wrappers :: UnboundedReceiverStream ; pub use hydroflow_plus :: deploy :: MultiGraph ; pub use hydroflow_plus :: hydroflow :: scheduled :: graph :: Hydroflow ; pub use hydroflow_plus :: * ; pub use stageleft :: { Quoted , RuntimeData } ; pub struct N0 { } pub struct N1 { } # [cfg (stageleft_macro)] # [stageleft :: entry (UnboundedReceiverStream < u32 >)] pub fn teed_join < 'a , S : Stream < Item = u32 > + Unpin + 'a > (flow : FlowBuilder < 'a > , input_stream : RuntimeData < S > , output : RuntimeData < & 'a UnboundedSender < u32 > > , send_twice : bool , subgraph_id : RuntimeData < usize > ,) -> impl Quoted < 'a , Hydroflow < 'a > > { let node_zero = flow . process :: < N0 > () ; let node_one = flow . process :: < N1 > () ; let n0_tick = node_zero . tick () ; let source = unsafe { node_zero . source_stream (input_stream) . timestamped (& n0_tick) . tick_batch () } ; let map1 = source . clone () . map (q ! (| v | (v + 1 , ()))) ; let map2 = source . map (q ! (| v | (v - 1 , ()))) ; let joined = map1 . join (map2) . map (q ! (| t | t . 0)) ; joined . clone () . all_ticks () . for_each (q ! (| v | { output . send (v) . unwrap () ; })) ; if send_twice { joined . all_ticks () . for_each (q ! (| v | { output . send (v) . unwrap () ; })) ; } let source_node_id_1 = node_one . source_iter (q ! (0 .. 5)) ; source_node_id_1 . for_each (q ! (| v | { output . send (v) . unwrap () ; })) ; flow . compile_no_network :: < MultiGraph > () . with_dynamic_id (subgraph_id) } # [cfg (stageleft_macro)] # [stageleft :: runtime] # [cfg (test)] mod tests { use hydroflow :: assert_graphvis_snapshots ; use hydroflow :: util :: collect_ready ; # [test] fn test_teed_join () { let (in_send , input) = hydroflow :: util :: unbounded_channel () ; let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut joined = super :: teed_join ! (input , & out , false , 0) ; assert_graphvis_snapshots ! (joined) ; in_send . send (1) . unwrap () ; in_send . send (2) . unwrap () ; in_send . send (3) . unwrap () ; in_send . send (4) . unwrap () ; joined . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [2 , 3]) ; } # [test] fn test_teed_join_twice () { let (in_send , input) = hydroflow :: util :: unbounded_channel () ; let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut joined = super :: teed_join ! (input , & out , true , 0) ; assert_graphvis_snapshots ! (joined) ; in_send . send (1) . unwrap () ; in_send . send (2) . unwrap () ; in_send . send (3) . unwrap () ; in_send . send (4) . unwrap () ; joined . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [2 , 2 , 3 , 3]) ; } # [test] fn test_teed_join_multi_node () { let (_ , input) = hydroflow :: util :: unbounded_channel () ; let (out , mut out_recv) = hydroflow :: util :: unbounded_channel () ; let mut joined = super :: teed_join ! (input , & out , true , 1) ; assert_graphvis_snapshots ! (joined) ; joined . run_tick () ; assert_eq ! (&* collect_ready ::< Vec < _ >, _ > (& mut out_recv) , & [0 , 1 , 2 , 3 , 4]) ; } } } }
\ No newline at end of file diff --git a/doc/src/hydroflow_plus_test_local/lib.rs.html b/doc/src/hydroflow_plus_test_local/lib.rs.html deleted file mode 100644 index 764cecf8e7d8..000000000000 --- a/doc/src/hydroflow_plus_test_local/lib.rs.html +++ /dev/null @@ -1,13 +0,0 @@ -lib.rs - source
1
-2
-3
-4
-5
-6
-
stageleft::stageleft_crate!(hydroflow_plus_test_local_macro);
-
-#[cfg(stageleft_macro)]
-pub(crate) mod local;
-#[cfg(not(stageleft_macro))]
-pub mod local;
-
\ No newline at end of file diff --git a/doc/src/hydroflow_plus_test_local/local/first_ten.rs.html b/doc/src/hydroflow_plus_test_local/local/first_ten.rs.html deleted file mode 100644 index 672989ded9c4..000000000000 --- a/doc/src/hydroflow_plus_test_local/local/first_ten.rs.html +++ /dev/null @@ -1,51 +0,0 @@ -first_ten.rs - source
1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-
use hydroflow_plus::deploy::SingleProcessGraph;
-use hydroflow_plus::hydroflow::scheduled::graph::Hydroflow;
-use hydroflow_plus::*;
-use stageleft::Quoted;
-
-pub fn first_ten(flow: &FlowBuilder) {
-    let process = flow.process::<()>();
-    let numbers = process.source_iter(q!(0..10));
-    numbers.for_each(q!(|n| println!("{}", n)));
-}
-
-#[stageleft::entry]
-pub fn first_ten_runtime<'a>(flow: FlowBuilder<'a>) -> impl Quoted<'a, Hydroflow<'a>> {
-    first_ten(&flow);
-    flow.compile_no_network::<SingleProcessGraph>()
-}
-
-#[stageleft::runtime]
-#[cfg(test)]
-mod tests {
-    #[test]
-    fn instantiate_first_ten() {
-        let _ = super::first_ten_runtime!();
-    }
-}
-
\ No newline at end of file diff --git a/doc/src/hydroflow_plus_test_local/local/mod.rs.html b/doc/src/hydroflow_plus_test_local/local/mod.rs.html deleted file mode 100644 index 0ad3e89d44ff..000000000000 --- a/doc/src/hydroflow_plus_test_local/local/mod.rs.html +++ /dev/null @@ -1,15 +0,0 @@ -mod.rs - source
1
-2
-3
-4
-5
-6
-7
-
pub mod chat_app;
-pub mod compute_pi;
-pub mod count_elems;
-pub mod first_ten;
-pub mod graph_reachability;
-pub mod negation;
-pub mod teed_join;
-
\ No newline at end of file diff --git a/doc/src/hydroflow_plus_test_local_macro/lib.rs.html b/doc/src/hydroflow_plus_test_local_macro/lib.rs.html deleted file mode 100644 index 57c020cccc85..000000000000 --- a/doc/src/hydroflow_plus_test_local_macro/lib.rs.html +++ /dev/null @@ -1,13 +0,0 @@ -lib.rs - source
1
-2
-3
-4
-5
-6
-
stageleft::stageleft_crate!(hydroflow_plus_test_local_macro);
-
-#[cfg(stageleft_macro)]
-pub(crate) mod local;
-#[cfg(not(stageleft_macro))]
-pub mod local;
-
\ No newline at end of file diff --git a/doc/src/hydroflow_plus_test_local_macro/local/first_ten.rs.html b/doc/src/hydroflow_plus_test_local_macro/local/first_ten.rs.html deleted file mode 100644 index 59eb0844bb6b..000000000000 --- a/doc/src/hydroflow_plus_test_local_macro/local/first_ten.rs.html +++ /dev/null @@ -1,51 +0,0 @@ -first_ten.rs - source
1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-
use hydroflow_plus::deploy::SingleProcessGraph;
-use hydroflow_plus::hydroflow::scheduled::graph::Hydroflow;
-use hydroflow_plus::*;
-use stageleft::Quoted;
-
-pub fn first_ten(flow: &FlowBuilder) {
-    let process = flow.process::<()>();
-    let numbers = process.source_iter(q!(0..10));
-    numbers.for_each(q!(|n| println!("{}", n)));
-}
-
-#[stageleft::entry]
-pub fn first_ten_runtime<'a>(flow: FlowBuilder<'a>) -> impl Quoted<'a, Hydroflow<'a>> {
-    first_ten(&flow);
-    flow.compile_no_network::<SingleProcessGraph>()
-}
-
-#[stageleft::runtime]
-#[cfg(test)]
-mod tests {
-    #[test]
-    fn instantiate_first_ten() {
-        let _ = super::first_ten_runtime!();
-    }
-}
-
\ No newline at end of file diff --git a/doc/src/hydroflow_plus_test_local_macro/local/mod.rs.html b/doc/src/hydroflow_plus_test_local_macro/local/mod.rs.html deleted file mode 100644 index 1ca68afc89d3..000000000000 --- a/doc/src/hydroflow_plus_test_local_macro/local/mod.rs.html +++ /dev/null @@ -1,15 +0,0 @@ -mod.rs - source
1
-2
-3
-4
-5
-6
-7
-
pub mod chat_app;
-pub mod compute_pi;
-pub mod count_elems;
-pub mod first_ten;
-pub mod graph_reachability;
-pub mod negation;
-pub mod teed_join;
-
\ No newline at end of file diff --git a/doc/src/stageleft_macro/lib.rs.html b/doc/src/stageleft_macro/lib.rs.html index 5b6e1c1f2195..e16f618aebc0 100644 --- a/doc/src/stageleft_macro/lib.rs.html +++ b/doc/src/stageleft_macro/lib.rs.html @@ -442,7 +442,7 @@ mod quote_impl; -/// Creates a quoted expression for Hydroflow+. +/// Creates a quoted expression for Hydro. /// /// Creates a quoted expression, which can be typechecked but has its AST serialized /// until it is spliced into a staged entrypoint. Returns a value which implements diff --git a/doc/stageleft/index.html b/doc/stageleft/index.html index 5ccf78fff775..ccd0157fae21 100644 --- a/doc/stageleft/index.html +++ b/doc/stageleft/index.html @@ -1,4 +1,4 @@ -stageleft - Rust

Crate stageleft

source ·

Modules§

Macros§

Structs§

Traits§

Functions§