std_mel/ops/
float.rs

1use melodium_core::*;
2use melodium_macro::{check, mel_function, mel_treatment};
3
4/// Tells if a value is not a number.
5///
6/// Returns `true` if value is `NaN`.
7#[mel_function(
8    generic F (Float)
9)]
10pub fn is_nan(value: F) -> bool {
11    value.float_is_nan()
12}
13
14/// Tells if a stream contains not-a-number values.
15///
16/// Output `true` if value is `NaN`.  
17#[mel_treatment(
18    generic F (Float)
19    input value Stream<F>
20    output nan Stream<bool>
21)]
22pub async fn is_nan() {
23    while let Ok(values) = value
24        .recv_many()
25        .await
26        .map(|values| Into::<VecDeque<Value>>::into(values))
27    {
28        check!(
29            nan.send_many(TransmissionValue::Bool(
30                values.into_iter().map(|val| val.float_is_nan()).collect()
31            ))
32            .await
33        )
34    }
35}
36
37/// Tells if a value is finite.
38///
39/// Returns `true` if value is not infinite nor `NaN`.
40#[mel_function(
41    generic F (Float)
42)]
43pub fn is_finite(value: F) -> bool {
44    value.float_is_finite()
45}
46
47/// Tells if a stream contains finite values.
48///
49/// Output `true` if value is not infinite nor `NaN`.  
50#[mel_treatment(
51    generic F (Float)
52    input value Stream<F>
53    output finite Stream<bool>
54)]
55pub async fn is_finite() {
56    while let Ok(values) = value
57        .recv_many()
58        .await
59        .map(|values| Into::<VecDeque<Value>>::into(values))
60    {
61        check!(
62            finite
63                .send_many(TransmissionValue::Bool(
64                    values
65                        .into_iter()
66                        .map(|val| val.float_is_finite())
67                        .collect()
68                ))
69                .await
70        )
71    }
72}
73
74/// Tells if a value is infinite.
75#[mel_function(
76    generic F (Float)
77)]
78pub fn is_infinite(value: F) -> bool {
79    value.float_is_infinite()
80}
81
82/// Tells if a stream contains infinite values.
83#[mel_treatment(
84    generic F (Float)
85    input value Stream<F>
86    output infinite Stream<bool>
87)]
88pub async fn is_infinite() {
89    while let Ok(values) = value
90        .recv_many()
91        .await
92        .map(|values| Into::<VecDeque<Value>>::into(values))
93    {
94        check!(
95            infinite
96                .send_many(TransmissionValue::Bool(
97                    values
98                        .into_iter()
99                        .map(|val| val.float_is_infinite())
100                        .collect()
101                ))
102                .await
103        )
104    }
105}
106
107/// Tells if a value is normal.
108///
109/// Returns `true` if the number is neither zero, infinite, [subnormal](https://en.wikipedia.org/wiki/Subnormal_number), or NaN.
110#[mel_function(
111    generic F (Float)
112)]
113pub fn is_normal(value: F) -> bool {
114    value.float_is_normal()
115}
116
117/// Tells if a stream contains normal values.
118///
119/// Output `true` if value is neither zero, infinite, [subnormal](https://en.wikipedia.org/wiki/Subnormal_number), or NaN.
120#[mel_treatment(
121    generic F (Float)
122    input value Stream<F>
123    output normal Stream<bool>
124)]
125pub async fn is_normal() {
126    while let Ok(values) = value
127        .recv_many()
128        .await
129        .map(|values| Into::<VecDeque<Value>>::into(values))
130    {
131        check!(
132            normal
133                .send_many(TransmissionValue::Bool(
134                    values
135                        .into_iter()
136                        .map(|val| val.float_is_normal())
137                        .collect()
138                ))
139                .await
140        )
141    }
142}
143
144/// Tells if a value is subnormal.
145///
146/// Returns `true` if the number is [subnormal](https://en.wikipedia.org/wiki/Subnormal_number).
147#[mel_function(
148    generic F (Float)
149)]
150pub fn is_subnormal(value: F) -> bool {
151    value.float_is_subnormal()
152}
153
154/// Tells if a stream contains subnormal values.
155///
156/// Outputs `true` if the number is [subnormal](https://en.wikipedia.org/wiki/Subnormal_number).
157#[mel_treatment(
158    generic F (Float)
159    input value Stream<F>
160    output subnormal Stream<bool>
161)]
162pub async fn is_subnormal() {
163    while let Ok(values) = value
164        .recv_many()
165        .await
166        .map(|values| Into::<VecDeque<Value>>::into(values))
167    {
168        check!(
169            subnormal
170                .send_many(TransmissionValue::Bool(
171                    values
172                        .into_iter()
173                        .map(|val| val.float_is_subnormal())
174                        .collect()
175                ))
176                .await
177        )
178    }
179}
180
181/// Return largest integer less than or equal to `val`
182#[mel_function(
183    generic F (Float)
184)]
185pub fn floor(val: F) -> F {
186    val.float_floor()
187}
188
189/// Computes largest integer less than or equal to of streamed values.
190#[mel_treatment(
191    generic F (Float)
192    input value Stream<F>
193    output floor Stream<F>
194)]
195pub async fn floor() {
196    while let Ok(values) = value
197        .recv_many()
198        .await
199        .map(|values| Into::<VecDeque<Value>>::into(values))
200    {
201        check!(
202            floor
203                .send_many(TransmissionValue::Other(
204                    values.into_iter().map(|val| val.float_floor()).collect()
205                ))
206                .await
207        )
208    }
209}
210/// Return smallest integer greater than or equal to `val`
211#[mel_function(
212    generic F (Float)
213)]
214pub fn ceil(val: F) -> F {
215    val.float_ceil()
216}
217
218/// Computes smallest integer greater than or equal to of streamed values.
219#[mel_treatment(
220    generic F (Float)
221    input value Stream<F>
222    output ceil Stream<F>
223)]
224pub async fn ceil() {
225    while let Ok(values) = value
226        .recv_many()
227        .await
228        .map(|values| Into::<VecDeque<Value>>::into(values))
229    {
230        check!(
231            ceil.send_many(TransmissionValue::Other(
232                values.into_iter().map(|val| val.float_ceil()).collect()
233            ))
234            .await
235        )
236    }
237}
238/// Return nearest integer to `val`
239#[mel_function(
240    generic F (Float)
241)]
242pub fn round(val: F) -> F {
243    val.float_round()
244}
245
246/// Computes nearest integer to of streamed values.
247#[mel_treatment(
248    generic F (Float)
249    input value Stream<F>
250    output round Stream<F>
251)]
252pub async fn round() {
253    while let Ok(values) = value
254        .recv_many()
255        .await
256        .map(|values| Into::<VecDeque<Value>>::into(values))
257    {
258        check!(
259            round
260                .send_many(TransmissionValue::Other(
261                    values.into_iter().map(|val| val.float_round()).collect()
262                ))
263                .await
264        )
265    }
266}
267/// Return integer part of `val`
268#[mel_function(
269    generic F (Float)
270)]
271pub fn trunc(val: F) -> F {
272    val.float_trunc()
273}
274
275/// Computes integer part of streamed values.
276#[mel_treatment(
277    generic F (Float)
278    input value Stream<F>
279    output trunc Stream<F>
280)]
281pub async fn trunc() {
282    while let Ok(values) = value
283        .recv_many()
284        .await
285        .map(|values| Into::<VecDeque<Value>>::into(values))
286    {
287        check!(
288            trunc
289                .send_many(TransmissionValue::Other(
290                    values.into_iter().map(|val| val.float_trunc()).collect()
291                ))
292                .await
293        )
294    }
295}
296/// Return fractional part of `val`
297#[mel_function(
298    generic F (Float)
299)]
300pub fn fract(val: F) -> F {
301    val.float_fract()
302}
303
304/// Computes fractional part of streamed values.
305#[mel_treatment(
306    generic F (Float)
307    input value Stream<F>
308    output fract Stream<F>
309)]
310pub async fn fract() {
311    while let Ok(values) = value
312        .recv_many()
313        .await
314        .map(|values| Into::<VecDeque<Value>>::into(values))
315    {
316        check!(
317            fract
318                .send_many(TransmissionValue::Other(
319                    values.into_iter().map(|val| val.float_fract()).collect()
320                ))
321                .await
322        )
323    }
324}
325/// Return inverse of `val`
326#[mel_function(
327    generic F (Float)
328)]
329pub fn recip(val: F) -> F {
330    val.float_recip()
331}
332
333/// Computes inverse of streamed values.
334#[mel_treatment(
335    generic F (Float)
336    input value Stream<F>
337    output recip Stream<F>
338)]
339pub async fn recip() {
340    while let Ok(values) = value
341        .recv_many()
342        .await
343        .map(|values| Into::<VecDeque<Value>>::into(values))
344    {
345        check!(
346            recip
347                .send_many(TransmissionValue::Other(
348                    values.into_iter().map(|val| val.float_recip()).collect()
349                ))
350                .await
351        )
352    }
353}
354
355/// Compute exponent of given value
356#[mel_function(
357    generic F (Float)
358)]
359pub fn pow(val: F, exp: F) -> F {
360    val.float_pow(&exp)
361}
362
363/// Compute exponent of streamed values
364#[mel_treatment(
365    generic F (Float)
366    input value Stream<F>
367    output pow Stream<F>
368)]
369pub async fn pow(exp: F) {
370    while let Ok(values) = value
371        .recv_many()
372        .await
373        .map(|values| Into::<VecDeque<Value>>::into(values))
374    {
375        check!(
376            pow.send_many(TransmissionValue::Other(
377                values.into_iter().map(|val| val.float_pow(&exp)).collect()
378            ))
379            .await
380        )
381    }
382}
383
384/// Return square root of `val`
385#[mel_function(
386    generic F (Float)
387)]
388pub fn sqrt(val: F) -> F {
389    val.float_sqrt()
390}
391
392/// Computes square root of streamed values.
393#[mel_treatment(
394    generic F (Float)
395    input value Stream<F>
396    output sqrt Stream<F>
397)]
398pub async fn sqrt() {
399    while let Ok(values) = value
400        .recv_many()
401        .await
402        .map(|values| Into::<VecDeque<Value>>::into(values))
403    {
404        check!(
405            sqrt.send_many(TransmissionValue::Other(
406                values.into_iter().map(|val| val.float_sqrt()).collect()
407            ))
408            .await
409        )
410    }
411}
412/// Return exponential of `val`
413#[mel_function(
414    generic F (Float)
415)]
416pub fn exp(val: F) -> F {
417    val.float_exp()
418}
419
420/// Computes exponential of streamed values.
421#[mel_treatment(
422    generic F (Float)
423    input value Stream<F>
424    output exp Stream<F>
425)]
426pub async fn exp() {
427    while let Ok(values) = value
428        .recv_many()
429        .await
430        .map(|values| Into::<VecDeque<Value>>::into(values))
431    {
432        check!(
433            exp.send_many(TransmissionValue::Other(
434                values.into_iter().map(|val| val.float_exp()).collect()
435            ))
436            .await
437        )
438    }
439}
440/// Return 2 powered by  `val`
441#[mel_function(
442    generic F (Float)
443)]
444pub fn exp2(val: F) -> F {
445    val.float_exp2()
446}
447
448/// Computes 2 powered by  of streamed values.
449#[mel_treatment(
450    generic F (Float)
451    input value Stream<F>
452    output exp2 Stream<F>
453)]
454pub async fn exp2() {
455    while let Ok(values) = value
456        .recv_many()
457        .await
458        .map(|values| Into::<VecDeque<Value>>::into(values))
459    {
460        check!(
461            exp2.send_many(TransmissionValue::Other(
462                values.into_iter().map(|val| val.float_exp2()).collect()
463            ))
464            .await
465        )
466    }
467}
468/// Return natural logarithm of `val`
469#[mel_function(
470    generic F (Float)
471)]
472pub fn ln(val: F) -> F {
473    val.float_ln()
474}
475
476/// Computes natural logarithm of streamed values.
477#[mel_treatment(
478    generic F (Float)
479    input value Stream<F>
480    output ln Stream<F>
481)]
482pub async fn ln() {
483    while let Ok(values) = value
484        .recv_many()
485        .await
486        .map(|values| Into::<VecDeque<Value>>::into(values))
487    {
488        check!(
489            ln.send_many(TransmissionValue::Other(
490                values.into_iter().map(|val| val.float_ln()).collect()
491            ))
492            .await
493        )
494    }
495}
496
497/// Compute logarithm of given value
498#[mel_function(
499    generic F (Float)
500)]
501pub fn log(val: F, base: F) -> F {
502    val.float_log(&base)
503}
504
505/// Compute logarithm of streamed values
506#[mel_treatment(
507    generic F (Float)
508    input value Stream<F>
509    output log Stream<F>
510)]
511pub async fn log(base: F) {
512    while let Ok(values) = value
513        .recv_many()
514        .await
515        .map(|values| Into::<VecDeque<Value>>::into(values))
516    {
517        check!(
518            log.send_many(TransmissionValue::Other(
519                values.into_iter().map(|val| val.float_log(&base)).collect()
520            ))
521            .await
522        )
523    }
524}
525
526/// Return base 2 logarithm of `val`
527#[mel_function(
528    generic F (Float)
529)]
530pub fn log2(val: F) -> F {
531    val.float_log2()
532}
533
534/// Computes base 2 logarithm of streamed values.
535#[mel_treatment(
536    generic F (Float)
537    input value Stream<F>
538    output log2 Stream<F>
539)]
540pub async fn log2() {
541    while let Ok(values) = value
542        .recv_many()
543        .await
544        .map(|values| Into::<VecDeque<Value>>::into(values))
545    {
546        check!(
547            log2.send_many(TransmissionValue::Other(
548                values.into_iter().map(|val| val.float_log2()).collect()
549            ))
550            .await
551        )
552    }
553}
554/// Return base 10 logarithm of `val`
555#[mel_function(
556    generic F (Float)
557)]
558pub fn log10(val: F) -> F {
559    val.float_log10()
560}
561
562/// Computes base 10 logarithm of streamed values.
563#[mel_treatment(
564    generic F (Float)
565    input value Stream<F>
566    output log10 Stream<F>
567)]
568pub async fn log10() {
569    while let Ok(values) = value
570        .recv_many()
571        .await
572        .map(|values| Into::<VecDeque<Value>>::into(values))
573    {
574        check!(
575            log10
576                .send_many(TransmissionValue::Other(
577                    values.into_iter().map(|val| val.float_log10()).collect()
578                ))
579                .await
580        )
581    }
582}
583/// Return cube root of `val`
584#[mel_function(
585    generic F (Float)
586)]
587pub fn cbrt(val: F) -> F {
588    val.float_cbrt()
589}
590
591/// Computes cube root of streamed values.
592#[mel_treatment(
593    generic F (Float)
594    input value Stream<F>
595    output cbrt Stream<F>
596)]
597pub async fn cbrt() {
598    while let Ok(values) = value
599        .recv_many()
600        .await
601        .map(|values| Into::<VecDeque<Value>>::into(values))
602    {
603        check!(
604            cbrt.send_many(TransmissionValue::Other(
605                values.into_iter().map(|val| val.float_cbrt()).collect()
606            ))
607            .await
608        )
609    }
610}
611
612/// Compute hypotenuse of given value
613#[mel_function(
614    generic F (Float)
615)]
616pub fn hypot(val: F, n: F) -> F {
617    val.float_hypot(&n)
618}
619
620/// Compute exponent of streamed values
621#[mel_treatment(
622    generic F (Float)
623    input value Stream<F>
624    output hypot Stream<F>
625)]
626pub async fn hypot(n: F) {
627    while let Ok(values) = value
628        .recv_many()
629        .await
630        .map(|values| Into::<VecDeque<Value>>::into(values))
631    {
632        check!(
633            hypot
634                .send_many(TransmissionValue::Other(
635                    values.into_iter().map(|val| val.float_hypot(&n)).collect()
636                ))
637                .await
638        )
639    }
640}
641
642/// Return sine of `val`
643#[mel_function(
644    generic F (Float)
645)]
646pub fn sin(val: F) -> F {
647    val.float_sin()
648}
649
650/// Computes sine of streamed values.
651#[mel_treatment(
652    generic F (Float)
653    input value Stream<F>
654    output sin Stream<F>
655)]
656pub async fn sin() {
657    while let Ok(values) = value
658        .recv_many()
659        .await
660        .map(|values| Into::<VecDeque<Value>>::into(values))
661    {
662        check!(
663            sin.send_many(TransmissionValue::Other(
664                values.into_iter().map(|val| val.float_sin()).collect()
665            ))
666            .await
667        )
668    }
669}
670/// Return cosine of `val`
671#[mel_function(
672    generic F (Float)
673)]
674pub fn cos(val: F) -> F {
675    val.float_cos()
676}
677
678/// Computes cosine of streamed values.
679#[mel_treatment(
680    generic F (Float)
681    input value Stream<F>
682    output cos Stream<F>
683)]
684pub async fn cos() {
685    while let Ok(values) = value
686        .recv_many()
687        .await
688        .map(|values| Into::<VecDeque<Value>>::into(values))
689    {
690        check!(
691            cos.send_many(TransmissionValue::Other(
692                values.into_iter().map(|val| val.float_cos()).collect()
693            ))
694            .await
695        )
696    }
697}
698/// Return tangent of `val`
699#[mel_function(
700    generic F (Float)
701)]
702pub fn tan(val: F) -> F {
703    val.float_tan()
704}
705
706/// Computes tangent of streamed values.
707#[mel_treatment(
708    generic F (Float)
709    input value Stream<F>
710    output tan Stream<F>
711)]
712pub async fn tan() {
713    while let Ok(values) = value
714        .recv_many()
715        .await
716        .map(|values| Into::<VecDeque<Value>>::into(values))
717    {
718        check!(
719            tan.send_many(TransmissionValue::Other(
720                values.into_iter().map(|val| val.float_tan()).collect()
721            ))
722            .await
723        )
724    }
725}
726/// Return arcsine of `val`
727#[mel_function(
728    generic F (Float)
729)]
730pub fn asin(val: F) -> F {
731    val.float_asin()
732}
733
734/// Computes arcsine of streamed values.
735#[mel_treatment(
736    generic F (Float)
737    input value Stream<F>
738    output asin Stream<F>
739)]
740pub async fn asin() {
741    while let Ok(values) = value
742        .recv_many()
743        .await
744        .map(|values| Into::<VecDeque<Value>>::into(values))
745    {
746        check!(
747            asin.send_many(TransmissionValue::Other(
748                values.into_iter().map(|val| val.float_asin()).collect()
749            ))
750            .await
751        )
752    }
753}
754/// Return arcosine of `val`
755#[mel_function(
756    generic F (Float)
757)]
758pub fn acos(val: F) -> F {
759    val.float_acos()
760}
761
762/// Computes arcosine of streamed values.
763#[mel_treatment(
764    generic F (Float)
765    input value Stream<F>
766    output acos Stream<F>
767)]
768pub async fn acos() {
769    while let Ok(values) = value
770        .recv_many()
771        .await
772        .map(|values| Into::<VecDeque<Value>>::into(values))
773    {
774        check!(
775            acos.send_many(TransmissionValue::Other(
776                values.into_iter().map(|val| val.float_acos()).collect()
777            ))
778            .await
779        )
780    }
781}
782/// Return arctangent of `val`
783#[mel_function(
784    generic F (Float)
785)]
786pub fn atan(val: F) -> F {
787    val.float_atan()
788}
789
790/// Computes arctangent of streamed values.
791#[mel_treatment(
792    generic F (Float)
793    input value Stream<F>
794    output atan Stream<F>
795)]
796pub async fn atan() {
797    while let Ok(values) = value
798        .recv_many()
799        .await
800        .map(|values| Into::<VecDeque<Value>>::into(values))
801    {
802        check!(
803            atan.send_many(TransmissionValue::Other(
804                values.into_iter().map(|val| val.float_atan()).collect()
805            ))
806            .await
807        )
808    }
809}
810
811/// Compute the four quadrant arctangent of value and n
812#[mel_function(
813    generic F (Float)
814)]
815pub fn atan2(val: F, n: F) -> F {
816    val.float_atan2(&n)
817}
818
819/// Compute the four quadrant arctangent of streamed values
820#[mel_treatment(
821    generic F (Float)
822    input value Stream<F>
823    output atan2 Stream<F>
824)]
825pub async fn atan2(n: F) {
826    while let Ok(values) = value
827        .recv_many()
828        .await
829        .map(|values| Into::<VecDeque<Value>>::into(values))
830    {
831        check!(
832            atan2
833                .send_many(TransmissionValue::Other(
834                    values.into_iter().map(|val| val.float_atan2(&n)).collect()
835                ))
836                .await
837        )
838    }
839}
840
841/// Return hyperbolic sine `val`
842#[mel_function(
843    generic F (Float)
844)]
845pub fn sinh(val: F) -> F {
846    val.float_sinh()
847}
848
849/// Computes hyperbolic sine of streamed values.
850#[mel_treatment(
851    generic F (Float)
852    input value Stream<F>
853    output sinh Stream<F>
854)]
855pub async fn sinh() {
856    while let Ok(values) = value
857        .recv_many()
858        .await
859        .map(|values| Into::<VecDeque<Value>>::into(values))
860    {
861        check!(
862            sinh.send_many(TransmissionValue::Other(
863                values.into_iter().map(|val| val.float_sinh()).collect()
864            ))
865            .await
866        )
867    }
868}
869/// Return hyperbolic cosine `val`
870#[mel_function(
871    generic F (Float)
872)]
873pub fn cosh(val: F) -> F {
874    val.float_cosh()
875}
876
877/// Computes hyperbolic cosine of streamed values.
878#[mel_treatment(
879    generic F (Float)
880    input value Stream<F>
881    output cosh Stream<F>
882)]
883pub async fn cosh() {
884    while let Ok(values) = value
885        .recv_many()
886        .await
887        .map(|values| Into::<VecDeque<Value>>::into(values))
888    {
889        check!(
890            cosh.send_many(TransmissionValue::Other(
891                values.into_iter().map(|val| val.float_cosh()).collect()
892            ))
893            .await
894        )
895    }
896}
897/// Return hyperbolic tangent `val`
898#[mel_function(
899    generic F (Float)
900)]
901pub fn tanh(val: F) -> F {
902    val.float_tanh()
903}
904
905/// Computes hyperbolic tangent of streamed values.
906#[mel_treatment(
907    generic F (Float)
908    input value Stream<F>
909    output tanh Stream<F>
910)]
911pub async fn tanh() {
912    while let Ok(values) = value
913        .recv_many()
914        .await
915        .map(|values| Into::<VecDeque<Value>>::into(values))
916    {
917        check!(
918            tanh.send_many(TransmissionValue::Other(
919                values.into_iter().map(|val| val.float_tanh()).collect()
920            ))
921            .await
922        )
923    }
924}
925/// Return inverse hyperbolic sine `val`
926#[mel_function(
927    generic F (Float)
928)]
929pub fn asinh(val: F) -> F {
930    val.float_asinh()
931}
932
933/// Computes inverse hyperbolic sine of streamed values.
934#[mel_treatment(
935    generic F (Float)
936    input value Stream<F>
937    output asinh Stream<F>
938)]
939pub async fn asinh() {
940    while let Ok(values) = value
941        .recv_many()
942        .await
943        .map(|values| Into::<VecDeque<Value>>::into(values))
944    {
945        check!(
946            asinh
947                .send_many(TransmissionValue::Other(
948                    values.into_iter().map(|val| val.float_asinh()).collect()
949                ))
950                .await
951        )
952    }
953}
954/// Return inverse hyperbolic cosine `val`
955#[mel_function(
956    generic F (Float)
957)]
958pub fn acosh(val: F) -> F {
959    val.float_acosh()
960}
961
962/// Computes inverse hyperbolic cosine of streamed values.
963#[mel_treatment(
964    generic F (Float)
965    input value Stream<F>
966    output acosh Stream<F>
967)]
968pub async fn acosh() {
969    while let Ok(values) = value
970        .recv_many()
971        .await
972        .map(|values| Into::<VecDeque<Value>>::into(values))
973    {
974        check!(
975            acosh
976                .send_many(TransmissionValue::Other(
977                    values.into_iter().map(|val| val.float_acosh()).collect()
978                ))
979                .await
980        )
981    }
982}
983/// Return inverse hyperbolic tangent `val`
984#[mel_function(
985    generic F (Float)
986)]
987pub fn atanh(val: F) -> F {
988    val.float_atanh()
989}
990
991/// Computes inverse hyperbolic tangent of streamed values.
992#[mel_treatment(
993    generic F (Float)
994    input value Stream<F>
995    output atanh Stream<F>
996)]
997pub async fn atanh() {
998    while let Ok(values) = value
999        .recv_many()
1000        .await
1001        .map(|values| Into::<VecDeque<Value>>::into(values))
1002    {
1003        check!(
1004            atanh
1005                .send_many(TransmissionValue::Other(
1006                    values.into_iter().map(|val| val.float_atanh()).collect()
1007                ))
1008                .await
1009        )
1010    }
1011}
1012/// Return conversion to degrees of `val`
1013#[mel_function(
1014    generic F (Float)
1015)]
1016pub fn to_degrees(val: F) -> F {
1017    val.float_to_degrees()
1018}
1019
1020/// Computes conversion to degrees of streamed values.
1021#[mel_treatment(
1022    generic F (Float)
1023    input value Stream<F>
1024    output to_degrees Stream<F>
1025)]
1026pub async fn to_degrees() {
1027    while let Ok(values) = value
1028        .recv_many()
1029        .await
1030        .map(|values| Into::<VecDeque<Value>>::into(values))
1031    {
1032        check!(
1033            to_degrees
1034                .send_many(TransmissionValue::Other(
1035                    values
1036                        .into_iter()
1037                        .map(|val| val.float_to_degrees())
1038                        .collect()
1039                ))
1040                .await
1041        )
1042    }
1043}
1044/// Return conversion to radians of `val`
1045#[mel_function(
1046    generic F (Float)
1047)]
1048pub fn to_radians(val: F) -> F {
1049    val.float_to_radians()
1050}
1051
1052/// Computes conversion to radians of streamed values.
1053#[mel_treatment(
1054    generic F (Float)
1055    input value Stream<F>
1056    output to_radians Stream<F>
1057)]
1058pub async fn to_radians() {
1059    while let Ok(values) = value
1060        .recv_many()
1061        .await
1062        .map(|values| Into::<VecDeque<Value>>::into(values))
1063    {
1064        check!(
1065            to_radians
1066                .send_many(TransmissionValue::Other(
1067                    values
1068                        .into_iter()
1069                        .map(|val| val.float_to_radians())
1070                        .collect()
1071                ))
1072                .await
1073        )
1074    }
1075}